创建订单承接提供程序

已完成

本单元描述在 Intelligent Order Management 中创建承接提供程序所需的步骤。

添加新提供程序

您的组织可以利用 Dynamics 365 Intelligent Order Management 提供的各种提供程序来优化业务流程。 提供程序允许您将外部系统无缝连接到 Intelligent Order Management。

有关 Dynamics 365 Intelligent Order Management 中可用提供程序的更多信息,请转到提供程序目录

创建新的提供程序定义

要创建新的提供程序定义,请按照以下步骤操作:

  1. 转到提供程序 > 目录
  2. 选择新提供程序定义
  3. 对于显示名称,输入 LabOrderIntakeProvider
  4. 对于逻辑名称,输入 msdyn_LabOrderIntakeProvider
  5. 对于徽标,选择 Lab.png
  6. 对于服务类型,输入订单承接
  7. 对于描述,输入实验室订单承接提供程序
  8. 选择保存并关闭

将提供程序定义添加到解决方案

要将提供程序定义添加到解决方案,请按照以下步骤操作:

  1. 转到 Power Apps Maker Portal并转到新创建的 LabProviders 解决方案。
  2. 选择添加现有 > 提供程序定义
  3. 选择 LabOrderIntakeProvider,然后选择添加以将其添加到解决方案。

将转换添加到提供程序解决方案

要将转换添加到提供程序定义,请按照以下步骤操作:

  1. 转到提供程序 > 目录

  2. 选择新创建的 LabOrderIntakeProvider

  3. 选择菜单栏上的编辑

  4. 选择转换选项卡。

  5. 选择 + 新建 IOM 提供程序定义转换

  6. 对于显示名称,输入实验室订单到 Dataverse 订单

  7. 对于逻辑名称,输入 msdyn_LabOrderIntake_Order

  8. 对于提供程序定义,输入或选择 LabOrderIntakeProvider

  9. 对于源对象名称,输入 LabOrderIntakeProvider

  10. 对于目标对象名称,输入 Dataverse 订单

  11. 对于转换,粘贴以下 M 查询代码:

     shared ImportMappingKey = [
    account = {
     		[
     			ExternalRecordKey = [ProviderName = "LabOrderIntakeProvider"],
     			SelectedFields = {"accountid"}
     		]
    },
     	pricelevel = {
     		[
     			ExternalRecordKey = [ProviderName = "LabOrderIntakeProvider"],
     			SelectedFields = {"pricelevelid"}
     		]
    },
     	product = List.Distinct(List.Transform(Source[orderdetails], each
     		[
     			ExternalRecordKey = [sku = _[sku]],
     			SelectedFields = {"productid"}
     		])),
     	uom = List.Distinct(List.Transform(Source[orderdetails], each
     		[
     			ExternalRecordKey = [unit = _[unit]],
     			SelectedFields = {"uomid"}
     		]))
    ];
    shared TransformSourceData =
    let
     orderProducts = Source[orderdetails],
     account = IOM.MapRecord(IOM.MappingTables[account], [ProviderName = "LabOrderIntakeProvider"]),
     pricelevel = IOM.MapRecord(IOM.MappingTables[pricelevel], [ProviderName = "LabOrderIntakeProvider"]),
    
     orderheader = Record.FromTable
     				(
     					Table.SelectRows
     					(
     						Record.ToTable
     						(
     							[
     								ordernumber = Text.From(Source[ordernumber]),
     								name = ordernumber,
     								#"customerid_account@odata.bind" = "/accounts(" & Text.From(account[accountid]) & ")",
     								#"pricelevelid@odata.bind" = "/pricelevels(" & Text.From(pricelevel[pricelevelid]) & ")",
     								billto_city = Record.FieldOrDefault(Source, "billtocity"),
     								billto_stateorprovince = Record.FieldOrDefault(Source, "billtostateorprovince"),
     								billto_country = Record.FieldOrDefault(Source, "billtocountry"),
     								billto_postalcode = Record.FieldOrDefault(Source, "billtozip"),
     								shipto_city = Record.FieldOrDefault(Source, "shiptocity"),
     								shipto_stateorprovince = Record.FieldOrDefault(Source, "shiptostateorprovince"),
     								shipto_country = Record.FieldOrDefault(Source, "shiptocountry"),
     								shipto_postalcode = Record.FieldOrDefault(Source, "shiptozip")
     							]
     						), each [Value] <> null
     					)
     				),
    
     orderlines = List.Transform(orderProducts, each
     					Record.FromTable
     					(
     						Table.SelectRows
     						(
     							Record.ToTable
     							(
     								[
     									ispriceoverridden = true,
     									#"productid@odata.bind" = "/products(" & IOM.MapRecord(IOM.MappingTables[product], [sku = Record.FieldOrDefault(_, "sku")])[productid] & ")",
     									#"uomid@odata.bind" = "/uoms(" & IOM.MapRecord(IOM.MappingTables[uom], [unit = Record.FieldOrDefault(_, "unit")])[uomid] & ")",
     									quantity = [quantity]
     								]
     							), each [Value] <> null
     						)
     					)
     				),
    
     salesorder = Record.AddField(orderheader, "order_details", orderlines)
    
     in Text.FromBinary(Json.FromValue(salesorder));
    
    
  12. 对于转换源类型,输入 JsonPayload

  13. 选择保存

  14. 创建 JSON 文件,粘贴以下代码,然后保存。

    {
      "ordernumber": "LabOrder001",
      "shiptocity": "BELLEVUE",
      "shiptostateorprovince": "WA",
      "shiptocountry": "US",
      "shiptozip": "98007",
      "billtocity": "BELLEVUE",
      "billtostateorprovince": "WA",
      "billtocountry": "US",
      "billtozip": "98007",
      "orderdetails": [
    {
      "sku": "883988211855",
      "unit": "each",
      "quantity": 11
    }
      ]
    } 
    
  15. 示例数据字段旁边,选择选择文件,然后上传您创建的 JSON 文件。

  16. 选择保存并关闭

将提供程序定义转换添加到解决方案

要将提供程序定义转换添加到解决方案,请按照以下步骤操作:

  1. 转到 Power Apps Maker Portal并转到新创建的 LabProviders 解决方案。
  2. 选择添加现有 > 提供程序定义转换
  3. 选择实验室订单到 Dataverse 订单,然后选择添加以将其添加到解决方案。

创建提供程序消息处理程序

要创建提供程序消息处理程序,请按照以下步骤操作:

  1. 转到 Power Apps Maker Portal,再转到解决方案,然后打开默认解决方案

  2. 选择新建

  3. 选择云端流,然后将其命名为实验室订单承接消息请求处理程序

  4. 选择 Outlook.com - 新电子邮件到达时 (V2) 作为触发器类型,然后使用您的 outlook.com 帐户凭据登录。

  5. 对于文件夹,选择收件箱

  6. 对于收件人,选择收件人电子邮件地址,用分号分隔

  7. 对于抄送,选择抄送收件人电子邮件地址,用分号分隔

  8. 对于收件人或抄送,选择收件人或抄送收件人电子邮件地址,用分号分隔

  9. 对于发件人,选择发件人电子邮件地址,用分号分隔

  10. 对于加入附件,选择

  11. 对于主题筛选器,选择 LabOrderIntakeOrder

  12. 对于重要性,选择任意

  13. 对于只检索带附件的电子邮件,选择

    屏幕截图:Microsoft Outlook 触发器页面。)

  14. 选择新建步骤,然后添加分析 json

  15. 对于内容,粘贴以下代码:

    {
    "ProviderId": "00000000-0000-0000-0000-000000000000"
    }
    
  16. 选择从示例生成,然后粘贴以下示例架构代码:

    {
      "type": "object",
      "properties": {
        "ProviderID": {
          "type": "string"
        }
      }
    }
    
  17. 选择完成

  18. 选择省略号 (...),然后选择重命名

  19. 将操作重命名为 IOM 系统属性

  20. 选择保存

    屏幕截图:IOM 系统属性操作页面)

  21. 选择新建步骤,添加分析 JSON 操作,然后将其重命名为初始化提供程序变量

  22. 对于内容,粘贴以下代码:

    {
      "SourceObjectName": "IOMLab Order",
      "DestinationObjectName": "Dataverse Order"
    }
    
  23. 选择保存

  24. 选择新建步骤,添加初始化变量操作,然后将其重命名为初始化处理执行结果

  25. 对于名称,输入 ExecutionResult

  26. 对于类型,选择布尔

  27. 对于,选择 true

  28. 选择保存

    屏幕截图:“初始化处理执行结果”页面。

  29. 选择新建步骤,添加范围,然后将其重命名为尝试

  30. 尝试范围中选择添加操作

  31. Dataverse 连接器添加执行未绑定操作,然后将其重命名为确认提供程序消息

  32. 对于操作名称,输入 msdyn_CreateProviderMessageRequestExecution

  33. 对于 PowerAutomateWorkflowId,输入表达式 workflow()['tags']['xrmWorkflowId']

  34. 对于 PowerAutomateRunId,输入表达式 workflow()['run']?['name']

  35. 对于 ProviderExternalRequestId,输入表达式 guid()

  36. 选择保存

    屏幕截图:IOM 中的“确认提供程序消息”页面。

  37. 选择添加操作,然后添加应用到每一个控件。

  38. 对于从先前的步骤中选择一个输出,选择附件

  39. 选择应用到每一个循环中的添加操作,从连接器中添加运行子流,然后将其重命名为使用 Power Query Online 转换消息

  40. 对于提供程序 ID,选择 ProviderId 变量。

  41. 对于源对象名称,选择 SourceObjectName 变量。

  42. 对于目标对象名称,选择 DestinationObjectName 变量。

  43. 对于有效负载,输入表达式 decodeBase64(items('Apply_to_each')?['ContentBytes'])

  44. 选择保存

    屏幕截图:“使用 Power Query Online 转换消息”页面。

  45. 完成转换步骤后,选择添加操作,从连接器中添加运行子流,然后将其重命名为创建订单

  46. 对于子流,输入销售订单创建

  47. 对于有效负载,输入表达式 string(json(outputs('Transform_Message_with_Power_Query_Online')?['Body']?['result'])?[0][0])

  48. 选择保存

    屏幕截图:“创建订单”页面。

  49. 通过选择其标题栏来折叠尝试范围。

  50. 选择新建步骤,添加范围,然后将其重命名为捕获

  51. 捕获范围中,依次选择省略号 (...)、配置运行条件

  52. 选中已失败已超时复选框,然后选择完成

    屏幕截图:“配置运行条件”页面。

  53. 捕获范围中,选择添加操作,添加设置变量操作,然后将其重命名为将执行结果设置为失败

  54. 对于名称,输入 ExecutionResult

  55. 对于,选择 False

  56. 选择保存

    屏幕截图:“设置变量操作”页面。

  57. 通过选择其标题栏来折叠捕获范围。

  58. 选择新建步骤,添加范围,然后将其重命名为最后

  59. 最后范围中,依次选择省略号 (...)、配置运行条件

  60. 选中成功已失败已跳过已超时复选框。 选择完成

    屏幕截图:“最后”运行条件范围页面。

  61. 最后范围中,选择添加操作,添加执行未绑定操作,然后将其重命名为保存提供程序消息请求执行结果

  62. 对于操作名称,输入“msdyn_UpdateProviderMessageRequestStatus”。

  63. 对于 ProviderMessageRequestExecutionId,输入 @outputs('Acknowledge_the_Provider_Message')?["body/ProviderMessageRequestExecutionId']

  64. 选择保存

    屏幕截图:保存提供程序消息请求执行结果。

将提供程序定义逻辑定义添加到提供程序定义

要将提供程序定义逻辑定义添加到提供程序定义,请按照以下步骤操作:

  1. 在 Intelligent Order Management 应用程序中,转到提供程序 > 目录
  2. 选择新创建的 LabOrderIntakeProvider
  3. 选择菜单栏上的编辑
  4. 选择逻辑定义选项卡。
  5. 选择 + 新建 IOM 提供程序定义逻辑定义
  6. 对于显示名称,输入实验室订单承接消息请求处理程序
  7. 对于逻辑名称,输入 msdyn_LabOrderIntakeMessageRequestHandler
  8. 对于提供程序定义,输入 LabOrderIntakeProvider
  9. 对于逻辑类型,输入提供消息处理程序
  10. 对于工作流名称,输入实验室订单承接消息请求处理程序
  11. 对于超时分钟数,输入 2
  12. 对于最大重试次数,输入 3
  13. 对于描述,输入实验室订单承接消息请求处理程序
  14. 选择保存。 执行该步骤将生成消息处理程序云端流的 JSON 表示形式,并将填写客户端数据字段。
  15. 选择保存并关闭
  16. 选择连接。 现在应列出了 Microsoft DataverseOutlook.com 连接引用定义。

注意

如果显示的是除 Microsoft DataverseOutlook.com 之外的其他连接引用定义,这说明您在订单承接消息处理程序流中使用了多个 Dataverse 连接引用。 要解决此问题,请转到您的流并确保所有 Dataverse 操作都使用相同的连接引用。

将提供程序定义逻辑定义添加到 LabProviders 解决方案

要将提供程序定义逻辑定义添加到 LabProviders 解决方案,请按照以下步骤操作:

  1. 选择添加现有 > 提供程序定义逻辑定义
  2. 选择实验室订单承接消息请求处理程序,然后选择添加以将其添加到解决方案。

将提供程序定义连接引用添加到 LabProviders 解决方案

要将提供程序定义连接引用添加到 LabProviders 解决方案,请按照以下步骤操作:

  1. 转到 Power Apps Maker Portal并转到新创建的 LabProviders 解决方案。
  2. 选择添加现有 > 提供程序定义连接引用
  3. 选择 Microsoft DataverseOutlook.com 连接引用定义,然后选择添加以将其添加到解决方案。