2016-01-15 45 views
0

我需要從實體中提取單個值。這是一種全球性的設置,它與呼叫實體沒有關係。但是,當我嘗試使用RetrieveMultiple來做到這一點時,我收到了一個空的答覆。檢索單個實體

string name="objectToRetrieve"; 
QueryExpression qe = new QueryExpression { EntityName = "new_setting", ColumnSet =new ColumnSet ("new_name","new_value")}; 
qe.Criteria.AddCondition("new_name", ConditionOperator.Equal, name); 
EntityCollection response = service.RetrieveMultiple(qe); 

當我檢索它通過Guid一切工作正常。

Entity response = service.Retreve("new_setting", Guid.Parse("09BF9644-9BBA-E511-80FA-005056924035), new ColumnSet("new_value")); 

我該如何得到它沒有Guid

+0

由於某種原因'new_setting.new_name!= name' - 就這麼簡單。是否有可能以某種方式在CRM字段值中具有前導/尾隨空格或隱藏字符?如果您進行高級查找,它會起作用嗎?如果是這樣,請下載FetchXml並查看它是否會在您的代碼中用作測試。 – Nicknow

+0

可能由addcondition的添加方式引起,我個人首先創建一個FilterExpression,將Condition添加到filterexpression,並將Filterexpression分配給Criteria屬性後。如果OP想測試... –

回答

1

您的檢索倍數設置是否正確。因此,有幾個選項可能會發生...

  • 如果您沒有從檢索多個記錄中取回記錄,那麼您通過GUID檢索到的記錄沒有您認爲的new_name值它確實如此。
  • 如果你得到一個記錄,並且它不包含new_value的值,那麼你可能有多個具有相同new_name值的記錄,並且你得到了一個不同的記錄。檢查GUID以查看它是否符合您的期望。
  • 您可能有一個在檢索倍數上觸發的插件,即修改返回的結果。
  • 潛在地,您也可能會碰到不同的組織,或者可能使用不具有閱讀該實體權限的其他用戶,因爲如果他們的組織。這是在插件還是外部進程中運行?

你的代碼是正確的,你必須考慮你做出的假設是否屬實。我首先要確保返回的實體的GUID與你所期望的相符。

+0

謝謝,那真的是一個插件,它爲new_name添加了附加信息給字符串。 – user3032348

-1

當您需要通過名稱查詢單個記錄時,您的代碼示例應該能夠做到這一點。當然,在被查詢的系統中,實際上必須有一個名爲「objectToRetrieve」的記錄存在。我會先找那裏的錯誤。

考慮在記錄狀態上添加過濾器。在Dynamics CRM中,記錄可以是活動的或不活動的。通常預計不活動記錄將被排除在業務流程之外。

此外,當您的查詢應該永遠不會返回超過1行時,您可以將TopCount屬性設置爲1.這允許SQL Server更高效地處理您的查詢。

所以,或者你的第一個查詢看起來是這樣的:

var query = new QueryExpression("new_setting") { TopCount = 1 }; 
query.ColumnSet.AddColumn("new_setting"); 
query.Criteria.AddCondition("new_name", ConditionOperator.Equal, name); 
query.Criteria.AddCondition("statecode", ConditionOperator.Equal, 0); 

EntityCollection response = service.RetrieveMultiple(query); 

// Assuming new_value is a string attribute: 
Console.WriteLine(response.Entities[0].GetAttributeValue<string>("new_value")); 

你的第二個代碼段包含錯別字,但這個想法是OK。當你知道在正手拿到ID時的記錄ID是最有效的事情。

Entity settingEntity = service.Retrieve("new_setting", new Guid("09BF9644-9BBA-E511-80FA-005056924035"), new ColumnSet("new_value"));