练习 - 编写自定义工作流扩展

已完成

通常,需要对 Microsoft Dataverse 数据执行日期格式设置。 虽然 Power Automate 公开了本流程的一些功能,但是偶尔也可以生成自定义的工作流扩展来实现这个目标(例如,如果逻辑需要在您的环境中同步运行)。

练习 1:创建自定义活动

在本练习中,您将创建自定义活动,该活动会将日期时间转换为用户本地时间,将其格式化为“2019 年 12 月 25 日,星期一”,并将格式化后的值作为字符串发布给自定义活动的使用者。

每个练习都包括应用场景和学习目标。 应用场景描述了练习的目的,同时列出了目标并具有要点。

任务 1:创建自定义活动

  1. 启动 Visual Studio 2019。

  2. 选择文件 > 新建 > 项目

  3. 选择类库 (.NET Framework),然后选择下一步

    使用选择的类库 (.Net Framework) 项目模板创建新的项目对话框。

  4. 项目名称字段中输入 WorkflowActivities,在框架下拉菜单中选择 .NET Framework 4.6.2,然后选择创建

    使用项目名称 WorkflowActivities 配置新项目对话框。

  5. 右键单击 Class1.cs,然后选择删除

    解决方案资源管理器,显示右击 Class1.cs 并突出显示“删除”选项。

  6. 右键单击项目,然后选择管理 NuGet 软件包

    解决方案资源管理器,显示右击 WorkflowActivities 项目和突出显示“管理 NuGet 软件包”选项。

  7. 选择浏览选项卡,搜索并选择 Microsoft.CRMSDK.CoreAssemblies,然后选择安装

    NuGet 软件包管理器,显示 Microsoft.CRMSDK.CoreAssemblies 程序集,突出显示 Microsoft 的复选标记(与其他作者的同一文件相对)和突出显示的安装按钮。

  8. 如果您同意条款,请选择我接受

  9. 搜索并选择 Microsoft.CRMSDK.Workflow,然后选择安装

    NuGet 软件包管理器,显示 Microsoft.CRMSDK.Workflow assembly 程序集。

  10. 如果您同意条款,请选择我接受

  11. 右键单击项目,选择添加,然后选择

    解决方案资源管理器,显示右击 WorkflowActivities 项目,悬停后出现的“添加”选项并突出显示类选项。

  12. 名称字段中输入 ConvertFormatDatetime,然后选择添加

    “添加新项”对话框,选择了 Visual C# 类,并将名称设置为 ConvertFormatDatetime。

  13. 如下所示将 using 语句添加到该类中,然后将其公开。

    using Microsoft.Crm.Sdk.Messages;
    
    using Microsoft.Xrm.Sdk;
    
    using Microsoft.Xrm.Sdk.Query;
    
    using Microsoft.Xrm.Sdk.Workflow;
    
    using System.Activities;
    

    显示 using 语句和 WorkflowActivities 命名空间的代码段,在公共类 ConvertFormatDatetime 中突出显示“公开”。

  14. CodeActivity 继承并实施抽象成员。 本操作将覆盖继承类的 Execute 方法。

    ConvertFormatDatetime 上的 Intellisense,突出显示了实施抽象类选项。

  15. 将以下代码片段添加到该类中。 这将添加日期时间类型的必需输入参数和字符串类型的输出参数。

    [RequiredArgument]
    
    [Input("DateTime input")]
    
    public InArgument<DateTime> DateToEvaluate { get; set; }
    
    [Output("Formatted DateTime output as string")]
    
    public OutArgument<String> FormattedDateTimeOutput { get; set; }
    

    代码片段,将输入参数插入到类中。

  16. 用以下代码片段替换 NotImplementedException。

    IWorkflowContext workflowContext =
    context.GetExtension<IWorkflowContext>();
    
    IOrganizationServiceFactory serviceFactory =
    context.GetExtension<IOrganizationServiceFactory>();
    
    IOrganizationService service =
    serviceFactory.CreateOrganizationService(workflowContext.UserId);
    

    代码片段,显示插入了上下文代码的 Execute 方法。

  17. 获取输入日期时间。 将以下代码片段添加到 Execute 方法中。

    DateTime utcDateTime = this.DateToEvaluate.Get(context);
    
  18. 检查输入日期时间是否为 UTC,如果不是,将其转换为 UTC。 将以下代码片段添加到 Execute 方法中。

    if (utcDateTime.Kind != DateTimeKind.Utc)
    
    {
    
        utcDateTime = utcDateTime.ToUniversalTime();
    
    }
    

    Execute 方法现在应该类似于下图。

    代码片段,显示已完成的 Execute 方法。

任务 2:获取用户设置并将日期时间转换为用户本地日期时间

  1. 获取用户设置实体的用户 TimeZoneCode。 将以下代码片段添加到 Execute 方法中。

    var settings = service.Retrieve("usersettings",
    workflowContext.UserId, new ColumnSet("timezonecode") );
    

    代码片段,显示 Execute 方法的内容,其中突出显示了新添加的代码行。

  2. 通过提供从输入中获得的 Utc 时间和从用户设置中获得的 TimeZoneCode 来构建时区更改请求。

    LocalTimeFromUtcTimeRequest timeZoneChangeRequest = new
    LocalTimeFromUtcTimeRequest()
    
    {
    
    UtcTime = utcDateTime,
    
    TimeZoneCode = int.Parse(settings["timezonecode"].ToString())
    
    };
    

    代码片段,显示设置变量声明下的新添加代码。

  3. 运行时区更改请求。

    LocalTimeFromUtcTimeResponse timeZoneResponse =
    service.Execute(timeZoneChangeRequest) as LocalTimeFromUtcTimeResponse;
    
  4. 格式化时区响应中的 LocalTime,并将其设置为活动的输出。

    this.FormattedDateTimeOutput.Set(context, String.Format("{0:f}",
    timeZoneResponse.LocalTime));
    

    您的类现在应如下图所示。

    代码片段,显示已完成的类。

  5. 右键单击该项目并选择属性

    右键单击的 WorkflowActivities 项目,突出显示属性选项。

  6. 选择签名选项卡,选择签名程序集复选框,并在选择强名称密钥文件下拉菜单中选择新建

    “属性”对话框的“签名”选项卡,选中“签名程序集”并在“选择强名称密钥文件”下突出显示“新建”选项。

  7. 密钥文件名字段中输入 contoso.snk,清除使用密码保护我的密钥文件复选框,然后选择确定

    “新建密钥文件”对话框,输入 contoso.snk 作为密钥文件名。

  8. 构建项目,并确保构建成功。

练习 2:注册和使用

在本练习中,您将注册工作流活动,创建并准备解决方案,创建工作流,然后测试工作流和自定义活动。

任务 1:注册工作流活动

  1. 转到 Dynamics 365 SDK 文件夹,打开 PluginRegistration 文件夹。

  2. 双击 PluginRegistration.exe

    文件资源管理器,突出显示 PluginRegistration.exe 应用程序。

  3. 选择创建新连接

    插件注册工具,突出显示“创建新连接”按钮。

  4. 选择 Microsoft 365、提供凭据,然后选择登录

  5. 选择注册,然后选择注册新程序集

    插件注册工具,选择了注册项目,并突出显示“注册新程序集”选项。

  6. 选择浏览

    “注册新程序集”对话框,突出显示“步骤 1:指定要分析的程序集的位置”旁边的省略号按钮。

  7. 浏览到 WorkflowActivities 项目的调试文件夹,选择 WorkflowActivities.dll,然后选择打开

    “文件打开”对话框,选择了 WorkflowActivities.dll 程序集,并突出显示了“打开”按钮。

  8. 选择注册所选插件

    “注册新程序集”对话框,添加了工作流,并突出显示“注册所选插件”按钮。

  9. 选择确定

    已注册插件消息框,显示一个已注册的程序集和一个已注册的插件,并突出显示“确定”按钮。

任务 2:创建和准备解决方案

  1. 转到 https://make.powerapps.com并确保未选择默认环境。

  2. 选择解决方案,然后选择新建解决方案

    Power Apps,已打开解决方案页面并突出显示“新建解决方案”按钮。

  3. 显示名称字段中输入 Contoso WFA,在名称字段中输入 ContosoWFA,然后选择发布者下拉菜单。

    新解决方案对话框,突出显示发布者下拉列表。

  4. 选择+ 发布者

    发布者下拉列表,选择了“添加发布者”选项。

  5. 显示名称字段中输入 Contoso,在前缀字段中输入 contoso,然后选择保存并关闭

    “新建发布者”对话框,以 Contoso 作为显示名称和前缀,并突出显示“保存并关闭”按钮。

  6. 再次选择发布者下拉菜单并选择您创建的发布者。

    发布者菜单下拉列表,突出显示 Contoso 选项。

  7. 版本字段中输入1.0.0.0,然后选择创建

    版本字段设置为 1.0.0.0,并突出显示“创建”按钮。

  8. 打开您创建的解决方案。

    解决方案列表,突出显示 Contoso WFA。

  9. 选择添加现有,然后选择实体

    解决方案,带有“添加现有”下拉列表,并突出显示实体。

  10. 您将使用任务实体向工作流活动发送文本。 选择任务,然后选择下一步

    “添加现有实体”向导,选中了任务实体。

  11. 选择选择组件选项。

    “添加现有实体”向导,显示“1 个实体将被添加到您的项目中”,并突出显示“选择组件”操作。

  12. 选择窗体选项卡,选择任务窗体,然后选择添加

    具有所选任务窗体的窗体选项卡。

  13. 再次选择添加

    选定实体,显示“1 个实体将被添加到您的项目”并列出任务窗体和“选择组件”操作,清除了“包括所有组件”复选框和“添加”按钮。

  14. 选择以打开您刚刚添加到解决方案的任务实体。

    解决方案> Contoso WFA 列表,突出显示任务实体。

  15. 选择字段选项卡,然后选择+ 添加字段

    解决方案> Contoso WFA >“任务”页面打开到“字段”选项卡,突出显示“添加字段”按钮。

  16. 显示名称字段中输入格式化日期时间,从数据类型下拉菜单中选择文本,然后选择完成

    格式化的日期时间对话框,名称设置为“格式化的日期时间”,数据类型设置为“文本”,选择了“可搜索”文本框。

  17. 选择保存实体按钮。

    解决方案> Contoso WFA >“任务”页面打开到“字段”选项卡,列表中显示格式化日期时间粗体,右下角显示“保存实体”按钮。

  18. 选择窗体选项卡,然后选择以打开任务窗体。

    解决方案> Contoso WFA >“任务”页面打开到“窗体”选项卡,突出显示“任务窗体”按钮。

  19. 格式化的日期时间字段拖动到窗体,然后将其放到主题字段下。

    新任务表单,显示从“字段”列表拖到“主题”字段的格式化日期时间。

  20. 选择保存

    带有指向它的箭头的“保存”按钮的小屏幕截图。

  21. 选择发布并等待发布完成。

  22. 关闭窗体编辑器浏览器选项卡或窗口。

  23. 选择完成

    当前正在编辑窗体消息,说明“当您编辑完窗体后,单击下面的‘完成’返回实体”。这将刷新页面并提取更改。

任务 3:创建工作区

  1. 选择解决方案并打开您创建的解决方案。

    解决方案列表,突出显示 Contoso WFA 解决方案。

  2. 选择省略号 (...) 按钮并选择切换到经典

    已单击省略号按钮,并突出显示“切换到经典”选项。

  3. 选择流程,然后选择新建

    解决方案 Contoso WFA 组件树视图,选择了“流程”节点,并突出显示了“新建”按钮。

  4. 流程名称字段中输入转换并格式化日期时间,从类别下拉菜单中选择工作流,从实体下拉列表中选择任务,清除在后台运行本工作流(推荐)复选框,然后选择确定

    “创建流程”对话框,突出显示“确定”按钮。

  5. 选择作为按需流程复选框,然后从范围下拉菜单选择组织

    对话框,突出显示“可作为按需流程运行”,并在“自动流程选项”下突出显示“范围”设置为“组织”。

  6. 选择添加步骤,然后选择检查条件

    “添加步骤”下拉列表,突出显示“检查条件”选项。

  7. 输入检查到期日是否有值作为描述,然后选择配置

    检查条件描述,在其下方突出显示一个操作,内容为“如果条件(单击以配置),则:选择本行并单击添加步骤。”

  8. 如下图所示设置条件,然后选择保存并关闭

    文件选项卡,显示“保存并关闭”按钮。

  9. 在条件语句下方选择。

    在“检查到期日是否有值”步骤下,突出显示了“如果任务:到期日包含数据,则:”条件下的“选择本行并单击添加步骤”。

  10. 选择添加步骤,然后选择您创建的自定义工作流活动

    “添加步骤”下拉列表,突出显示 WorkflowActivities (1.0.0.0),并突出显示 WorkflowActivities.ConvertFormatDatetime 活动。

  11. 提供描述,然后选择设置属性

    在“检查到期日期是否有值”步骤下,突出显示“如果任务:到期日期包含数据,则:格式化日期时间具有‘设置属性’按钮”。

  12. 选择字段,选择到期日期,然后选择添加

    在“设置自定义步骤输入属性”页面上,日期时间输入属性突出显示了“值”字段,窗体助手突出显示了“查找:任务”和“到期日期”字段,以及一个指向“添加”按钮的箭头。

  13. 选择确定

    到期日期(任务),箭头指向“确定”按钮。

  14. 选择保存并关闭

    设置自定义步骤输入属性,显示日期时间输入属性的“值”字段设置为 {Due Date(Task)},并突出显示“保存并关闭”按钮。

  15. 选择您刚刚添加的步骤,选择添加步骤,然后选择更新记录

    “添加步骤”下拉列表,突出显示“更新记录”。

  16. 提供描述,确保在更新下拉列表中为实体选择了任务,然后选择设置属性

    在“更新格式化日期时间字段”描述下,更新设置为“任务”,并突出显示“设置属性”按钮。

  17. 选择格式化日期时间字段,从查找下拉菜单中选择格式化日期时间,然后选择添加

    在“更新任务”对话框中,突出显示空的“格式化日期时间”字段,在“窗体助手”中,突出显示查找选项“格式化日期时间”和“格式化日期时间输出为字符串”,并带有一个指向“添加”按钮的箭头。

  18. 选择确定

    格式化日期时间输出作为列表中的字符串,带有指向“确定”按钮的箭头。

  19. 选择保存并关闭

    更新任务对话框,将“格式化日期时间”字段设置为{Formatted DateTime output as string(Format Datetime)},并突出显示“保存并关闭”按钮。

  20. 选择您刚刚添加的步骤,选择添加步骤,然后选择停止工作流

    “添加步骤”下拉列表,突出显示“停止工作流”选项。

  21. 选择条件步骤,选择添加步骤,然后选择默认操作

    “添加步骤”下拉列表,突出显示“默认操作”选项。

  22. 选择下面的否则,选择添加步骤,然后选择停止工作流

    再次显示“添加步骤”下拉列表,突出显示“停止工作流”选项。

  23. 您的工作流现在应如下图所示。 选择保存

    完成了所有步骤的整个工作流,并突出显示“保存并关闭”按钮。

  24. 选择激活

  25. 确认激活。

  26. 选择关闭

    窗体的上边缘,突出显示“关闭”按钮。

  27. 选择发布所有自定义并等待发布完成。

    窗体的上边缘,突出显示“发布所有自定义”按钮。

  28. 关闭解决方案资源管理器窗口。

任务 4:测试工作流和自定义活动

  1. 转到 https://make.powerapps.com,并确保不是在默认环境中。

  2. 选择应用,并选择以打开CRM 中心 应用程序。

    CRM 中心应用,应用页面已打开,并突出显示 CRM 中心应用。

  3. 选择活动,然后选择任务

    CRM 中心应用,应用页面已打开,并突出显示“任务”按钮。

  4. 主题输入测试任务,选择到期日期和时间,然后选择保存

    “新建任务”对话框,突出显示到期日期和时间,并有一个指向“保存”按钮的箭头。

  5. 自定义工作流活动应运行并填充格式化日期时间字段。 到期日期和格式化日期时间值应相同。

    测试任务,突出显示到期日期和时间以及格式化日期时间值。

  6. 选择设置,然后选择个性化设置

    “设置”下拉列表,突出显示“个性化设置”选项。

  7. 时区更改为其他时区,然后选择确定

    “设置”对话框的“常规”选项卡,突出显示时区。

  8. 任务应重新加载。 到期日期字段值应自动更改为所选时区,但格式化日期时间值不应更改。

    测试任务,到期日期时间显示上午 11 点,格式化日期时间显示下午 1 点。

  9. 选择,然后选择您创建的工作流。

    流下拉列表,“转换和格式化日期时间”工作流在“运行工作流”下突出显示。

  10. 选择确定

    “确认应用工作流”消息框显示“此工作流将应用于 1 个任务。您可以通过打开每个任务并单击工作流来监视工作流作业。您确定要继续吗?”

  11. 选择刷新

    突出显示“刷新”按钮的测试任务。

    到期日期和格式化日期时间值现在应相同。

    测试任务,到期日期时间显示上午 11 点,格式化日期时间显示上午 11 点。