Dynamics 365 插件分步指南
Microsoft Dynamics 365 是一款业务无关的产品,为各行各业的组织提供灵活且可定制的平台。插件进一步增强了这种业务无关性,允许企业根据自身需求定制平台,并扩展其开箱即用功能之外的功能。
插件是服务器端自定义组件,可与平台的服务和数据交互。插件在 Dynamics 365 服务器环境中运行,并可由平台内发生的事件(也称为消息)触发。插件执行时,可以利用 Dynamics 365 平台的服务(例如组织服务)执行各种操作,包括但不限于基本的 CRUD 操作:检索、创建、更新和删除记录。
要为 Microsoft Dynamics 365 开发插件,您可以按照以下步骤操作:
1. 设置您的开发环境:
安装用于 Dynamics 365 开发的 Visual Studio 社区版。
在“工作负载”下选择“.NET 桌面开发”:
转到“单个组件”选项卡,在开发活动下,选择:Window Workflow Foundation
然后,单击安装并选择 C# 环境。
2.创建一个新的插件项目:
下一步是创建一个新项目并选择类库(.NET Framework),然后单击下一步:
配置项目和解决方案名称,然后单击“创建”。该解决方案包含以下项目集合:
使用任何有意义的名称来重命名class1.cs
:
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
:
4.定义插件类:
创建一个新类,实现IPlugin
Dynamics 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;
}
}
执行方法接受一个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);
}
下一步是使用加密算法对程序集进行签名,因为云平台只允许签名的程序集:
右键单击项目->属性->签名->勾选“对程序集进行签名”->选择“新建”->添加密钥文件名->选择是否添加密码->保留默认或更改算法->确定->保存->构建解决方案。
完成此步骤后,代码将被编译,并以文件形式创建一个程序集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