创建承接提供程序

本主题介绍在 Microsoft Dynamics 365 Intelligent Order Management 中创建承接提供程序所需的步骤。

创建新的提供程序定义

要创建新的提供程序定义,请执行以下步骤。

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

向解决方案中添加提供程序定义

要向解决方案中添加提供程序定义,请执行以下步骤。

  1. 转到 Power App Maker portal,导航到新创建的解决方案 IOMLabProviders
  2. 选择添加现有 > IOM 提供程序定义
  3. 选择 IOMLabOrderIntakeProvider,然后选择添加以将其添加到解决方案中。

向提供程序定义中添加转换

要向提供程序定义中添加转换,请执行以下步骤。

  1. 转到提供程序 > 目录
  2. 选择新创建的 IOMLabOrderIntakeProvider
  3. 在菜单栏上选择编辑
  4. 选择转换选项卡。
  5. 选择 + 新建 IOM 提供程序定义转换
  6. 对于显示名称,输入“IOMLab Order to Dataverse Order”。
  7. 对于逻辑名称,输入“msdyn_IOMLabOrderIntake_Order”。
  8. 对于提供程序定义,输入或选择 IOMLabOrderIntakeProvider
  9. 对于源对象名称,输入“IOMLabOrderIntakeProvider”。
  10. 对于目标对象名称,输入“Dataverse Order”。
  11. 对于转换,在以下 M 查询代码中粘贴:
shared ImportMappingKey = [
    account = {
			[
				ExternalRecordKey = [ProviderName = "IOMLabOrderIntakeProvider"],
				SelectedFields = {"accountid"}
			]
    },
		pricelevel = {
			[
				ExternalRecordKey = [ProviderName = "IOMLabOrderIntakeProvider"],
				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 = "IOMLabOrderIntakeProvider"]),
	pricelevel = IOM.MapRecord(IOM.MappingTables[pricelevel], [ProviderName = "IOMLabOrderIntakeProvider"]),
			
	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],
										shipto_name = Record.FieldOrDefault(orderheader, "shipto_name"),
										shipto_contactname = Record.FieldOrDefault(orderheader, "shipto_contactname"),
										shipto_line1 = Record.FieldOrDefault(orderheader, "shipto_line1"),
										shipto_line2 = Record.FieldOrDefault(orderheader, "shipto_line2"),
										shipto_line3 = Record.FieldOrDefault(orderheader, "shipto_line3"),
										shipto_city = Record.FieldOrDefault(orderheader, "shipto_city"),
										shipto_stateorprovince = Record.FieldOrDefault(orderheader, "shipto_stateorprovince"),
										shipto_country = Record.FieldOrDefault(orderheader, "shipto_country"),
										shipto_postalcode = Record.FieldOrDefault(orderheader, "shipto_postalcode"),
										shipto_telephone = Record.FieldOrDefault(orderheader, "shipto_telephone")
									]
								), each [Value] <> null
							)
						)
					),

	salesorder = Record.AddField(orderheader, "order_details", orderlines)
in Text.FromBinary(Json.FromValue(salesorder));
  1. 对于转换源类型,输入“JsonPayload”。
  2. 选择保存
  3. 创建一个 JSON 文件,在以下代码中粘贴并对其进行保存。
{
  "ordernumber": "IOMLabOrder001",
  "shiptocity": "BELLEVUE",
  "shiptostateorprovince": "WA",
  "shiptocountry": "US",
  "shiptozip": "98007",
  "billtocity": "BELLEVUE",
  "billtostateorprovince": "WA",
  "billtocountry": "US",
  "billtozip": "98007",
  "orderdetails": [
    {
      "sku": "883988211855",
      "unit": "each",
      "quantity": 11
    }
  ]
} 

  1. 示例数据字段旁边,选择选择文件并上传您创建的 JSON 文件。
  2. 选择保存并关闭

向解决方案中添加提供程序定义转换

要向解决方案中添加提供程序定义转换,请执行以下步骤。

  1. 转到 Power App Maker portal,导航到新创建的解决方案 IOMLabProviders
  2. 选择添加现有 > IOM 提供程序定义参数转换
  3. 选择 IOMLab Order to Dataverse Order,然后选择添加以将其添加到解决方案中。

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

要创建提供程序消息处理程序,请执行以下步骤。

  1. 转到 Power App Maker portal,导航到解决方案,然后打开默认解决方案

  2. 选择新建

  3. 选择云端流,然后将其命名为“IOM Lab Order Intake Message Request Handler”。

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

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

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

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

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

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

  10. 对于包括附件,选择

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

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

  13. 对于只有附件,选择

    Outlook 触发器

  14. 选择新步骤,并添加“分析 JSON”。

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

    {
    "ProviderId": "00000000-0000-0000-0000-000000000000"
    }
    
  16. 直接在以下示例模式代码中粘贴:

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

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

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

  20. 选择保存

    “系统属性”操作

  21. 选择新步骤,添加一个分析 JSON 操作,重命名为“初始化提供程序变量”。

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

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

  24. 选择新步骤,添加一个初始化变量操作,重命名为“初始化处理执行结果”。

  25. 对于名称,输入“ExecutionResult”。

  26. 对于类型,选择布尔

  27. 对于,选择 true

  28. 选择保存

    初始化处理执行结果

  29. 选择新步骤,添加“范围”,重命名为“尝试”。

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

  31. Dataverse 连接器中添加“执行未绑定的操作”,并将其重命名为“在 IOM 中确认提供程序消息”。

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

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

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

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

  36. 选择保存

    确认提供程序消息

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

  38. 对于选择前面步骤的输出,选择附件

    “应用于每个”控件

  39. 应用于每个循环中的添加操作,从连接器中添加运行子流,并将其重命名为“通过 Power Query Online 转换消息”。

  40. 选择子流 IOM 提供程序转换程序

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

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

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

  44. 对于 Payload,输入 decodeBase64(items('Apply_to_each')?['ContentBytes']) 作为表达式。

  45. 选择保存

    使用 Power Query 转换消息

  46. 转换步骤后,选择添加操作,从流连接器中添加运行子流,并将其重命名为“创建订单”。

  47. 对于子流,输入“IOM 销售订单创建”。

  48. 对于 Payload,输入 string(json(outputs('Transform_Message_with_Power_Query_Online')?['Body']?['result'])?[0][0]) 作为表达式。

  49. 选择保存

    创建订单

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

  51. 选择新步骤,添加一个范围并将其命名为“捕获”。

  52. 捕获范围中,选择省略号(“...”),然后选择配置在以下时间之后运行

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

    配置在以下时间之后运行

  54. 捕获范围中,选择添加操作,然后添加一个设置变量操作,并将其重命名为“将执行结果设置为失败”。

  55. 对于名称,输入“Executionresult”。

  56. 对于,选择 False

  57. 选择保存

    设置变量操作

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

  59. 选择新步骤,添加一个范围并将其命名为“最终”。

  60. 最终范围中,选择省略号(“...”),然后选择配置在以下时间之后运行

  61. 选中已成功已失败已跳过已失败复选框,然后选择完成

    配置在以下时间之后运行(“最终”范围)

  62. 最终范围中,选择添加操作,添加一个执行未绑定的操作操作并将其重命名为“保存提供程序消息请求执行结果”。

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

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

  65. 选择保存

    保存提供程序消息请求执行结果

向提供程序定义中添加提供程序定义逻辑定义

要向提供程序定义中添加提供程序定义逻辑定义,请执行以下步骤。

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

注释

如果您看到 Microsoft DataverseOutlook.com 以外的连接引用定义,这意味着您正在您的订单承接消息处理程序流中使用一个以上 Dataverse 连接引用。 要解决此问题,请转到您的流并确保所有 Dataverse 操作都使用相同的连接引用。

向 IOMLabProviders 解决方案中添加提供程序定义逻辑定义

要向 IOMLabProviders 解决方案中添加提供程序定义逻辑定义,请执行以下步骤。

  1. 转到 Power App Maker portal,导航到新创建的解决方案 IOMLabProviders
  2. 选择添加现有 > IOM 提供程序定义逻辑定义
  3. 选择 IOM Lab Order Intake Message Request Handler,然后选择添加以将其添加到解决方案中。

向 IOMLabProviders 解决方案中添加提供程序定义连接引用

要向 IOMLabProviders 解决方案中添加提供程序定义连接引用,请执行以下步骤。

  1. 转到 Power App Maker portal,导航到新创建的解决方案 IOMLabProviders
  2. 选择添加现有 > IOM 提供程序定义连接引用
  3. 选择 Microsoft DataverseOutlook.com 连接引用定义,然后选择添加以将其添加到解决方案中。

下一个快速入门实验室步骤:创建履行解决方案