文章目录
- 1. Plugin 简介
- 2. Plugin 配置
- 2.1 步骤Step核心分析
- 3. Plugin 代码
1. Plugin 简介
Plugin基础教程 : Plugin基础教程
插件Plugin:
1. 插件Plugin通常用于默认数据处理操作区间,增加数据默认行为的方法。(无重用性)
2. Plugin 配置
.NET环境:.NET环境
##安装配置
1. 安装.NET 环境
2. 安装 PowerPlatform CLI (使用.NET命令行安装)
dotnet tool install --global Microsoft.PowerApps.CLI.Tool
3. 安装 Plugin Registration Tool
pac tool prt
##使用Plugin
1. 创建 Class Library(.NET FrameWork)
2. Manuget包:Microsoft.CrmSdk.CoreAssemblies
3. 代码编写
4. 进入属性当中进行密钥签名、检查属性为Debug
5. 解决方案生成 --> 生成文件资源管理器 \bin\Debug\BasicPlugin.dll
6. 登录进入Plugin Registration Tool (注意选择对应环境)
7. 注册程序集 Assembly(注意这里必须全选所有插件,否则会导致其他已有插件被撤掉)
8. 注册步骤Step(核心:定义插件的触发条件、)
9. 运行
10. 调试(install profiler - start profiling - 执行操作 - 附加进程 - startExecution)
2.1 步骤Step核心分析
事件执行管道模型(Plugin插件遵循其规律)
PreCalidation: 数据库事务管理前,可加入用户过滤等相关取消逻辑的操作。可用于用户安全验证、权限检查等.
PreOperation: 核心操作前,可调整传入核心操作消息实体的值。可用于核心操作实体值修改等
MainEvent: 该阶段是执行关键操作(增删改等)的阶段,不允许注册插件.
PostOperation: 核心操作后,可以获取消息最初传入、操作结束后消息返回的值。尽可能不要修改实体值,避免触发其他事件。
可执行事务管理外的异步操作。可用于创建、修改、更新实体等操作。
Step注册参数含义
3. Plugin 代码
IPluginExecutionContext接口:IPluginExecutionContext接口
IPulginExecutionConext: 提供了有关 plugin 执行上下文的信息,包括当前操作的实体记录、操作的类型、执行 plugin 的用户等,
可以使用相关属性和方法进行访问.
using System;
using System.ServiceModel;
using Microsoft.Xrm.Sdk;
namespace BasciPlugin {
public class FollowupPlugin : IPlugin {
public void Execute(IServiceProvider serviceProvider) {
// 跟踪日志
ITracingService tracingService =(ITracingService)serviceProvider.GetService(typeof(ITracingService));
// Plugin上下文信息
IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
// InputParameters包含请求的实体集(可以是EntityCollection)
if(context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity) {
// 组织服务工厂及相关
IOrganizationServiceFactory serviceFactory =(IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);
try {
// context.OutputParameters 核心操作后的响应消息参数
// 具体的Plugin相关操作
tracingService.Trace("FollowupPlugin: Creating the task activity.");
}
catch(FaultException<OrganizationServiceFault> ex) {
throw new InvalidPluginExecutionException("An error occurred in FollowUpPlugin.", ex);
}
catch(Exception ex) {
tracingService.Trace("FollowUpPlugin: {0}", ex.ToString());
throw;
}
}
}
}
}