2012-02-09 93 views
2

我正在嘗試更新CRM 2011預操作更新插件中的相關記錄。一個簡單的查詢根據幾個參數檢索一組相關的實體,然後來自結果查詢的每個實體都會查找相關的實體集。但是,引發異常時引發InvalidCastException。通過代碼遍歷代碼中的每個值看起來都是正確的,Guids在期望的地方等。我禁用了可能涉及目標和相關實體的其他插件,但問題依然存在。目標實體與相關實體之間的關係爲1:N。我已經證實,這個問題並不是因爲這個屬性期望的是一個EntityReference而不是一個Guid。CRM 2011預操作更新相關實體查找字段

該插件的代碼是下面,我在那裏取代真正的實體/屬性名稱的更加明顯代理(它使用的開發工具包,插件類文件): -

Entity targetEntity = (Entity)localContext.PluginExecutionContext.InputParameters["Target"]; 

     QueryExpression query = new QueryExpression 
     { 
      EntityName = "relatedEntity", 
      Criteria = 
      { 
       Conditions = 
       { 
        new ConditionExpression("testOptionSetAttribute", ConditionOperator.Equal, 100000004), 
        new ConditionExpression("parentEntityId", ConditionOperator.Null) 
       } 
      } 
     }; 

     EntityCollection resultsCollection = localContext.OrganizationService.RetrieveMultiple(query); 

     foreach (Entity result in resultsCollection.Entities) 
     { 
      result.Attributes["parentEntityId"] = targetEntity.Id; 
      localContext.OrganizationService.Update(result); 
     } 

任何幫助,將不勝感激。

謝謝。

+1

如果'targetEntity'真是一個1:N與'relatedEntity',然後'result.Attributes [ 「parentEntityId」]關係'絕對必須是一個'EntityReference',不只是一個「Guid」。 – 2012-02-10 01:13:27

回答

2

我同意彼得。

它必須是EntityReference,而且它必須是new EntityReference

嘗試這種情況:

result.Attributes["parentEntityId"] = new EntityReference(targetEntity.EntityLogicalName, targetEntity.Id); 
+0

謝謝Peter/Grigory。這是正確的,實際上原來是在插件中。我認爲,當我開始在磁盤上調試插件時,最初的問題可能會出現。當使用CrmPackage部署實用程序時,我發現該文件不能可靠地在磁盤上更新,因此我最終因部署不良而更改了代碼! – 2012-02-10 09:23:38

相關問題