Dynamics CRM 2011 编程系列(20):插件队列

   Dynamics CRM 2011中的插件支持队列执行,假如你的业务依赖执行上下文的先后顺序则将插件配置成队列执行将是个不错的选择。

涉及的实体

联系人

客户

商机


需要实现的需求

1.创建联系人的时候自动根据该联系人的名称创建一条客户记录。

2.创建一条商机记录,并将该商机记录关联到创建的客户上。


实现方案

   在联系人的Create事件中开发2个插件:1负责创建客户记录的插件,2负责创建商机记录的插件。但是这两个插件必须按照先执行插件1再执行插件2的顺序执行。


实现步骤

Dynamics CRM 2011 编程系列(20):插件队列_第1张图片

图1 为插件注册步骤

Dynamics CRM 2011 编程系列(20):插件队列_第2张图片

图2

Dynamics CRM 2011 编程系列(20):插件队列_第3张图片

图3

Dynamics CRM 2011 编程系列(20):插件队列_第4张图片

图4

Dynamics CRM 2011 编程系列(20):插件队列_第5张图片

图5

Dynamics CRM 2011 编程系列(20):插件队列_第6张图片

图6

使用到的代码

 TestQueue.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Query;
using Microsoft.Xrm.Sdk.Messages;

namespace Plugin20
{
    public class TestQueue:IPlugin
    {
        public void Execute(IServiceProvider serviceProvider)
        {
            IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
            IOrganizationServiceFactory factory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
            IOrganizationService service = factory.CreateOrganizationService(null);

            Entity curEntity = (Entity)context.InputParameters["Target"];

            //创建客户
            Entity account = new Entity();
            account.LogicalName = "account";
            account["name"] ="公司主要联系人:"+curEntity["lastname"].ToString();
            Guid accountid= service.Create(account);

            context.SharedVariables.Add("AccountId", accountid);


        }
    }
}


TestQueue2.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Query;
using Microsoft.Xrm.Sdk.Messages;

namespace Plugin20
{
    public class TestQueue2 : IPlugin
    {
        public void Execute(IServiceProvider serviceProvider)
        {
            IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
            IOrganizationServiceFactory factory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
            IOrganizationService service = factory.CreateOrganizationService(null);

            Entity curEntity = (Entity)context.InputParameters["Target"];

            //创建商机
            Entity opportunity = new Entity();
            opportunity.LogicalName = "opportunity";
            opportunity["name"] = "商机-主要客户:" + curEntity["lastname"].ToString();
            Guid curAccId = (Guid)context.SharedVariables.Where((p) =>
            {
                if (p.Key.ToLower() == "accountid")
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }).First().Value;
            opportunity["customerid"] = new EntityReference("account", curAccId);
            service.Create(opportunity);


        }
    }
}


小结

   使用context.SharedVariables的时候必须格外小心,必须明白你现在调用的元素是你需要的。

 

 

你可能感兴趣的:(Dynamics CRM 2011 编程系列(20):插件队列)