根据逻辑应用程序中的公共键值组合数组中的对象
Combine objects in an array based on common key values in Logic Apps
所以我有一个 API 的输出,看起来像这样
[
{
"SalesOrderType": "OR",
"SalesOrganization": "1710",
"DistributionChannel": "10",
"OrganizationDivision": "00",
"SoldToParty": "17100002",
"TransactionCurrency": "USD",
"PurchaseOrderByCustomer": "SalesOrder Simulate 1",
"to_Item": "",
"SalesOrderItem": "10",
"Material": "TG22",
"RequestedQuantity": "1"
},
{
"SalesOrderType": "OR",
"SalesOrganization": "1710",
"DistributionChannel": "10",
"OrganizationDivision": "00",
"SoldToParty": "17100002",
"TransactionCurrency": "USD",
"PurchaseOrderByCustomer": "SalesOrder Simulate 1",
"to_Item": "",
"SalesOrderItem": "20",
"Material": "TG0011",
"RequestedQuantity": "1"
},
{
"SalesOrderType": "OR",
"SalesOrganization": "1710",
"DistributionChannel": "10",
"OrganizationDivision": "00",
"SoldToParty": "17100010",
"TransactionCurrency": "USD",
"PurchaseOrderByCustomer": "SalesOrder Simulate 2",
"to_Item": "",
"SalesOrderItem": "10",
"Material": "TG0011",
"RequestedQuantity": "2"
},
{
"SalesOrderType": "OR",
"SalesOrganization": "1710",
"DistributionChannel": "10",
"OrganizationDivision": "00",
"SoldToParty": "17100010",
"TransactionCurrency": "USD",
"PurchaseOrderByCustomer": "SalesOrder Simulate 2",
"to_Item": "",
"SalesOrderItem": "20",
"Material": "TG22",
"RequestedQuantity": "3"
},
{
"SalesOrderType": "OR",
"SalesOrganization": "1710",
"DistributionChannel": "10",
"OrganizationDivision": "00",
"SoldToParty": "17100010",
"TransactionCurrency": "USD",
"PurchaseOrderByCustomer": "SalesOrder Simulate 3",
"to_Item": "",
"SalesOrderItem": "10",
"Material": "TG22",
"RequestedQuantity": "1"
}]
现在我想要的是将具有相同“PurchaseOrderByCustomer”的所有对象合并到一个包含嵌套数组的数组中,如下所示:
[
{
"SalesOrderType": "OR",
"SalesOrganization": "1710",
"DistributionChannel": "10",
"OrganizationDivision": "00",
"SoldToParty": "17100002",
"TransactionCurrency": "USD",
"PurchaseOrderByCustomer": "SalesOrder Simulate 1",
"to_Item": [
{
"SalesOrderItem": "10",
"Material": "TG22",
"RequestedQuantity": "1"
},
{
"SalesOrderItem": "20",
"Material": "TG0011",
"RequestedQuantity": "1"
}
]
},
{
"SalesOrderType": "OR",
"SalesOrganization": "1710",
"DistributionChannel": "10",
"OrganizationDivision": "00",
"SoldToParty": "17100010",
"TransactionCurrency": "USD",
"PurchaseOrderByCustomer": "SalesOrder Simulate 2",
"to_Item": [
{
"SalesOrderItem": "10",
"Material": "TG0011",
"RequestedQuantity": "2"
},
{
"SalesOrderItem": "20",
"Material": "TG22",
"RequestedQuantity": "3"
}
]
},
{
"SalesOrderType": "OR",
"SalesOrganization": "1710",
"DistributionChannel": "10",
"OrganizationDivision": "00",
"SoldToParty": "17100010",
"TransactionCurrency": "USD",
"PurchaseOrderByCustomer": "SalesOrder Simulate 3",
"to_Item": [
{
"SalesOrderItem": "10",
"Material": "TG22",
"RequestedQuantity": "1"
}
]
}]
所以一个销售订单可以有多个项目,一个销售订单需要是格式中的一个对象,我需要进一步处理订单。现在我想在 Logic Apps 中执行此操作,并且尝试了几种方法,但我完全迷路了,甚至不确定是否可以在 Logic Apps 中完成此操作。
我想知道我需要的东西在 Logic Apps 中是否可行
如评论中Nikhil Vartak
所述,可以使用Inline Code达到目的:
你可以参考我的代码:
var jsonString=<your-json>;
var pur=[];
for(var i=0;i<Object.keys(jsonString).length;i++){
pur.push(jsonString[i].PurchaseOrderByCustomer);
}
var arr=[...new Set(pur)];
var array=[];
var num;
var jsonArray=[];
for(var i=0;i<arr.length;i++){
var purchaseOrder = arr[i];
for(var j = 0; j < Object.keys(jsonString).length; j++){
var item = jsonString[j];
if(item.PurchaseOrderByCustomer == purchaseOrder){
var to = {"SalesOrderItem": item.SalesOrderItem,"Material": item.Material,"RequestedQuantity": item.RequestedQuantity};
array.push(to);
}
}
for(var j = 0;j<Object.keys(jsonString).length;j++){
if(jsonString[j].PurchaseOrderByCustomer==purchaseOrder){
num=j;
break;
}
}
var item=jsonString[num];
item.to_Item=array;
delete item['SalesOrderItem'];
delete item['Material'];
delete item['RequestedQuantity'];
jsonArray.push(item);
array=[];
}
return jsonArray;
我做了一些测试,结果好像没问题:
注:
如果在Azure Logic App
中使用Inline Code
,则需要添加一个integration accounts。
所以我有一个 API 的输出,看起来像这样
[
{
"SalesOrderType": "OR",
"SalesOrganization": "1710",
"DistributionChannel": "10",
"OrganizationDivision": "00",
"SoldToParty": "17100002",
"TransactionCurrency": "USD",
"PurchaseOrderByCustomer": "SalesOrder Simulate 1",
"to_Item": "",
"SalesOrderItem": "10",
"Material": "TG22",
"RequestedQuantity": "1"
},
{
"SalesOrderType": "OR",
"SalesOrganization": "1710",
"DistributionChannel": "10",
"OrganizationDivision": "00",
"SoldToParty": "17100002",
"TransactionCurrency": "USD",
"PurchaseOrderByCustomer": "SalesOrder Simulate 1",
"to_Item": "",
"SalesOrderItem": "20",
"Material": "TG0011",
"RequestedQuantity": "1"
},
{
"SalesOrderType": "OR",
"SalesOrganization": "1710",
"DistributionChannel": "10",
"OrganizationDivision": "00",
"SoldToParty": "17100010",
"TransactionCurrency": "USD",
"PurchaseOrderByCustomer": "SalesOrder Simulate 2",
"to_Item": "",
"SalesOrderItem": "10",
"Material": "TG0011",
"RequestedQuantity": "2"
},
{
"SalesOrderType": "OR",
"SalesOrganization": "1710",
"DistributionChannel": "10",
"OrganizationDivision": "00",
"SoldToParty": "17100010",
"TransactionCurrency": "USD",
"PurchaseOrderByCustomer": "SalesOrder Simulate 2",
"to_Item": "",
"SalesOrderItem": "20",
"Material": "TG22",
"RequestedQuantity": "3"
},
{
"SalesOrderType": "OR",
"SalesOrganization": "1710",
"DistributionChannel": "10",
"OrganizationDivision": "00",
"SoldToParty": "17100010",
"TransactionCurrency": "USD",
"PurchaseOrderByCustomer": "SalesOrder Simulate 3",
"to_Item": "",
"SalesOrderItem": "10",
"Material": "TG22",
"RequestedQuantity": "1"
}]
现在我想要的是将具有相同“PurchaseOrderByCustomer”的所有对象合并到一个包含嵌套数组的数组中,如下所示:
[
{
"SalesOrderType": "OR",
"SalesOrganization": "1710",
"DistributionChannel": "10",
"OrganizationDivision": "00",
"SoldToParty": "17100002",
"TransactionCurrency": "USD",
"PurchaseOrderByCustomer": "SalesOrder Simulate 1",
"to_Item": [
{
"SalesOrderItem": "10",
"Material": "TG22",
"RequestedQuantity": "1"
},
{
"SalesOrderItem": "20",
"Material": "TG0011",
"RequestedQuantity": "1"
}
]
},
{
"SalesOrderType": "OR",
"SalesOrganization": "1710",
"DistributionChannel": "10",
"OrganizationDivision": "00",
"SoldToParty": "17100010",
"TransactionCurrency": "USD",
"PurchaseOrderByCustomer": "SalesOrder Simulate 2",
"to_Item": [
{
"SalesOrderItem": "10",
"Material": "TG0011",
"RequestedQuantity": "2"
},
{
"SalesOrderItem": "20",
"Material": "TG22",
"RequestedQuantity": "3"
}
]
},
{
"SalesOrderType": "OR",
"SalesOrganization": "1710",
"DistributionChannel": "10",
"OrganizationDivision": "00",
"SoldToParty": "17100010",
"TransactionCurrency": "USD",
"PurchaseOrderByCustomer": "SalesOrder Simulate 3",
"to_Item": [
{
"SalesOrderItem": "10",
"Material": "TG22",
"RequestedQuantity": "1"
}
]
}]
所以一个销售订单可以有多个项目,一个销售订单需要是格式中的一个对象,我需要进一步处理订单。现在我想在 Logic Apps 中执行此操作,并且尝试了几种方法,但我完全迷路了,甚至不确定是否可以在 Logic Apps 中完成此操作。
我想知道我需要的东西在 Logic Apps 中是否可行
如评论中Nikhil Vartak
所述,可以使用Inline Code达到目的:
你可以参考我的代码:
var jsonString=<your-json>;
var pur=[];
for(var i=0;i<Object.keys(jsonString).length;i++){
pur.push(jsonString[i].PurchaseOrderByCustomer);
}
var arr=[...new Set(pur)];
var array=[];
var num;
var jsonArray=[];
for(var i=0;i<arr.length;i++){
var purchaseOrder = arr[i];
for(var j = 0; j < Object.keys(jsonString).length; j++){
var item = jsonString[j];
if(item.PurchaseOrderByCustomer == purchaseOrder){
var to = {"SalesOrderItem": item.SalesOrderItem,"Material": item.Material,"RequestedQuantity": item.RequestedQuantity};
array.push(to);
}
}
for(var j = 0;j<Object.keys(jsonString).length;j++){
if(jsonString[j].PurchaseOrderByCustomer==purchaseOrder){
num=j;
break;
}
}
var item=jsonString[num];
item.to_Item=array;
delete item['SalesOrderItem'];
delete item['Material'];
delete item['RequestedQuantity'];
jsonArray.push(item);
array=[];
}
return jsonArray;
我做了一些测试,结果好像没问题:
注:
如果在Azure Logic App
中使用Inline Code
,则需要添加一个integration accounts。