多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

Dynamics 365/Power Platform插件开发:Plugin Registration Tool核心功能与实战指南

Dynamics 365/Power Platform插件开发:Plugin Registration Tool核心功能与实战指南 1. 为什么你需要Plugin Registration Tool如果你正在和微软的Dynamics 365或Power Platform打交道尤其是涉及到自定义插件、工作流活动或者需要与外部服务深度集成那么你迟早会听到“Plugin Registration Tool”这个名字。这可不是一个普通的工具它是你进入Dynamics 365/Power Platform后端开发世界的“钥匙”。简单来说Plugin Registration Tool我们常简称为PRT是一个图形化客户端工具它的核心任务就是帮你管理那些运行在Dynamics 365/Power Platform服务器上的自定义业务逻辑。这些逻辑我们称之为“插件”或“自定义工作流活动”。想象一下Dynamics 365的标准功能就像一个功能齐全的毛坯房能满足基本居住需求。但当你需要安装一个智能门锁比如在创建客户记录时自动调用外部API验证信息或者加装一套全屋净水系统比如在订单审批通过后自动触发复杂的财务流程这些“非标”的、定制化的功能就需要你自己来编写代码实现也就是开发插件。那么插件写好了怎么“安装”到Dynamics 365这个“房子”里呢这就是PRT的用武之地了。它负责将你编译好的插件程序集.dll文件“注册”到指定的Dynamics 365环境中并告诉系统“嘿当某某事件发生时比如创建记录、更新字段、删除记录去执行我这段代码。” 没有PRT你的插件代码就像一盘散沙风一吹就散了根本无法与Dynamics 365的运行环境产生关联。所以无论你是开发者、实施顾问还是系统管理员只要工作内容涉及Dynamics 365/Power Platform的深度定制下载并学会使用PRT就是你的必修课。它直接关系到你的定制化功能能否成功部署和运行。2. 官方与社区获取PRT的几种可靠路径PRT本身是微软官方提供的工具但它的分发方式随着技术演进发生了一些变化。过去它通常作为SDK的一部分提供现在更主流的方式是通过NuGet包或Power Platform CLI。下面我为你梳理几条最可靠、最常用的获取路径。2.1 路径一通过Power Platform CLI (PAC CLI) 获取现代推荐方式这是目前微软最推荐的方式。Power Platform CLI是一个命令行工具它整合了包括插件注册在内的多种开发和管理任务。通过它安装PRT能确保你获得与当前Power Platform平台兼容的最新版本。操作步骤安装 .NET SDKPRT和PAC CLI都基于.NET所以首先需要安装.NET 6.0或更高版本的SDK。你可以去微软官网的“.NET下载”页面选择适合你操作系统Windows/macOS/Linux的版本进行安装。安装后在命令行输入dotnet --version验证是否成功。安装 Power Platform CLI打开命令行终端如Windows的PowerShell或CMD运行以下命令dotnet tool install --global Microsoft.PowerPlatform.CLI这个命令会从NuGet全局安装PAC CLI工具。安装完成后可以通过pac --version来验证。启动 Plugin Registration Tool安装好PAC CLI后PRT其实已经“就位”了。你不需要单独下载一个exe文件而是通过一个特定的命令来启动它pac tool prt首次运行这个命令时CLI会自动下载PRT所需的所有组件这可能需要一点时间。之后PRT的图形化界面就会弹出来。为什么推荐这种方式版本同步通过PAC CLI获取的PRT版本会与Power Platform的服务更新保持同步最大程度避免兼容性问题。一体化体验PAC CLI本身还包含解决方案打包、环境管理、数据迁移等众多功能是开发现代Power Platform应用的瑞士军刀。跨平台由于基于.NET理论上在Windows、macOS、Linux上都能运行尽管PRT的UI是Windows Forms在非Windows系统上可能需要额外的兼容层如Wine体验可能不佳生产环境仍建议Windows。2.2 路径二从旧版SDK中提取传统方式如果你因为某些原因比如维护一个非常古老的项目需要特定旧版本的PRT或者更习惯传统的独立exe文件可以从Dynamics 365 SDK中获取。操作步骤下载SDK访问微软官方的Dynamics 365 Customer Engagement或对应版本如CRM 2016的SDK下载页面。你需要有一个相应的Visual Studio订阅或从官方渠道获取SDK安装包。安装或解压SDK运行下载的SDK安装程序或者如果是一个ZIP包就解压到本地文件夹。定位工具在SDK的安装或解压目录下通常会有一个名为Tools、Bin或PluginRegistration的文件夹。在里面寻找PluginRegistration.exe这个可执行文件。它的图标通常是一个插头或工具箱的样式。直接运行双击这个exe文件即可启动。你甚至可以将它复制到一个方便的位置如桌面创建快捷方式。注意事项版本匹配至关重要务必使用与你的Dynamics 365/Power Platform环境版本匹配的SDK中的PRT。用高版本PRT连接低版本环境或者反过来都可能导致无法连接或注册失败。不再是最佳实践对于新的Power Platform环境微软更倾向于推荐使用PAC CLI方式。SDK方式可能无法完全支持最新环境的所有特性如某些新的认证方式。2.3 路径三利用Visual Studio项目模板开发人员快捷方式如果你是Visual Studio的深度用户并且正在创建一个新的插件类库项目还有一个更集成化的方式。操作步骤安装开发人员工具在Visual Studio Installer中确保安装了“Power Platform 工具”或“Dynamics 365”开发工作负载。创建新项目在Visual Studio中选择创建新项目搜索“Dynamics 365”或“Power Platform”你会找到如“Dynamics 365 插件”之类的项目模板。在项目中访问创建此类项目后通常在解决方案资源管理器中右键点击项目在上下文菜单里可能会找到“注册插件”或类似的选项点击后会直接调用或引导你使用PRT。有些模板甚至会在项目的“工具”文件夹下包含一个PRT的副本。这种方式将PRT的调用深度集成到了开发流程中对于开发者来说非常方便本质上它调用的还是上述两种方式之一的工具。3. 首次连接环境配置与认证详解下载并打开PRT只是第一步接下来你需要让它连接到你的Dynamics 365或Power Platform环境。这个过程的核心是认证。近年来微软全面转向了基于Azure Active Directory (AAD) 的现代认证老旧的用户名/密码如Live ID方式已基本淘汰。3.1 准备连接信息在启动PRT并点击“创建新连接”之前你需要准备好以下几样东西环境URL这是你的Dynamics 365或Power Platform环境的地址。格式通常是https://yourorg.crm.dynamics.com或https://yourorg.crm[x].dynamics.com其中[x]是地域编号。你可以在浏览器的地址栏里直接复制。认证类型选择“OAuth”。这是现代应用的标准认证协议。用户凭据一个对该环境有系统管理员或系统定制员权限的AAD账户通常是你的公司邮箱。Azure 应用注册可选但推荐为了更安全、更可控地访问特别是避免频繁的多因素认证(MFA)提示建议使用“客户端机密”或“证书”方式进行应用级认证。这需要在Azure Portal中注册一个应用并赋予其访问Dynamics 365的API权限例如Dynamics CRM下的user_impersonation。然后你在PRT中就可以选择“使用客户端机密登录”并填入应用ID、目录ID和客户端机密。3.2 逐步连接流程假设我们使用最常见的交互式用户登录弹出浏览器窗口登录在PRT主界面点击 “Create New Connection”。Discovery URL对于大多数在线环境这里可以留空PRT会自动处理。对于本地部署或特殊环境可能需要填写发现服务器地址。选择“Office 365”在部署类型中选择“Office 365”。填写环境URL在“Maintain”下拉框右侧直接粘贴你的环境URL。点击“Login”在弹出的对话框中选择“OAuth”。这时会默认弹出一个内置浏览器窗口或调用系统默认浏览器。完成登录在浏览器中输入你的AAD账户和密码完成任何必要的MFA验证。连接成功验证通过后浏览器窗口会关闭PRT主界面左侧的连接树状图中会出现你的环境名称下面会列出该环境中的所有解决方案。注意如果登录窗口弹出失败或白屏可能是系统默认浏览器设置或网络代理问题。可以尝试将PRT以管理员身份运行或者检查IE/Edge的Internet选项设置。一个备选方案是在登录对话框弹出时勾选“显示高级选项”然后手动复制“登录URL”到你已经登录了公司账户的浏览器中完成认证再将返回的“授权码”粘贴回PRT的对话框中。3.3 连接后的界面概览成功连接后PRT的界面主要分为三个部分左侧连接面板显示已连接的环境。展开环境节点可以看到“解决方案”。再展开某个解决方案通常是你的自定义解决方案会看到“插件程序集”、“插件类型”、“服务端点”等。中间主面板当你选中某个节点如一个插件程序集时这里会显示其详细信息、属性以及相关的步骤Step。右侧操作面板/菜单栏提供“注册”、“更新”、“注销”、“刷新”等针对当前选中节点的操作按钮。4. 核心功能演练从注册到配置的全过程连接上环境后我们就可以开始真正的操作了。下面以一个最常见的场景为例注册一个全新的插件程序集并为其配置一个插件步骤。4.1 注册插件程序集假设你已经用Visual Studio编写并编译好了一个插件类库项目生成了一个MyCompany.MyProject.Plugins.dll文件。在PRT左侧面板导航到你的环境 - 你的自定义解决方案。右键点击“插件程序集”选择“注册新程序集”。在弹出的对话框中查找程序集点击“浏览”找到你的.dll文件。隔离模式这是关键选择。对于云环境99%的情况选择“沙盒”。这意味着你的插件代码将在一个受限制、部分信任的沙盒环境中运行无法直接访问文件系统、注册表等本地资源确保了环境的安全性和稳定性。只有在极少数本地部署且需要完全信任的场景下才选择“无”。数据库存储选择“数据库”。这会将你的程序集内容存储到Dynamics 365的数据库中便于随解决方案一起迁移。点击“注册”PRT会上传你的dll文件并解析其中的所有插件类继承自IPlugin接口的类。4.2 配置插件步骤程序集注册成功后下面会列出其中的“插件类型”。每个插件类型对应你代码中的一个类。展开你刚注册的程序集找到你想要配置的插件类型类右键点击它选择“注册新步骤”。在弹出的“注册新步骤”窗口中需要仔细配置以下参数消息选择这个插件要响应哪个事件。例如当创建一个“客户”记录时对应消息是Create更新某个字段时对应Update删除时对应Delete。主要实体选择这个步骤应用于哪个表实体。例如account客户contact联系人。筛选属性可选如果你只关心特定字段的更新可以在这里输入字段的逻辑名称用英文逗号分隔。留空则表示任何字段更新都会触发。执行阶段这是插件执行时机的核心。Pre-validation在核心系统操作如数据写入数据库的验证之前触发。通常用于执行自己额外的、轻量级的验证逻辑如果失败可以阻止后续所有操作。Pre-operation在验证通过之后核心系统操作执行之前触发。这是最常用的阶段你可以在这里修改传递给核心操作的业务数据。例如在保存客户记录前自动为其生成一个编号。Post-operation在核心系统操作执行之后触发。此时数据已经保存到数据库并且系统已经生成了该记录的唯一IDGUID。你可以在这里执行依赖于该ID的操作或者调用其他需要该记录已存在的操作。执行模式选择“同步”或“异步”。同步步骤会阻塞当前操作流程直到你的插件代码执行完毕用户会等待。异步步骤会被系统放入队列稍后执行用户无需等待。对于耗时较长的操作如调用外部API应使用异步以避免超时。部署选择“服务器”。对于沙盒插件这是唯一选项。排序顺序如果同一个事件、阶段有多个插件步骤这个数字决定了它们的执行顺序数字小的先执行。配置这里可以输入一个JSON格式的字符串用于向你的插件代码传递自定义配置参数。在你的插件类构造函数中可以通过IServiceProvider.GetServiceIPluginExecutionContext()获取到UnsecureConfiguration属性来读取这个字符串。描述写清楚这个步骤是干什么的便于日后维护。点击“注册新步骤”完成。现在当指定的Dynamics 365事件发生时你的插件代码就会被调用了。4.3 调试与问题排查插件注册后不工作PRT也是重要的调试入口。检查程序集依赖如果你的插件dll引用了其他第三方库Newtonsoft.Json等你需要将这些依赖的dll也一并注册到同一个程序集中在注册程序集时可以通过“浏览”添加多个文件。或者更好的做法是使用ILMerge等工具将依赖项合并到主dll中。查看插件跟踪日志在Dynamics 365设置中开启“插件跟踪日志”。当插件执行时详细的日志包括你的代码中用ITracingService输出的信息会被记录下来。你可以在PRT中右键点击插件步骤选择“查看跟踪日志”来排查问题。异常信息如果插件执行出错PRT的连接状态栏或跟踪日志中通常会显示异常类型和堆栈信息这是定位代码Bug的第一手资料。禁用/启用步骤在排查问题时可以临时右键点击某个步骤选择“禁用”以排除其影响。修复后再“启用”。5. 进阶操作与最佳实践掌握了基本注册后一些进阶操作和习惯能让你更高效、更安全。5.1 更新插件程序集当你修复了Bug或增加了功能需要更新插件dll时切忌直接注册一个新程序集。正确做法是在PRT左侧面板找到已注册的旧程序集。右键点击它选择“更新”。在弹出的对话框中浏览到新的dll文件点击“更新”。 这样做的优点是所有与该程序集关联的插件步骤、配置都会得以保留无需重新配置。如果你注册了一个同名但不同内容的新程序集会导致旧步骤全部失效管理起来会是一场噩梦。5.2 使用配置参数强烈建议将插件中可能变化的配置如外部API的端点URL、开关标志等通过步骤的“配置”字段UnsecureConfiguration传入而不是硬编码在代码里。这样当配置需要改变时你只需要在PRT中更新这个JSON字符串而无需重新编译和部署整个dll。5.3 程序集强命名与版本管理为你的插件程序集进行强命名在Visual Studio项目属性中设置并制定清晰的版本号策略如 1.0.0.0。当PRT中注册了多个版本的程序集时你可以通过版本号来清晰区分。在更新时PRT会识别程序集版本是否变化。5.4 解决方案感知始终在自定义解决方案的上下文中操作PRT。这意味着在连接时你应该展开你的解决方案节点在里面进行程序集注册和步骤配置。这样做的好处是所有这些自定义组件程序集、步骤都会作为解决方案的一部分可以方便地打包、备份、迁移到其他环境如从开发环境迁移到测试、生产环境。5.5 清理与注销对于不再使用的插件步骤和程序集应及时清理。右键点击选择“注销”。长期堆积无效的注册项虽然不一定直接影响性能但会使管理界面混乱增加维护复杂度。在注销程序集前请确保其下的所有步骤都已注销。6. 常见陷阱与避坑指南在我多年的使用中踩过不少坑这里总结几个最常见的坑1沙盒隔离限制这是新手最容易栽跟头的地方。在沙盒模式云环境强制下你的插件代码无法进行以下操作直接访问文件系统System.IO下的许多类。访问注册表。发起非HTTP/HTTPS的网络调用。创建新线程Thread.Start或直接使用Task.Run而不经过异步服务。调用某些被禁用的.NET类型。避坑如果需要文件操作考虑使用Azure Blob Storage如果需要复杂后台处理使用Azure Functions或Dynamics 365的异步服务配合工作流。坑2递归触发与无限循环如果你的插件在Update消息的Pre-operation阶段又去更新了同一个实体的字段这会导致插件被再次触发形成无限循环最终导致服务器错误。避坑在插件代码开头使用IPluginExecutionContext.Depth属性检查调用深度。通常当Depth 1时就应该直接返回避免递归。if (serviceProvider.GetServiceIPluginExecutionContext().Depth 1) { return; }坑3忽略异步步骤的异常处理异步步骤中的异常不会直接导致同步操作失败用户可能感知不到。但如果异常未被正确处理会导致异步操作失败重试最终挂起在系统作业中留下一堆失败记录。避坑异步插件的异常处理必须更加健壮。确保使用try-catch包裹核心逻辑并在catch块中记录详细的错误日志到跟踪日志或外部监控系统。坑4使用错误的SDK版本你的插件项目引用的Microsoft.Xrm.Sdk.dll等核心程序集的版本必须与目标Dynamics 365/Power Platform环境的版本兼容。使用过高或过低的版本可能在注册时没问题但运行时会出现诡异的MethodNotFound或序列化错误。避坑通过NuGet管理SDK引用并选择与你的环境版本匹配的包。对于Power Platform通常使用Microsoft.PowerPlatform.Dataverse.Client等标记为“当前”的包是最安全的选择。坑5PRT连接认证失败除了前面提到的浏览器弹窗问题常见的还有证书错误如果环境使用自签名证书或内部CA可能需要将证书安装到本地计算机的“受信任的根证书颁发机构”。IP地址限制某些环境可能配置了IP白名单确保你当前网络的出口IP在允许范围内。用户权限不足连接用户必须拥有“系统定制员”或“系统管理员”安全角色。最后记住PRT是一个强大的工具但也是一个需要谨慎使用的工具。在生产环境进行操作前务必在开发或测试环境中充分验证。每一次注册、更新或注销都意味着对你业务系统底层逻辑的一次修改。养成好的操作习惯先连测试环境改完测好再连生产环境对任何不确定的操作先查文档或在小环境中试验。磨刀不误砍柴工花点时间彻底搞懂PRT你在Dynamics 365/Power Platform上的定制化开发之路会顺畅得多。
返回列表