C# 在CRM 2011的新活动中从“收件人”字段获取数据

C# 在CRM 2011的新活动中从“收件人”字段获取数据,c#,plugins,dynamics-crm-2011,crm,C#,Plugins,Dynamics Crm 2011,Crm,我为一个服装活动实体的DynamicCRM 2011创建了一个新插件 这项新活动有“收件人”字段,如电子邮件和其他一些活动 插件正在为活动创建和更新步骤 我的问题是,当我想将“转换为”字段值时,下面的代码行返回假值,我不知道我做了什么。事实上,我可以获取其他自定义字段,而只有“to”字段不起作用 if (entity3.Attributes.Contains("to")) 这就是全部代码: public void Execute(IServiceProvider serviceProvider

我为一个服装活动实体的DynamicCRM 2011创建了一个新插件

这项新活动有“收件人”字段,如电子邮件和其他一些活动

插件正在为活动创建和更新步骤

我的问题是,当我想将
“转换为”
字段值时,下面的代码行返回假值,我不知道我做了什么。事实上,我可以获取其他自定义字段,而只有
“to”
字段不起作用

if (entity3.Attributes.Contains("to"))
这就是全部代码:

public void Execute(IServiceProvider serviceProvider)
{
    if (serviceProvider == null)
    {
        throw new ArgumentNullException("serviceProvider");
    }

    IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
    if (context.InputParameters.Contains("Target") && (context.InputParameters["Target"] is Entity))
    {
            Entity entity2 = (Entity)context.InputParameters["Target"];
            if (entity2.LogicalName == "EntityAtivity")
            {
                QueryExpression expression3 = new QueryExpression("EntityAtivity");
                ColumnSet set2 = new ColumnSet();
                set2.AllColumns = true;
                expression3.ColumnSet = set2;
                ConditionExpression item = new ConditionExpression();
                item.AttributeName = "activityid";
                CurrentGuid = (Guid)entity2.Attributes["activityid"];
                item.Values.Add(this.CurrentGuid);
                FilterExpression expression5 = new FilterExpression();
                expression5.Conditions.Add(item);
                expression3.Criteria = expression5;
                EntityCollection entitys2 = service.RetrieveMultiple(expression3);
                foreach (Entity entity3 in entitys2.Entities)
                {
                    this.dbGuid = (Guid)entity3.Attributes["activityid"];
                    if (entity3.Attributes.Contains("to"))
                    {
                        try
                        {
                            foreach (Entity entity10 in ((EntityCollection)entity3.Attributes["to"]).Entities)
                            {
                                this.dbTo.Add(((EntityReference)entity10.Attributes["partyid"]).LogicalName);
                                this.dbToId.Add(((EntityReference)entity10.Attributes["partyid"]).Id);
                            }
                        }
                        catch (Exception)
                        {
                            this.dbTo.Clear();
                        }
                    }
                } // foreach
            }//if (entity2.LogicalName == "EntityAtivity")
    }//if (context.InputParameters.Contains("Target") && (context.InputParameters["Target"] is Entity))
}
你知道我应该怎么做才能纠正插件吗?

所以我解决了我的问题。 我创建了两个步骤,用于创建和更新


当我禁用创建步骤并为更新步骤创建预映像时,请插入fetch
to
字段并显示值。

您的问题和答案很难理解,因为您的英语可能需要一些工作,但我相信您的问题是,您在尚未设置的值的目标中查找属性。若一个属性并没有被设置或更新,它将不会显示在插件的目标中。正如@AndyMeyers所说,您应该使用
前图像
后图像
图像来定义在插件处理过程中始终希望包含的属性。

EntityActivity
不是实体的有效名称。在编码时,它使用的逻辑名称都是小写的,并且以前缀“new_”开头。当从插件触发的记录中检索值时,您应该使用目标输入参数,或者注册Pre&Post实体图像。EntityActivity只是一个示例名称。我使用了preimage,但我面临新的错误:Entity preEntity=(Entity)context.PreEntityImages.[“preimage”];是否正确?通过插件工具注册
前图像
后图像
名称。你可以选择你想要的图像、名称以及其中的可用字段。安迪·梅耶斯:坦克。我解决它。谢谢你的帮助。当我使用pre-image时,我的问题已经解决了。但是有一个问题。我可以用预映像来“创建”步骤吗?@Aqil图片很难看到,但从这里你可以看到:不,预映像不存在。