You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Logic Apps:如何按ReceiptId对对象进行分组?

在Azure Logic Apps中按ReceiptId分组收据数据的实现步骤

前提准备

  1. 确保已完成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"]
        }
    }
    
  2. 初始化GroupedReceipts变量:类型选择Object,初始值设为{}。


核心分组逻辑实现

  1. 添加For each动作,选择Parse JSON输出的数组作为循环对象。

    • 重要:进入For each的设置,将并发控制改为1(避免多线程更新变量时的冲突)。
  2. 在For each内部添加Condition动作,判断当前项的ReceiptId是否已存在于GroupedReceipts中:

    • 条件表达式:contains(variables('GroupedReceipts'), items('For_each')?['ReceiptId'])
  3. 分两种情况处理:

    情况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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 09:40:18