0

我就是你所说的 CRM 插件开发中的“n00b”。我正在尝试为 Microsoft 的 Dynamics CRM 2011 编写一个插件,该插件将在您创建新联系人时创建一个新的活动实体。我希望这个活动实体与联系人实体相关联。

这是我当前的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xrm.Sdk;

namespace ITPH_CRM_Deactivate_Account_SSP_Disable
{
    public class SSPDisable_Plugin: IPlugin
    {

        public void Execute(IServiceProvider serviceProvider)
        {

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

            IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
            IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);

            if (context.InputParameters.Contains("Target") && context.InputParameters["target"] is Entity)
            {
                Entity entity = context.InputParameters["Target"] as Entity;

            if (entity.LogicalName != "account")
            {
                return;
            }

            Entity followup = new Entity();
            followup.LogicalName = "activitypointer";
            followup.Attributes = new AttributeCollection();
            followup.Attributes.Add("subject", "Created via Plugin.");
            followup.Attributes.Add("description", "This is generated by the magic of C# ...");
            followup.Attributes.Add("scheduledstart", DateTime.Now.AddDays(3));
            followup.Attributes.Add("actualend", DateTime.Now.AddDays(5));

            if (context.OutputParameters.Contains("id"))
            {
                Guid regardingobjectid = new Guid(context.OutputParameters["id"].ToString());
                string regardingobjectidType = "account";

                followup["regardingobjectid"] = new EntityReference(regardingobjectidType, regardingobjectid);

            }

            service.Create(followup);

        }


    }

}

但是当我尝试运行此代码时:尝试在 CRM 环境中创建新联系人时出现错误。错误是:“字典中不存在给定的键”(链接 *1)。当我尝试保存新联系人时,错误弹出。

链接*1: http: //puu.sh/4SXrW.png
(翻译粗体文本:“业务流程错误”)

4

2 回答 2

2

Microsoft Dynamics CRM 使用术语活动来描述几种类型的交互。活动类型有:电话、任务、电子邮件、信件、传真和约会。

ActivityPointer(活动)实体

使您的代码正常工作替换以下行:

Entity followup = new Entity();

Entity followup = new Entity("task");

并删除以下行:

followup.LogicalName = "activitypointer";

也请阅读我的评论和上面 Guido Preite 的推荐。您需要修改代码以使其与联系人一起使用。

已编辑

ContactId在将CRM 引用到 Activity 之前,请确保它确实存在于 CRM 中。

于 2013-10-18T09:44:38.070 回答
0

如果您明确地将属性值添加到插件中已添加的目标实体,则通常会发生这种情况。

而不是 entity.Attributes.Add(...)

使用实体[“属性名”] = ...

于 2013-10-18T13:06:55.097 回答