Dynamics CRM - 如何通过 Action 和 Plugin 自定义 API

      在 Dynamics CRM 中,有时我们需要自定义一些 API,可以通过 Plugin + Action 的方式来实现,具体示例如下:

一、新建一个 Action

       新建一个 Solution >> 选择 Process >> New Process >> 为 Process 命名并选择分类为 Action,Entity 选择 None(global),Type 为 New blank process >> Click OK

 

二、定义输入输出参数

      根据自己功能所需,定义对应类型的参数,确认无误后 Click Save >> 然后 Click Active 启用这个 Action

      Note:留意此处的 Unique Name 就是你的 Api Action Name。

 

 三、测试 API

      通过开发工具来查看,CRM Site 已经存在这个 Api 请求的接口了,由于我们还没有对 Action 绑定任何 logic,因此输出为 null。

 

 

 四、新建一个 Plugin

      接下来我们通过 plugin 来给这个 Action 绑定一些功能逻辑。

      通过Visual Studio 创建一个 Plugin Project,并添加一个 Plugin Class。

      Note:找不到相关新建项时,请在管理拓展窗口检查是否已安装 D365 Developer Extensions。

 

 

五、编写 Plugin Logic

      在 Plugin Class 中编写需要执行的功能逻辑。

 1 using Microsoft.Xrm.Sdk;
 2 using Microsoft.Xrm.Sdk.Query;
 3 using System;
 4 
 5 namespace DemoApiPlugin
 6 {
 7     public class MyApi : IPlugin
 8     {
 9         #region Secure/Unsecure Configuration Setup
10         private string _secureConfig = null;
11         private string _unsecureConfig = null;
12 
13         public MyApi(string unsecureConfig, string secureConfig)
14         {
15             _secureConfig = secureConfig;
16             _unsecureConfig = unsecureConfig;
17         }
18         #endregion
19         public void Execute(IServiceProvider serviceProvider)
20         {
21             ITracingService tracer = (ITracingService)serviceProvider.GetService(typeof(ITracingService));
22             IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
23             IOrganizationServiceFactory factory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
24             IOrganizationService service = factory.CreateOrganizationService(context.UserId);
25 
26             try
27             {
28                 //TODO: Do stuff
29                 //获取输入参数的值
30                 var input = context.InputParameters["input"];
31 
32                 //返回一个结果给输出参数
33                 context.OutputParameters["output"] = $"你输入的内容是:{input}";
34             }
35             catch (Exception e)
36             {
37                 throw new InvalidPluginExecutionException(e.Message);
38             }
39         }
40     }
41 }

 

六、使用 Plugin Registration Tool 部署 Plugin

 

 

 

七、将 plugin 绑定到 Action Api 上

      为 MyApi Plugin 添加一个 Step > 选择的 message 为 Action Name >> 选择 Stage 为 Post-operation >> Click Register New Step

      Note:

      a. 由于我们建立的是 Global Action 所以无需选择 Primary Entity。

      b. 如果注册 Step 时没有显示 Action Name,需要重启 Plugin Registration Tool,refresh 是没用的。

 

 

  

八、再次测试 API

      如下,可以见到我们的 Action API 已经成功绑定上 Plugin Class 里的 Logic。

 

九、总结

      通过以上步骤我们可以了解到,在 CRM 中我们可以通过 Action Process 来搭建一个自定义的 API,更重要的是,在绑定的 Plugin Class 中也可以调用其它 / 非 CRM 的 API,这样可以帮助我们实现更多的功能。

posted @ 2023-01-12 15:20  三月七真可爱  阅读(414)  评论(0编辑  收藏  举报