创建承接提供程序
本主题介绍在 Microsoft Dynamics 365 Intelligent Order Management 中创建承接提供程序所需的步骤。
创建新的提供程序定义
要创建新的提供程序定义,请执行以下步骤。
- 转到提供程序 > 目录。
- 选择新建提供程序定义。
- 对于显示名称,输入“IOMLabOrderIntakeProvider”。
- 对于逻辑名称,输入“msdyn_IOMLabOrderIntakeProvider”。
- 对于徽标,选择“IOMLab.png”。
- 对于服务类型,输入“订单承接”。
- 对于描述,输入“IOM 实验室订单承接提供程序”。
- 选择保存并关闭。
向解决方案中添加提供程序定义
要向解决方案中添加提供程序定义,请执行以下步骤。
- 转到 Power App Maker portal,导航到新创建的解决方案 IOMLabProviders。
- 选择添加现有 > IOM 提供程序定义。
- 选择 IOMLabOrderIntakeProvider,然后选择添加以将其添加到解决方案中。
向提供程序定义中添加转换
要向提供程序定义中添加转换,请执行以下步骤。
- 转到提供程序 > 目录。
- 选择新创建的 IOMLabOrderIntakeProvider。
- 在菜单栏上选择编辑。
- 选择转换选项卡。
- 选择 + 新建 IOM 提供程序定义转换。
- 对于显示名称,输入“IOMLab Order to Dataverse Order”。
- 对于逻辑名称,输入“msdyn_IOMLabOrderIntake_Order”。
- 对于提供程序定义,输入或选择 IOMLabOrderIntakeProvider。
- 对于源对象名称,输入“IOMLabOrderIntakeProvider”。
- 对于目标对象名称,输入“Dataverse Order”。
- 对于转换,在以下 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));
- 对于转换源类型,输入“JsonPayload”。
- 选择保存。
- 创建一个 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
}
]
}
- 在示例数据字段旁边,选择选择文件并上传您创建的 JSON 文件。
- 选择保存并关闭。
向解决方案中添加提供程序定义转换
要向解决方案中添加提供程序定义转换,请执行以下步骤。
- 转到 Power App Maker portal,导航到新创建的解决方案 IOMLabProviders。
- 选择添加现有 > IOM 提供程序定义参数转换。
- 选择 IOMLab Order to Dataverse Order,然后选择添加以将其添加到解决方案中。
创建提供程序消息处理程序
要创建提供程序消息处理程序,请执行以下步骤。
转到 Power App Maker portal,导航到解决方案,然后打开默认解决方案。
选择新建。
选择云端流,然后将其命名为“IOM Lab Order Intake Message Request Handler”。
选择触发器类型 Outlook.com – 当新邮件到达时 (V2),然后使用您的 outlook.com 帐户凭据登录。
对于文件夹,选择收件箱。
对于收件人,选择以分号分隔的收件人电子邮件地址。
对于抄送,选择以分号分隔的抄送收件人电子邮件地址。
对于收件人或抄送,选择以分号分隔的收件人或抄送收件人电子邮件地址。
对于发件人,选择以分号分隔的发件人电子邮件地址。
对于包括附件,选择是。
对于主题筛选器,选择 IOMLabOrderIntakeOrder。
对于重要性,选择任何。
对于只有附件,选择是。
选择新步骤,并添加“分析 JSON”。
对于内容,在以下代码中粘贴:
{ "ProviderId": "00000000-0000-0000-0000-000000000000" }
直接在以下示例模式代码中粘贴:
{ "type": "object", "properties": { "ProviderId": { "type": "string" } } }
选择完成。
选择省略号(“...”),然后选择重命名。
将操作重命名为“IOM 系统属性”。
选择保存。
选择新步骤,添加一个分析 JSON 操作,重命名为“初始化提供程序变量”。
对于内容,在以下代码中粘贴:
{ "SourceObjectName": "IOMLabOrderIntakeProvider", "DestinationObjectName": "Dataverse Order" }
选择保存。
选择新步骤,添加一个初始化变量操作,重命名为“初始化处理执行结果”。
对于名称,输入“ExecutionResult”。
对于类型,选择布尔。
对于值,选择 true。
选择保存。
选择新步骤,添加“范围”,重命名为“尝试”。
在尝试范围中,选择添加操作。
从 Dataverse 连接器中添加“执行未绑定的操作”,并将其重命名为“在 IOM 中确认提供程序消息”。
对于操作名称,输入“msdyn_CreateProviderMessageRequestExecution”。
对于 PowerAutomateWorkflowId,输入
workflow()['tags']['xrmWorkflowId']
作为表达式。对于 PowerAutomateRunId,输入
workflow()['run']?['name']
作为表达式。对于 ProviderExternalRequestId,输入
guid()
作为表达式。选择保存。
选择添加操作,然后添加一个应用于每个控件。
对于选择前面步骤的输出,选择附件。
在应用于每个循环中的添加操作,从流连接器中添加运行子流,并将其重命名为“通过 Power Query Online 转换消息”。
选择子流 IOM 提供程序转换程序。
对于提供程序 ID,选择 ProviderId 变量。
对于源对象名称,选择 SourceObjectName 变量。
对于目标对象名称,选择 DestinationObjectName 变量。
对于 Payload,输入
decodeBase64(items('Apply_to_each')?['ContentBytes'])
作为表达式。选择保存。
转换步骤后,选择添加操作,从流连接器中添加运行子流,并将其重命名为“创建订单”。
对于子流,输入“IOM 销售订单创建”。
对于 Payload,输入
string(json(outputs('Transform_Message_with_Power_Query_Online')?['Body']?['result'])?[0][0])
作为表达式。选择保存。
通过选择其标题栏来折叠尝试范围。
选择新步骤,添加一个范围并将其命名为“捕获”。
在捕获范围中,选择省略号(“...”),然后选择配置在以下时间之后运行。
选中已失败和已超时复选框,然后选择完成。
在捕获范围中,选择添加操作,然后添加一个设置变量操作,并将其重命名为“将执行结果设置为失败”。
对于名称,输入“Executionresult”。
对于值,选择 False。
选择保存。
通过选择其标题栏来折叠捕获范围。
选择新步骤,添加一个范围并将其命名为“最终”。
在最终范围中,选择省略号(“...”),然后选择配置在以下时间之后运行。
选中已成功、已失败、已跳过和已失败复选框,然后选择完成。
在最终范围中,选择添加操作,添加一个执行未绑定的操作操作并将其重命名为“保存提供程序消息请求执行结果”。
对于操作名称,输入“msdyn_UpdateProviderMessageRequestStatus”。
对于 ProviderMessageRequestExecutionId,输入
@outputs('Acknowledge_the_Provider_Message_in_IOM')?["body/ProviderMessageRequestExecutionId']
。选择保存。
向提供程序定义中添加提供程序定义逻辑定义
要向提供程序定义中添加提供程序定义逻辑定义,请执行以下步骤。
- 在您的 Intelligent Order Management 应用程序中,转到提供程序 > 目录。
- 选择新创建的 IOMLabOrderIntakeProvider。
- 在菜单栏上选择编辑。
- 选择逻辑定义选项卡。
- 选择 + 新建 IOM 提供程序定义逻辑定义。
- 对于显示名称,输入“IOM Lab Order Intake Message Request Handler”。
- 对于逻辑名称,输入“msdyn_LabOrderIntakeMessageRequestHandler”。
- 对于提供程序定义,输入“IOMLabOrderIntakeProvider”。
- 对于逻辑类型,输入“提供程序消息处理程序”。
- 对于工作流名称,输入“IOM Lab Order Intake Message Request Handler”。
- 对于超时分钟数,输入“2”。
- 对于最大重试次数,输入“3”。
- 对于描述,输入“IOM 实验室订单承接消息请求处理程序”。
- 选择保存。 这将生成消息处理程序云端流的 JSON 表示形式并填充客户端数据字段。
- 选择保存并关闭。
- 选择连接。 您应该会看到列出了 Microsoft Dataverse 和 Outlook.com 连接引用定义。
注释
如果您看到 Microsoft Dataverse 和 Outlook.com 以外的连接引用定义,这意味着您正在您的订单承接消息处理程序流中使用一个以上 Dataverse 连接引用。 要解决此问题,请转到您的流并确保所有 Dataverse 操作都使用相同的连接引用。
向 IOMLabProviders 解决方案中添加提供程序定义逻辑定义
要向 IOMLabProviders 解决方案中添加提供程序定义逻辑定义,请执行以下步骤。
- 转到 Power App Maker portal,导航到新创建的解决方案 IOMLabProviders。
- 选择添加现有 > IOM 提供程序定义逻辑定义。
- 选择 IOM Lab Order Intake Message Request Handler,然后选择添加以将其添加到解决方案中。
向 IOMLabProviders 解决方案中添加提供程序定义连接引用
要向 IOMLabProviders 解决方案中添加提供程序定义连接引用,请执行以下步骤。
- 转到 Power App Maker portal,导航到新创建的解决方案 IOMLabProviders。
- 选择添加现有 > IOM 提供程序定义连接引用。
- 选择 Microsoft Dataverse 和 Outlook.com 连接引用定义,然后选择添加以将其添加到解决方案中。
下一个快速入门实验室步骤:创建履行解决方案。