2012-02-09 99 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

相关问题