本教程介绍如何扩展工作流设计器,以使用工作流程序集(有时称为工作流活动)添加自定义活动和逻辑。 通过此方式创建的扩展可以在工作流、自定义操作或对话中使用。
本教程使用一个非常简单的示例来重点介绍以下要求和流程:
- 创建Visual Studio类库项目
- 添加 CodeActivity 类
- 定义输入和输出参数
- 添加业务逻辑
- 对程序集进行签名和生成
- 注册程序集
- 测试您的程序集
- 将程序集添加到解决方案
Prerequisites
- Microsoft Dataverse实例和管理员权限
- 了解如何配置工作流。 详细信息: 经典 Dataverse 工作流
- 一个模型驱动应用,可用于编辑帐户。
目标
以下示例将创建一个简单的自定义工作流活动,该活动可用于工作流、对话框或操作过程。 详细信息: 配置工作流阶段和步骤
此自定义工作流活动将符合以下要求:
- 接受十进制输入参数
- 输出等于输入参数加上 10 的值。
在 帐户 实体的工作流中,可以使用以下两个步骤递增 信用额度 值:
步骤 1 使用 示例:增加 10 自定义工作流活动来接收 账户信用额度 的值,并将其增加 10。 步骤 2 使用 “更新记录” 操作将 帐户信用额度限制 值更新为递增值。
步骤 1:获取递增的帐户信用额度
添加第一步后,自定义工作流活动将在 示例 组中可用,并且名称 增量为 10。
单击“设置属性”按钮配置第一步时,需要 Decimal 输入属性,并且仅接受十进制值,例如帐户实体的信用限制属性。
步骤 2:设置新的帐户信用额度
在第二步中,更新记录操作会将获取递增后的帐户信用额度步骤的输出分配给帐户信用额度值,并用递增后的值对其进行更新。
创建Visual Studio类库项目
此项目将创建一个简单的工作流程序集,该程序集将十进制值递增 10。
启动 Visual Studio。
在“文件”菜单上,单击“新建”,然后单击Project。
搜索类库并选择“类库”(.NET框架)。
单击 “下一步” 。
指定解决方案的名称和位置。
Note
为您的项目选择一个有意义的项目名称。 在此示例中,我们将使用
SampleWorkflowActivity。单击 “创建” 。
在解决方案资源管理器中,右键单击项目并选择“属性”。 在 “应用程序 ”选项卡上,验证 受支持的框架版本 是否已设置为目标框架。
在解决方案资源管理器中,右键单击项目并选择“管理 NuGet 包...”。
浏览Microsoft。CrmSdk.Workflow NuGet 包并安装它。
Note
请确保所安装的包归 crmsdk 所有。 此包将包括
Microsoft.Xrm.Workflow.dll,并包含对 Microsoft.CrmSdk.CoreAssemblies 包的依赖项,以便同时包含所需的Microsoft.Xrm.Sdk.dll程序集。必须在“许可证接受”对话框中单击“我接受”。
重命名类文件
在解决方案资源管理器中,右键单击默认Class1.cs文件,然后选择“重命名”。
Note
选择对活动有意义的类名。 在此示例中,我们将命名类
IncrementByTen。在对话框中选择 “是 ”,询问是否要重命名该类。
打开 IncrementByTen.cs 文件,并添加以下 using 指令:
using System.Activities; using Microsoft.Xrm.Sdk; using Microsoft.Xrm.Sdk.Workflow;使类继承自 CodeActivity 类,并为其提供公共访问修饰符,如下所示:
public class IncrementByTen: CodeActivity { }使用Visual Studio快速操作或手动从类中添加
CodeActivity方法:
这个类现在如下所示:
public class IncrementByTen : CodeActivity { protected override void Execute(CodeActivityContext context) { throw new NotImplementedException(); } }
定义输入和输出参数
添加一组输入和输出参数,其中输出参数的值将是输入参数的值递增 10。
public class IncrementByTen : CodeActivity { [RequiredArgument] [Input("Decimal input")] public InArgument<decimal> DecInput { get; set; } [Output("Decimal output")] public OutArgument<decimal> DecOutput { get; set; } protected override void Execute(CodeActivityContext context) { } }Note
请注意如何使用.NET属性提供有关程序集中的参数的元数据。 详细信息: 添加参数
添加业务逻辑
在 Execute 方法中添加逻辑,使输入值递增 10。
protected override void Execute(CodeActivityContext context)
{
decimal input = DecInput.Get(context);
DecOutput.Set(context, input + 10);
}
对程序集进行签名和生成
必须对自定义工作流活动(和插件)程序集进行签名。 在项目属性的 “签名 ”选项卡下,选择“ 对程序集进行签名”。 在“ 选择强名称密钥文件”下,选择“ <新建...”> 选项。 无需为本教程设置密码。 在本示例中,我们创建了名为 的新强名称密钥文件
SampleWorkflowActivity.snk
在调试模式下生成解决方案,并验证
SampleWorkflowActivity.dll程序集是否位于/bin/Debug文件夹中。
Note
在开发程序集时,使用 Debug 构建配置是可以的。 将程序集部署到生产服务器或在解决方案中时,应使用 发布 生成配置。
注册程序集
使用插件注册工具注册自定义工作流活动程序集。 该工具提供图形用户界面,并支持注册包含插件或自定义工作流活动的程序集。 若要获取插件注册工具,请参阅: Dataverse 开发工具
使用插件注册工具进行连接
通过执行 PAC CLI
pac tool prt命令打开插件注册工具。选择“ +创建新连接 ”以连接到 Dataverse 环境。
确保选中 Office 365 。
如果要使用当前使用的帐户以外的Microsoft帐户进行连接,请选择“ 显示高级 ”并输入凭据。 否则,请保持 登录为当前用户 处于选中状态。
Note
如果用户帐户采用多重身份验证(MFA),请确保未选中 “显示高级 ”复选框。
如果Microsoft帐户提供对多个环境的访问权限,请选择 “显示可用组织”列表。
选择登录。
如果选择 了可用组织的显示列表,请选择要连接到的组织,然后选择 “登录”。
连接后,你将看到任何现有的已注册插件、自定义工作流活动和数据提供程序。
注册程序集
选择“注册”>注册新程序集
在“注册新建程序集”对话框中,单击省略号按钮(...)并导航到
SampleWorkflowActivity.dll/bin/Debug文件夹中。
Note
注意:对于 Dataverse,选择了步骤 3 和 4 的唯一有效选项,并且禁用了无效选项。
单击注册所选插件。 应会看到确认对话框。
单击“ 确定 ”关闭 “注册新程序集 ”对话框。
配置活动名称
在 已注册插件和自定义工作流活动 列表中,找到 (程序集)SampleWorkflowActivity 并将其展开,以显示 (工作流活动)SampleWorkflow.Activity.IncrementByTen - 可隔离。
选择(工作流活动)SampleWorkflow.Activity.IncrementByTen - 可隔离,然后在属性区域中,使用下表中的值编辑可编辑属性:
可编辑字段 原始值 “新值” Description Description 返回输入参数的值加上 10。 在流程设计器的 UI 中不可见,但在从存储此信息的 PluginType 实体提取的数据生成文档时可能很有用。 友好名称 GUID 值 IncrementByTen 插件的用户友好名称。 Name SampleWorkflowActivity.IncrementByTen 增加 10 所表示菜单的名称 工作流活动组名称 SampleWorkflowActivity (1.0.0.0) Sample 添加到 Dataverse 进程设计器中主菜单的子菜单的名称。 Note
如果 Name 和 WorkflowActivityGroupName 设置为 null,则自定义活动在进程设计器中不可见。
单击“ 保存 ”(图标)保存更改。
测试您的程序集
可以通过创建将使用它的进程来测试新的工作流活动。 使用以下步骤创建上述 “目标 ”部分所述的工作流过程:
打开 Power Apps
选择“ 解决方案”。
打开 CDS Default Publisher 解决方案。
在菜单中,展开...,然后选择“切换到经典”。
在“组件”列表中选择“进程”
选择“ 新建 ”,然后在“ 创建进程 ”对话框中输入以下内容:
领域 Value 进程名称 SampleWorkflowActivity.IncrementByTen 的测试 Category Workflow Entity 帐户 在后台运行此工作流(建议) 已取消选择 Note
已取消选择 在后台运行此工作流 的选项,使此工作流成为实时(同步)工作流。 这将简化测试。
单击 “确定”
应用以下更改:
领域 Value Scope Organization 开始时间:记录字段更改 已选中,并在对话框中指定了 name字段。
Note
将 范围 设置为 组织 可创建可由组织中的任何人应用的工作流。
添加以下步骤:
将步骤 说明 设置为 获取递增的帐户信用额度限制 ,然后单击“ 设置属性”。
将 十进制输入 属性的值设置为默认值为 0 的帐户的信用额度限制。
单击“保存并关闭”。
添加 更新记录 步骤:
单击 “设置属性 ”并将 “信用额度限制 ”的值设置为 “获取递增的帐户信用额度” 步骤的值。
工作流步骤应如下所示:
单击“保存并关闭”。
通过单击菜单中的 “激活 ”来激活工作流...
然后在“进程激活确认”对话框中单击“激活”。
导航到模型驱动应用并查看帐户列表。
选择一个帐户。
编辑 “帐户名称 ”字段值。
保存帐户记录。
验证您编辑的帐户是否具有 信用额度限制 值已增加 10。
将程序集添加到解决方案
若要在解决方案中分发自定义工作流活动,您必须将包含它的已注册程序集添加到非托管解决方案中。
使用Power Apps打开要向其中添加程序集的非托管解决方案
选择“添加现有>其他>插件程序集”
按名称搜索插件程序集,在本例中为“SampleWorkflowActivity”。
选择插件程序集,然后选择 “添加”。
另见
工作流扩展
示例:创建自定义工作流活动
示例:使用自定义工作流活动更新下一个生日
示例:使用自定义工作流活动计算信用评分