Azure Logic Apps:如何按ReceiptId对对象进行分组?
在Azure Logic Apps中按ReceiptId分组收据数据的实现步骤
前提准备
确保已完成Parse JSON动作,将D365FO返回的原始数据解析为JSON数组。以下是适配你数据的示例Schema:
{ "type": "array", "items": { "type": "object", "properties": { "dataAreaId": { "type": "string" }, "TerminalId": { "type": "string" }, "TransactionId": { "type": "string" }, "LineNum": { "type": "integer" }, "ReceiptId": { "type": "string" } }, "required": ["ReceiptId"] } }初始化GroupedReceipts变量:类型选择
Object,初始值设为{}。
核心分组逻辑实现
添加For each动作,选择Parse JSON输出的数组作为循环对象。
- 重要:进入For each的设置,将并发控制改为
1(避免多线程更新变量时的冲突)。
- 重要:进入For each的设置,将并发控制改为
在For each内部添加Condition动作,判断当前项的ReceiptId是否已存在于GroupedReceipts中:
- 条件表达式:
contains(variables('GroupedReceipts'), items('For_each')?['ReceiptId'])
- 条件表达式:
分两种情况处理:
情况1:ReceiptId已存在(Condition为真)
添加Set variable动作,更新GroupedReceipts中对应ReceiptId的数组,追加当前项:
- 变量名称:
GroupedReceipts - 值的表达式:
(注:setProperty( variables('GroupedReceipts'), items('For_each')?['ReceiptId'], appendToArray( variables('GroupedReceipts')[items('For_each')?['ReceiptId']], createObject( 'receiptnumber', items('For_each')?['ReceiptId'], 'dataAreaId', items('For_each')?['dataAreaId'], 'TerminalId', items('For_each')?['TerminalId'], 'TransactionId', items('For_each')?['TransactionId'], 'LineNum', items('For_each')?['LineNum'] ) ) )createObject部分是为了将原数据的ReceiptId映射为你期望的receiptnumber字段,可根据需求调整字段)
情况2:ReceiptId不存在(Condition为假)
添加Set variable动作,给GroupedReceipts新增一个键值对,值为包含当前项的数组:
- 变量名称:
GroupedReceipts - 值的表达式:
setProperty( variables('GroupedReceipts'), items('For_each')?['ReceiptId'], createArray( createObject( 'receiptnumber', items('For_each')?['ReceiptId'], 'dataAreaId', items('For_each')?['dataAreaId'], 'TerminalId', items('For_each')?['TerminalId'], 'TransactionId', items('For_each')?['TransactionId'], 'LineNum', items('For_each')?['LineNum'] ) ) )
- 变量名称:
验证输出
循环结束后,GroupedReceipts变量的格式就会和你期望的一致:
{ "1004040220001": [ { "receiptnumber": "1004040220001", "dataAreaId": "11", "TerminalId": "100402", "TransactionId": "xxxx", "LineNum": 1 }, { "receiptnumber": "1004040220001", "dataAreaId": "11", "TerminalId": "100402", "TransactionId": "xxxxx", "LineNum": 2 } ] }
内容的提问来源于stack exchange,提问作者Jouni Pekkola
相关产品推荐
相关产品推荐

