CRM 2011操作前更新相关实体查找字段

时间:2012-02-09 11:00:17

标签: c# dynamics-crm dynamics-crm-2011 crm microsoft-dynamics

我正在尝试更新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);
        }

任何帮助都将不胜感激。

感谢。

1 个答案:

答案 0 :(得分:2)

我同意彼得。

必须是EntityReference,而且必须是new EntityReference

试试这个:

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