CRM插件PreImage不更新相关实体

时间:2016-07-11 10:40:43

标签: c# plugins dynamics-crm

我在开发方面相当新,但在为Dynamics CRM创建插件时遇到了问题。当字段primarycontactid更新为其他内容时,插件应该在联系实体链接到的帐户实体时更新parentcustomerid字段为null,或者在链接到另一个联系人时为null。

使用我编写的代码,当前没有抛出任何错误,代码执行成功,但parentcustomerid字段仍然包含它应该删除链接时链接的帐户。

这是我目前的代码:

    public void Execute(IServiceProvider serviceProvider)
    {       
            ITracingService tracingService = (ITracingService)serviceProvider.GetService(typeof(ITracingService));


            //Obtain the execution context
            IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));

            //obtain organizational services
            IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
            IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);

            EntityReference prePCID;
            Entity PreImage;
            // The InputParameters collection contains all the data passed in the message request.
            if (context.InputParameters.Contains("Target") &&
                context.InputParameters["Target"] is Entity)
            {
                // Obtain the image entity from the Pre Entity Images.
                tracingService.Trace
                    ("trace1: Getting the target entity from Input Parameters.");
                PreImage = (Entity)context.InputParameters["Target"];

                // Verify that the target entity represents an account.
                // If not, this plug-in was not registered correctly.
                tracingService.Trace
                   ("trace2: Verifying that the target entity represents a account.");
                if (PreImage.LogicalName == "account")
                {
                    if (PreImage.Attributes.Contains("primarycontactid"))
                    {
                        tracingService.Trace
                            ("trace3: Setting the primary contact id in the prePCID.");
                    //prePCID = (EntityReference)PreImage.Attributes["primarycontactid"];
                    prePCID = (EntityReference)PreImage["primarycontactid"];

                        tracingService.Trace
                            ("trace4: Primary Contact Name: " + prePCID.Name + " Creating a variable that stores the contact using the prePCID.");
                        Entity contactToRemoveReference = service.Retrieve("contact", prePCID.Id, new ColumnSet("parentcustomerid")) as Entity;
                        tracingService.Trace
                            ("trace5: Removes the id: " + prePCID.Id + " of the parentcustomerid.");
                        contactToRemoveReference.Attributes["parentcustomerid"] = null;

                        service.Update(contactToRemoveReference);
                        tracingService.Trace
                            ("trace6: Execution Successful.");
                    }
                } 

        }

}

如果有人能为我解决这个问题,那将非常感谢。

1 个答案:

答案 0 :(得分:0)

您正在输入参数中填充来自主要实体的实体变量 PreImage 。 我认为你应该从Pre图像中得到它:

Entity PreImage;
if (context.PreEntityImages.Contains("yourPreImageName") && context.PreEntityImages["yourPreImageName"] != null)
{
    PreImage = context.PreEntityImages["yourPreImageName"];
}