如何在Power Automate流中生成含动态属性的JSON负载
实现Dynamics 365双表映射生成API请求JSON负载
以下是基于你提供的触发表new_demotable001、映射表new_metadatatable生成目标API请求JSON的具体操作步骤:
1. 基础配置
- 触发规则:设置当
new_demotable001新增行时触发流,触发输出数据示例:{ "new_empname": "EmpName5", "new_demotable001id": "259ffaeb-a354-ef11-bfe3-000d3af2cd77", "new_empcontact": "555555555555", "new_name": "DemoDataTestin", "new_empstatus": 100000001, "_new_empstatus_label": "On-Boarded" } - 获取映射数据:添加「List rows」操作,读取
new_metadatatable的所有记录,返回数据示例:{ "@Microsoft.Dynamics.CRM.totalrecordcount": -1, "@Microsoft.Dynamics.CRM.totalrecordcountlimitexceeded": false, "@Microsoft.Dynamics.CRM.globalmetadataversion": "10896094", "value": [ { "new_sirionattributename": "title", "new_dynamicsattributename": "new_empname", "new_name": "First" }, { "new_sirionattributename": "test1", "new_dynamicsattributename": "new_empcontact", "new_name": "Second" }, { "new_sirionattributename": "orgId", "new_dynamicsattributename": "new_empstatus", "new_name": "Third" } ] }
2. 过滤并构建映射键值对
方法一:循环+条件筛选
- 添加「Apply to each」操作,选择
body('List_rows')?['value']作为循环输入。 - 循环内添加「Condition」操作,使用指定判断条件:
contains(triggerOutputs()?['body'], items('Apply_to_each')?['new_dynamicsattributename']) - 当条件为真时,添加「Append to array variable」操作:
- 先创建名为
mappedPairs的数组类型变量。 - 向数组追加如下对象:
{ "key": items('Apply_to_each')?['new_sirionattributename'], "value": triggerOutputs()?['body'][items('Apply_to_each')?['new_dynamicsattributename']] }
- 先创建名为
方法二:Select+Filter数组简化操作
- 添加「Select」操作,输入为
body('List_rows')?['value'],设置映射规则:- 键:
items('Select')?['new_sirionattributename'] - 值:
triggerOutputs()?['body'][items('Select')?['new_dynamicsattributename']]
- 键:
- 添加「Filter array」操作,输入为
body('Select'),过滤条件设为:contains(triggerOutputs()?['body'], items('Filter_array')?['key'])
3. 生成目标JSON负载
循环或筛选完成后,使用以下表达式将处理后的数组转换为预期格式:
- 若用方法一:
json(concat('{"data":', string(createObject(join(xpath(xml(json(concat('{"root":', variables('mappedPairs'), '}'))), '//key/text()'), join(xpath(xml(json(concat('{"root":', variables('mappedPairs'), '}'))), '//value/text()'))), '}')) - 若用方法二:
json(concat('{"data":', string(createObject(join(body('Filter_array')?['key'], ','), join(body('Filter_array')?['value'], ','))), '}'))
最终生成的JSON负载与预期一致:
{ "data":{ "title": "EmpName5", "test1": "555555555555", "orgId": "100000001" } }
内容的提问来源于stack exchange,提问作者Aiden Martin
相关产品推荐
相关产品推荐

