我正在尝试更新CRM 2011预操作更新插件中的相关记录。简单查询基于一些参数检索一组相关实体,然后来自结果查询的每个实体都将其查找到相关实体集。但是,当抛出异常时会抛出InvalidCastException。逐步完成代码后,每个值看起来都是正确的,Guids在预期的位置等。我已经禁用了可能涉及目标和相关实体的其他插件,但问题仍然存在。 targetEntity和relatedEntity之间的关系是1:N。我已经确认这个问题不是因为该属性在单步执行时期望EntityReference而不是Guid。
插件的代码如下所示,我已经为更明显的代理替换了真实的实体/属性名称(它使用了开发人员工具包插件类文件): -
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);
}
任何帮助都将不胜感激。
感谢。
答案 0 :(得分:2)
我同意彼得。
必须是EntityReference
,而且必须是new EntityReference
。
试试这个:
result.Attributes["parentEntityId"] = new EntityReference(targetEntity.EntityLogicalName, targetEntity.Id);