CRM4.0里放弃了使用CRM3.0常用的Callout功能,取而代之的是Plug-In。Plug-In是一个外部的Assembly被置入到CRM内部用来截取事件并可以和CRM进行交互,处理一些复杂逻辑。常见的可以截取的事件有一个实体的created, updated, or deleted等。Plug-In支持多重租赁,同步和异步运行,离线支持以及统一事件框架等。Plug-in通常会被应用于以下场景:

  l执行一个复杂的业务逻辑-在无法使用或很难使用Javascript和Workflow来处理时

  l在创建/更新实体时从其它系统获取数据

  l从CRM中更新其它系统

  创建CRM4.0的Plug-In通常需要创建一个类库(Class Library)类型的项目。Microsoft Dynamics CRM 4.0是基于.NET Framework 2.0的,所以我们需要创建基于.NET Framework 2.0的项目,但是你可以用Visual Basic或者C#. Microsoft Dynamics CRM 3.0 是基于.NET Framework 1.1的,所以对于CRM 3.0的Callout我们必须创建基于.NET Framework 1.1的项目。

  Develop A Custom Plug-in

  以下步骤演示了如何创建一个简单的CRM 4.0 plug-in 项目。

  1.    创建C# Class Library类型项目,命名为myPlugIn。

  2.    添加对”Microsoft.Crm.Sdk.dll”和”Microsoft.Crm.SdkTypeProxy.dll”的引用。这两个DLL在SDK"Bin目录中。

  3.    在类文件中添加对Microsoft.Crm.Sdk和Microsoft.Crm.SdkTypeProxy命名空间的应用,并且将类继承于IPlugin接口。

using System;

using System.Collections.Generic;

using System.Text;

using Microsoft.Crm.Sdk;

using Microsoft.Crm.SdkTypeProxy;

namespace myPlugIn

{

  public class Class1 : IPlugin

  {

  }

}

 4.    实现IPlugin接口的方法-如果你的类继承了IPlugin接口,那么Execute方法是必须被实现的。

  作为演示我们让这个Plugin在创建一个Account时(后)将它的Unique Identifier(AccountID)更新到Account Description字段里。

#region IPlugin Members

  public void Execute(IPluginExecutionContext context)

{

  DynamicEntity entity = (DynamicEntity)context.InputParameters.Properties["Target"];

    if (entity.Name == EntityName.account.ToString())

    {

      Guid id = (Guid)context.OutputParameters.Properties["Id"];

      Key myKey = new Key(id);

      if (!entity.Properties.Contains("accountid"))

      {

        entity.Properties["accountid"] = myKey;

      }

      if (!entity.Properties.Contains("description"))

      {

        entity.Properties["description"] = "GUID = " + id.ToString();

        ICrmService service = context.CreateCrmService(true);

        service.Update(entity);

      }

    }

  }

#endregion

5.    程序功能的实现就算完成了。但作为可以部署的DLL(为了安全的缘故)我们必须对这个项目实行强命名。

对项目进行强命名,在Solution Explorer中右键点击项目名称然后选择Properties -> Signing. 选择”Sign the assembly”复选框并通过”New…”下拉选项来添加新的SNK文件。保存各种更改,Build项目,下一步就是部署了。

编译PluginRegistration工具

为了部署我们的Plugin,我们需要注册它。两种方法可以选择:编程方式或者用PluginRegistratin工具。PluginRegistration看起来有点奇怪,说是个工具,实际上提供的是源代码,它也是由SDK提供的,地址在:CrmSdk4"SDK"Tools"PluginRegistration. 因为是源码,所以我们首先需要用Visual Studio 2005打开PluginRegistration.sln解决方案文件。

打开解决方案后,首先需要添加两个丢失的Web References.

http://<servername>/MSCRMServices/2007/CrmServiceWsdl.aspx

http://<servername>/MSCRMServices/2007/AD/CrmDiscoveryService.asmx

并且将Web Reference的URL Behavior设置为Static. 最终完成的结果类似如下图所示:

现在我们可以成功的编译项目了,当编译完项目后我们可以在CrmSdk4"SDK"Tools"PluginRegistration"bin"Debug目录下找到PluginRegistration.exe文件,为了更方便的使用,你可以将这个工具集成到Visual Studio IDE中,这里我们就不讲这个了,可以直接通过运行PluginRegistration.exe来启动我们的注册过程。

注册Plug-in

运行PluginRegistration工具之后,连接CRM Server的窗体就会出现。在这个窗体中输入你的用户名和密码来连接到你的CRM Server上。注意:这里输入的用户名密码必须是有效的登录到CRM 里的帐户(同时也是一个邮箱的Windows(Domain)帐户)。然后可以通过”Get Organizations”按钮来获取CRM里的组织。如果不能连接,将会提示错误。 

选择你需要将Plugin注册到的Organization并且点击”Get Connection”按钮。如果成功连接这个Organization将会弹出如下图所示的提示框:

并且同时会将窗体上放的”Assembly Registration”和”Step Registration”按钮Enable. 点击”Assembly Registration”按钮开始我们的注册。通过点击Assembly Location旁边的”…”浏览按钮选择我们的Plugin类库DLL, 然后点击”Register”按钮来注册。注册完毕后,PluginRegistration会弹出一个对话框来提示是否成功。如果成功的话,对话框里会含有一个Assembly ID,如下图所示:

我们可以通过”Get Assemblies”来验证我们上面的注册过程。如果注册成功,你会在下边的Plugin List里边看到刚才注册的信息:

既然我们已经将自定义的插件程序集注册给了CRM,其实这就相当于我们给一个普通的项目加了引用。但是由于插件是个特定的动作关联的,所以我们接下来要做的事情就是将这个DLL和某个Entity,Event关联在一起。在我们的特定示例里,我们需要关联Account实体的Create事件:创建Account实体的一条记录时会触发我们的Plug-in. 如下图所示,选择相关的”MessageName”和”EntityName”并通过点击”Register Step on the PluginType”按钮结束注册。

最后修改:2010 年 12 月 09 日
一分也是爱