注册和部署插件

 

发布日期: 2017年1月

适用于: Dynamics 365 (online),Dynamics 365 (on-premises),Dynamics CRM 2016,Dynamics CRM Online

插件和自定义工作流活动是在开发扩展 Microsoft Dynamics 365 现有功能的自定义代码。 在插件或自定义工作流活动可以使用它之前,必须注册到服务器。 通过使用 SDK 类编写注册代码,您能够以编程方式向 Microsoft Dynamics 365(在线或本地) 注册插件或自定义工作流活动。 但是,为了简化学习过程,加快开发和部署自定义代码,SDK 下载中提供了包含完整源代码的插件和自定义工作流活动的注册工具。下载 Microsoft Dynamics CRM SDK 包。

虽然本主题主要介绍插件,但其中大部分信息同样适用于自定义工作流活动。 两者之间的一个区别就是对于自定义工作流活动程序集,您只需注册程序集。 对于插件,您需要注册插件程序集,每个插件还需要执行一个或多个步骤。 有关注册自定义工作流活动的详细信息,请参阅 自定义工作流活动(工作流程序集)

System_CAPS_security 安全性 说明

除非插件或自定义工作流活动来源安全可靠,否则请不要注册任何插件或自定义工作流活动。

如何将插件打包为解决方案组件的详细信息,请参阅 使用解决方案打包和分发扩展

本主题内容

插件注册工具

插件存储

部署

程序集版本控制和解决方案

安全限制

以编程方式注册插件

启用或禁用自定义代码执行

插件注册工具

The Plug-in Registration 该工具提供图形用户界面并且支持向 Microsoft Dynamics 365 注册插件和自定义工作流活动。 但是,只能在 Microsoft Dynamics 365 (online) 的沙盒(隔离模式)中注册插件和自定义工作流活动。

有关如何使用工具注册和部署插件程序集的详细信息,请参阅 演练:使用插件注册工具注册插件。 可以将该工具作为外部工具添加到 Visual Studio 的“工具”菜单中,以加快开发过程。

插件存储

对于内部部署,可以将未在沙盒中注册的插件存储到 Microsoft Dynamics 365 服务器的数据库中或磁盘 文件系统中。 强烈建议您将准备用于生产的插件存储到 Microsoft Dynamics 365 数据库中,而不是磁盘上。 存储在数据库中的插件会在数据中心群集内的多个 Microsoft Dynamics 365 服务器之间自动分发。 将插件存储在磁盘中对使用 Microsoft Visual Studio 调试插件很有用。 但是,您可以调试存储在数据库中的插件。 有关详细信息,请参阅调试插件

在沙盒中注册的插件必须存储在数据库中,无论 Microsoft Dynamics 365 部署类型如何(内部部署、IFD 或联机)。

部署

对于内部部署或面向 Internet (IFD) 的 Microsoft Dynamics 365 安装,当您将插件从另一台电脑部署到 Microsoft Dynamics 365 服务器磁盘(磁盘部署)时,在注册之前必须手动将插件程序集复制到该服务器。 必须将程序集部署到要执行插件的每台服务器上的 <installdir>\Program Files\Microsoft CRM\server\bin\assembly 文件夹中。

应在将程序集复制到服务器上的 …\bin\assembly 文件夹之后再注册插件,这样可以防止出现以下情况:系统用户在 Microsoft Dynamics 365 中引发了事件,但注册的插件程序集在该服务器上尚不存在。 对于服务器数据库部署,在注册插件期间会自动复制插件程序集,这样就不会发生上述情况。

根据插件设计的不同,要运行插件,可能还需要其他引用的程序集。 不论您将插件部署在数据库中还是磁盘上,如果插件需要其他程序集才能运行,则必须将这些程序集复制到要执行插件的每台服务器上的全局程序集缓存中。 这种情况不适用于 Microsoft Dynamics 365 (online) 服务器,因为您无权访问该服务器上的全局程序集缓存。

将插件从开发环境移动到暂存或生产服务器

  1. 在开发计算机上,生成插件代码。 不要包含任何调试信息。 优化插件的性能。

  2. 在 Microsoft Dynamics 365 服务器数据库中注册插件。

  3. 使用 Microsoft Dynamics 365 Web 应用程序创建解决方案或使用现有解决方案,然后将插件添加到该解决方案中。

  4. 向解决方案中添加任何其他所需组件后,导出解决方案。

  5. 将解决方案导入暂存或生产服务器。

程序集版本控制和解决方案

使用在 Microsoft Visual Studio 项目的 Assembly.info 文件中定义的 major.minor.build.revision 数字格式可以对插件程序集进行版本控制。 根据新解决方案中程序集版本号更改部分的不同,当通过导入来更新现有解决方案时,会发生以下行为。

  • 程序集内部版本号或修订号发生更改。

    可将其视为就地升级。 当导入包含更新程序集的解决方案时,会移除较早版本程序集。 旧解决方案中先前存在的所有步骤都会自动更改为引用新版本的程序集。

  • 除内部版本号或修订号之外,程序集主或次版本号均发生更改。

    当导入的更新解决方案包含修订后的程序集时,该程序集会被视为与现有解决方案中该程序集的以前版本完全不同的程序集。 现有解决方案中的插件注册步骤会继续引用该程序集的以前版本。 如果您希望先前程序集的现有插件注册步骤指向修订后的程序集,则需要使用插件注册工具手动更改步骤配置以引用修订后的程序集类型。 必须在将更新的程序集导出到解决方案之前完成此操作,以便随后进行导入。

有关解决方案的详细信息,请参阅解决方案简介

安全限制

存在一个安全性限制,即,只有有特权的用户才能注册插件。 对于非隔离注册的插件,要注册插件的系统用户帐户必须位于部署管理器的“部署管理员”组中。 只有“系统管理员”用户帐户或“部署管理员”组中的用户帐户才能运行部署管理器。

重要

对于非隔离插件,没有将注册用户帐户包括在“部署管理员”组中可能会导致在注册插件时引发异常。 异常说明指示“没有足够的特权完成 SDK 实体的创建操作”。

要注册插件的系统用户帐户必须具有以下组织范围内的安全特权:

  • prvCreatePluginAssembly

  • prvCreatePluginType

  • prvCreateSdkMessageProcessingStep

  • prvCreateSdkMessageProcessingStepImage

  • prvCreateSdkMessageProcessingStepSecureConfig

有关详细信息,请参阅 Security role and privilege referenceMicrosoft Dynamics 365 的安全模型

对于注册到沙盒中的插件(隔离模式),注册插件的系统用户帐户必须具有系统管理员角色。 不需要具有“部署管理员”组的成员身份。

以编程方式注册插件

用于注册插件和图像的关键实体类型是:PluginAssemblyPluginTypeSdkMessageProcessingStepSdkMessageProcessingStepImage。 用于注册自定义工作流活动的关键实体类型是 PluginAssemblyPluginType。 使用这些实体可执行创建、更新、检索和删除操作。

有关这些图像的详细信息,请参阅了解传递给插件的数据上下文

启用或禁用自定义代码执行

可以使用 Windows PowerShell 按如下所示在服务器上启用或禁用自定义代码,包括插件和自定义工作流活动。 或者,您可以使用部署 Web 服务。 有关详细信息,请参阅部署实体和部署配置设置。以设置 CustomCodeSettings.AllowExternalCode 属性。

启用自定义代码执行

  1. 打开 Windows PowerShell 命令窗口。

  2. 添加 Microsoft Dynamics 365 PowerShell 管理单元:

    Add-PSSnapin Microsoft.Crm.PowerShell
    
  3. 检索当前设置:

    $setting = get-crmsetting customcodesettings
    
  4. 修改当前设置:

    $setting.AllowExternalCode="True"
    
    set-crmsetting $setting
    
  5. 验证该设置:

    get-crmsetting customcodesettings
    

禁用自定义代码执行

  1. 打开 Windows PowerShell 命令窗口。

  2. 添加 Microsoft Dynamics 365 PowerShell 管理单元:

    Add-PSSnapin Microsoft.Crm.PowerShell
    
  3. 检索当前设置:

        $setting = get-crmsetting customcodesettings
    
  4. 修改当前设置:

    $setting.AllowExternalCode=0
    
    set-crmsetting $setting
    
  5. 验证该设置:

    get-crmsetting customcodesettings
    

另请参阅

插件开发
调试插件
插件隔离、信任和统计信息
使用解决方案打包和分发扩展
实体特权

Microsoft Dynamics 365

© 2017 Microsoft。 保留所有权利。 版权