我正在尝试尝试匹配/过滤unmatchedIds数组中的以下lineId值,然后通过processorTransactionId过滤exampleFile的结果集。结果将是删除最后一个FinancialTransactionEntity,其中processorTransactionId =“ 000000062121029333”。
从理论上讲,unmatchedIds数组和exampleFile数组的大小都可以不受限制。
任何指导/建议/示例将不胜感激。目前,我很难使用dataweave过滤器来实现这一目标。
{
"unmatchedIds": [
{
"lineId": "000000062121029111"
},
{
"lineId": "000000062121029222"
}
]
}
exampleFile
[{
"financialTransactionEntity": {
"cardAcceptor": {
"name": "Burger Inc.",
"countryCode": "GBP"
},
"financialTransaction": {
"debitOrCredit": "C",
"amountInOriginalCurrency": {
"amount": "0000001000",
"exponent": "2"
},
"originalCurrencyCode": "826",
"transactionDate": "2020-02-18"
},
"processorTransactionId": "000000062121029111"
}
},
{
"financialTransactionEntity": {
"cardAcceptor": {
"name": "McDonalds Inc.",
"countryCode": "GBP"
},
"financialTransaction": {
"debitOrCredit": "C",
"amountInOriginalCurrency": {
"amount": "0000002000",
"exponent": "2"
},
"originalCurrencyCode": "826",
"transactionDate": "2020-02-18"
},
"processorTransactionId": "000000062121029222"
}
},
{
"financialTransactionEntity": {
"cardAcceptor": {
"name": "McDonalds Inc.",
"countryCode": "GBP"
},
"financialTransaction": {
"debitOrCredit": "C",
"amountInOriginalCurrency": {
"amount": "0000002000",
"exponent": "2"
},
"originalCurrencyCode": "826",
"transactionDate": "2020-02-18"
},
"processorTransactionId": "000000062121029333"
}
}
]
答案 0 :(得分:2)
您可以使用带有过滤器的数据选择器。见下文
%dw 2.0
output application/java
import * from dw::core::Arrays
var unMatchedIds = {
"unmatchedIds": [
{
"lineId": "000000062121029111"
},
{
"lineId": "000000062121029222"
}
]
}
var payload = [{
"financialTransactionEntity": {
"cardAcceptor": {
"name": "Burger Inc.",
"countryCode": "GBP"
},
"financialTransaction": {
"debitOrCredit": "C",
"amountInOriginalCurrency": {
"amount": "0000001000",
"exponent": "2"
},
"originalCurrencyCode": "826",
"transactionDate": "2020-02-18"
},
"processorTransactionId": "000000062121029111"
}
},
{
"financialTransactionEntity": {
"cardAcceptor": {
"name": "McDonalds Inc.",
"countryCode": "GBP"
},
"financialTransaction": {
"debitOrCredit": "C",
"amountInOriginalCurrency": {
"amount": "0000002000",
"exponent": "2"
},
"originalCurrencyCode": "826",
"transactionDate": "2020-02-18"
},
"processorTransactionId": "000000062121029222"
}
},
{
"financialTransactionEntity": {
"cardAcceptor": {
"name": "McDonalds Inc.",
"countryCode": "GBP"
},
"financialTransaction": {
"debitOrCredit": "C",
"amountInOriginalCurrency": {
"amount": "0000002000",
"exponent": "2"
},
"originalCurrencyCode": "826",
"transactionDate": "2020-02-18"
},
"processorTransactionId": "000000062121029333"
}
}
]
---
using (unMatchedArray = unMatchedIds.unmatchedIds.*lineId)
payload[?(unMatchedArray contains $.financialTransactionEntity.processorTransactionId)]
unMatchedArray此处只是来自原始对象的不匹配ID的列表(unMatchedIds)。如果financialTransactionEntity.processorTransactionId位于unMatchedArray中,则数据选择器将仅包含条目。
答案 1 :(得分:1)
您可以使用groupBy
和filter
函数来获得结果。首先,您可以按unMatchIds
对lineId
进行分组,然后可以对实际有效负载应用过滤器以消除所有不匹配的项目。
output application/json
var unMatchIdsGrouped = var.unMatchIds.unmatchedIds groupBy $.lineId
---
payload filter ((item) -> unMatchIdsGrouped[ item.financialTransactionEntity.processorTransactionId] !=null)
答案 2 :(得分:0)
我建议将Sub DS()
'
' DS Macro
'
Dim wb As Workbook
Set wb = Workbooks.Open("H:\L\Roy\H AND E\2020\SAP - ZPSD02_template2\")
'
'Selection.AutoFilter
Worksheets("ST TO ST").Range("$A$1:$O$1").AutoFilter Field:=12, Criteria1:="PENDING"
lastRow = Worksheets("ST TO ST").Range("J" & Worksheets("ST TO ST").Rows.Count).End(xlUp).Row
'ActiveWindow.SmallScroll Down:=-12
Worksheets("ST TO ST").Range("$A$1:$O$1").AutoFilter Field:=10, Criteria1:="U3R", Operator:=xlOr, Criteria2:="U2R"
Worksheets("ST TO ST").Range("J2:J" & lastRow).SpecialCells(xlCellTypeVisible).Copy _
Destination:=wb.Sheets("Sheet1").Range("A1")
Worksheets("ST TO ST").Range("C2:C" & lastRow).SpecialCells(xlCellTypeVisible).Copy _
Destination:=wb.Sheets("Sheet1").Range("B1")
Worksheets("ST TO ST").Range("D2:D" & lastRow).SpecialCells(xlCellTypeVisible).Copy _
Destination:=wb.Sheets("Sheet1").Range("E1")
Worksheets("ST TO ST").Range("H2:H" & lastRow).SpecialCells(xlCellTypeVisible).Copy _
Destination:=wb.Sheets("Sheet1").Range("F1")
End Sub
对象转换为unmatchedIds
的数组,然后根据比较对象中是否找到id
来过滤exampleFile
对象使用processorTransactionId
完整脚本的数组:
contains
答案 3 :(得分:0)
这是另一个答案...。希望有帮助
%dw 2.2
output application/json
var inpUnmatchedIds = {
"unmatchedIds": [
{
"lineId": "000000062121029111"
},
{
"lineId": "000000062121029222"
}
]
}
var exampleIds = [{
"financialTransactionEntity": {
"cardAcceptor": {
"name": "Burger Inc.",
"countryCode": "GBP"
},
"financialTransaction": {
"debitOrCredit": "C",
"amountInOriginalCurrency": {
"amount": "0000001000",
"exponent": "2"
},
"originalCurrencyCode": "826",
"transactionDate": "2020-02-18"
},
"processorTransactionId": "000000062121029111"
}
},
{
"financialTransactionEntity": {
"cardAcceptor": {
"name": "McDonalds Inc.",
"countryCode": "GBP"
},
"financialTransaction": {
"debitOrCredit": "C",
"amountInOriginalCurrency": {
"amount": "0000002000",
"exponent": "2"
},
"originalCurrencyCode": "826",
"transactionDate": "2020-02-18"
},
"processorTransactionId": "000000062121029222"
}
},
{
"financialTransactionEntity": {
"cardAcceptor": {
"name": "McDonalds Inc.",
"countryCode": "GBP"
},
"financialTransaction": {
"debitOrCredit": "C",
"amountInOriginalCurrency": {
"amount": "0000002000",
"exponent": "2"
},
"originalCurrencyCode": "826",
"transactionDate": "2020-02-18"
},
"processorTransactionId": "000000062121029333"
}
}
]
---
exampleIds filter (value) -> ((((inpUnmatchedIds pluck $.lineId))[0]) contains (value.financialTransactionEntity.processorTransactionId))