dynamics-crm-2011 - CRM 2011 Post Operation Plugin - 尝试保存引用实体时不存在主要实体

标签 dynamics-crm-2011

我正在尝试为现场 Dynamics CRM 2011 安装创建插件。

我已经注册了插件如下:

  • 留言:创建
  • 主要实体:联系方式
  • 执行阶段:术后
  • 执行方式:同步
  • 执行顺序:1

  • 插件代码如下:

    public void Execute(IServiceProvider serviceProvider)
    {
        var pluginExecContext = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
    
        var orgServiceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
        var orgService = orgServiceFactory.CreateOrganizationService(pluginExecContext.UserId);
        var orgServiceContext = new OrganizationServiceContext(orgService);
    
        var tracingService = (ITracingService)serviceProvider.GetService(typeof(ITracingService));
    
        if (pluginExecContext.InputParameters.Contains("Target") &&
                pluginExecContext.InputParameters["Target"] is Entity)
        {
            var target = (Entity)pluginExecContext.InputParameters["Target"];
    
            if (target.LogicalName != Contact.EntityLogicalName) 
                return;
    
            try
            {
                var customerServicesUser = orgServiceContext.CreateQuery(SystemUser.EntityLogicalName)
                    .Where(x => (string)x["fullname"] == "Customer Services").FirstOrDefault();
    
                if (customerServicesUser == null)
                    throw new InvalidPluginExecutionException("No Customer Services user exists.");
    
                var sendEmail = new cdi_sendemail
                    {
                        cdi_fromrecordowner = false,
                        cdi_contactid = new EntityReference(Contact.EntityLogicalName, pluginExecContext.PrimaryEntityId),
                        cdi_fromid = new EntityReference(SystemUser.EntityLogicalName, customerServicesUser.Id)
                    };
    
                tracingService.Trace("PostContactCreate plug-in: Creating the cdi_sendemail entity.");
                orgService.Create(sendEmail);
            }
            catch (FaultException<OrganizationServiceFault> ex)
            {
                throw new InvalidPluginExecutionException("An error occurred in the PostContactCreate plug-in.", ex);
            }
            catch (Exception ex)
            {
                tracingService.Trace("PostContactCreate plug-in: {0}", ex.ToString());
                throw;
            }
        }
    }
    

    当我使用 pluginregistration 工具分析插件并调试错误异常时,我收到以下错误:

    Contact With Id = abbc7e0a-20a0-e111-a36e-005056860004 Does Not Exist.



    我有点理解插件正在尚未提交的 SQL 事务中执行。 CRM SDK 示例中的“FollowupPlugin”也创建了一个引用实体,声明它需要异步注册,这也是有意义的,因为它允许提交 SQL 事务。

    所以我想我的问题是,如何在同步插件中创建引用实体?

    最佳答案

    看着SDK example for a very similar example - 我认为您需要在沙箱中注册。

    Register this plug-in for an account entity, on the Create message, and in asynchronous mode. Alternately, you can register the plug-in on a post-event in the sandbox.

    关于dynamics-crm-2011 - CRM 2011 Post Operation Plugin - 尝试保存引用实体时不存在主要实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10638152/

    相关文章:

    c# - 客户关系管理 2011 : Wsdl web service doesn't contain my entities

    dynamics-crm-2011 - 使用RetrieveMultipleRequest检索每个实体的相关实体

    javascript - Crm字段控制命令Javascript

    sql - 两个实体如何与 1 :N relationship related?

    c# - TimeZoneCode 到 TimeZoneInfo

    dynamics-crm-2011 - 创建 "Split Button"

    javascript - 如何使用 MS Dynamics CRM REST 端点更新或删除现有电话/电子邮件记录的发件人和收件人

    c# - 在 QueryExpression 中包含 OptionSetValue

    sql-server - 如何改善 CRM 2011 On Prem Dev Environment 中的删除超时问题?

    dynamics-crm - 在电子邮件模板中添加动态链接时出现问题 - CRM Dynamics 365