Dynamics 365 插件分步指南

2025-06-07

Dynamics 365 插件分步指南

Microsoft Dynamics 365 是一款业务无关的产品,为各行各业的组织提供灵活且可定制的平台。插件进一步增强了这种业务无关性,允许企业根据自身需求定制平台,并扩展其开箱即用功能之外的功能。
插件是服务器端自定义组件,可与平台的服务和数据交互。插件在 Dynamics 365 服务器环境中运行,并可由平台内发生的事件(也称为消息)触发。插件执行时,可以利用 Dynamics 365 平台的服务(例如组织服务)执行各种操作,包括但不限于基本的 CRUD 操作:检索、创建、更新和删除记录。

要为 Microsoft Dynamics 365 开发插件,您可以按照以下步骤操作:

1. 设置您的开发环境:
安装用于 Dynamics 365 开发的 Visual Studio 社区版。

Visual Studio 社区版

在“工作负载”下选择“.NET 桌面开发”:

选择 .NET 桌面开发

转到“单个组件”选项卡,在开发活动下,选择:Window Workflow Foundation

选择窗口工作流基础下的开发活动

然后,单击安装并选择 C# 环境。

2.创建一个新的插件项目:

下一步是创建一个新项目并选择类库(.NET Framework),然后单击下一步:

选择类库.NET框架

配置项目和解决方案名称,然后单击“创建”。该解决方案包含以下项目集合:

项目和解决方案的配置名称

使用任何有意义的名称来重命名class1.cs

重命名 class1

3.添加引用:

转到工具 -> NuGet 包管理器 -> 管理解决方案的 NuGet 包。然后,浏览(在搜索框中输入 Dynamics 365),选择并安装以下内容:
Package1:Microsoft.CrmSDK.CoreAssemblies
package2:Microsoft.CrmSDK.XrmTooling.PluginRegistrationTool

转到解决方案资源管理器->右键单击引用->添加引用->浏览->转到solution name folder(此示例中为 ClassLibrary1 文件夹)->包-> Microsoft.CrmSDK.CoreAssemblies->lib->net462->添加Microsoft.Xrm.Sdk.dll->确定->包含using Microsoft.Xrm.Sdk

从引用添加System.ServiceModel
转到解决方案资源管理器->右键单击引用->添加引用->程序集->框架->System.ServiceModel在搜索字段中输入->选择System.ServiceModel->确定->包括using System.ServiceModel

包括 SDK 和 System.ServiceModel 库

4.定义插件类:

创建一个新类,实现IPluginDynamics 365 SDK 提供的接口。然后,实现接口Execute提供的方法IPlugin,该方法将在插件触发时调用。
请前往Microsoft 文档并复制 Execute 方法逻辑模板:



public class MyPlugin : IPlugin
{
  public MyPlugin() {} // Constructor, does nothing

  public void Execute(IServiceProvider serviceProvider)
  {
    // Obtain the execution context
    IPluginExecutionContext context = (IPluginExecutionContext)
      serviceProvider.GetService(typeof(IPluginExecutionContext));

    // Obtain the Organization service reference 
    IOrganizationServiceFactory serviceFactory =
      (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
    IOrganizationService orgService = serviceFactory.CreateOrganizationService(context.UserId);

    // Obtain the Tracing service reference
    ITracingService tracingService =
      (ITracingService)serviceProvider.GetService(typeof(ITracingService));

    try
    {
      // TODO Plug-in business logic goes here. You can access data in the context,
      // and make calls to the Organization web service using the Dataverse SDK.
    }
    catch (FaultException<OrganizationServiceFault> ex)
    {
      throw new InvalidPluginExecutionException("The following error occurred in MyPlugin.", ex);
    }
    catch (Exception ex)
    {
        tracingService.Trace("MyPlugin: error: {0}", ex.ToString());
        throw;
    }
}


Enter fullscreen mode Exit fullscreen mode

执行方法接受一个IServiceProvider参数,该参数包含一个方法GetService。此方法提供对执行上下文数据的访问(有关引发事件并调用插件的实体和消息请求的信息)。此外,GetService此方法还提供对组织 Web 服务的访问,以便对数据库执行消息请求(即读取、更新、创建、删除)。

5.处理插件执行:

实体可通过上下文访问,该上下文包含一个InputParameters集合,该集合包含Contains一个带有Target键的对象以及消息请求中传递的所有数据。实体是一个通用类,可以表示任何记录(例如联系人、帐户、任务……)。它提供了插件注册的给定记录的相应属性的集合。这些属性可以通过逻辑名称(而非显示名称)访问。



try
       {
         // Plug-in business logic goes here.  

 string firstName = entity.Attributes["firstname"].ToString();
                    }
 string lastName = entity.Attributes["lastname"].ToString();
         // Assign data to attributes

 entity.Attributes.Add("description", "Greetings! " +  firstName + " " + lastName);
                }


Enter fullscreen mode Exit fullscreen mode

下一步是使用加密算法对程序集进行签名,因为云平台只允许签名的程序集:
右键单击项目->属性->签名->勾选“对程序集进行签名”->选择“新建”->添加密钥文件名->选择是否添加密码->保留默认或更改算法->确定->保存->构建解决方案。
完成此步骤后,代码将被编译,并以文件形式创建一个程序集dll

6.注册并部署插件:

使用步骤3中下载的插件注册工具将dll文件上传到云端:
右键单击项目名称->在资源管理器中打开文件夹->在文件夹目录中上一步->包-> Microsoft.CrmSdk.XrmTooling.PluginRegistrationTool->工具->打开PluginRegistration->创建新连接->使用Dynamics 365凭据登录,选择Office 365和区域->登录:

插件注册工具登录

转到注册->注册新程序集->浏览到项目->bin->调试->选择filename.dll->打开->在步骤2中选择程序集->在步骤3和4中保留默认设置->注册->确定。

插件现已上传到程序集列表。接下来,我们应该配置插件的执行时间:
选择插件,然后右键单击 -> 单击“注册新步骤”:

注册新步骤表格
消息:创建 -> 主要实体:联系人 -> 事件管道执行阶段:预操作 -> 注册新步骤。

插件管道:服务器上发生了什么?
图片来源:Paresh Sharma https://www.tech-quantum.com/d365-understanding-plug-in-pipeline/

该插件将更新传递给主事件的主要实体的属性集合contact。当用户创建帐户(名字和姓氏)时,数据将通过管道进入预操作阶段,并在该阶段serviceProvider提供上下文数据。从该上下文中,我们可以提取实体信息。在本例中,实体代表contact表单。

7.测试插件:

在销售中心创建新联系人:

创建测试联系人

前往详情并查看个人备注:

个人笔记问候用户

在整个博客中,我们讨论了开发插件的逐步过程,包括设置开发环境、定义插件逻辑、注册、部署和测试插件。

参考文献:
https://learn.microsoft.com/en-us/power-apps/developer/data-platform/plug-ins

文章来源:https://dev.to/nissrinecan/dynamics-365-plug-in-step-by-step-2ghn
PREV
用于 React 的 Framer Motion API
NEXT
关于 Service Worker 你想了解的一切