问题描述
我想更新传入负载中的一行。该字段是“价格”。 我的 dataweave 脚本是
%dw 2.0
output application/json
---
payload.IntegrationEntities.integrationEntity.integrationEntityDetails.contractutilization.items.item update
{
case price at .price -> "100"
}
我的有效载荷是;
{
"IntegrationEntities": {
"integrationEntity": [
{
"integrationEntityHeader": {
"integrationTrackingNumber": "XXXX","referenceCodeForEntity": "132804","additionalInfo": "ADDITIONALINFO"
},"integrationEntityDetails": {
"contractutilization": {
"externalId": "417145","utilizationType": "INVOICE","isDelete": "No","documentNumber": "132804","documentDescription": "","documentDate": "2021-03-26","totalSpendamount": ".92","documentCurrency": "AUD","createdBy": "Oracle Integration","status": "FULLY PAID","items": {
"item": [
{
"lineItemId": "132804_1","contractNumber": "YYYYYYY","contractLineId": "","lineNumber": "1","name": "132804","description": "132804","quantity": "1","price": ".92","lineAmount": ".92","purchaSEOrderNumber": "YYYYYY","purchaSEOrderDescription": ""
},{
"lineItemId": "132804_2","description": "132804_2","price": ".95","lineAmount": ".95","purchaSEOrderDescription": ""
}
]
}
}
}
}
]
}
}
但上面的脚本总是返回收入有效载荷价格为“.92”
我得到的输出是;
[
[
{
"lineItemId": "132804_1","contractNumber": "XXXXXX","purchaSEOrderNumber": "YYYYY","purchaSEOrderDescription": ""
},{
"lineItemId": "132804_2","purchaSEOrderDescription": ""
}
]
]
我的脚本有什么问题?为什么它没有更新我的价格值?为什么我得到部分有效载荷作为输出? 我的要求是,更新价格金额并提供完整的有效负载作为输出。
解决方法
试试这个
%dw 2.0
output application/json
---
payload update {
case item at .IntegrationEntities.integrationEntity[0].integrationEntityDetails.contractUtilization.items.item[0] -> item update {
case price at .price -> "100"
}
}
根据您的要求更新答案:
%dw 2.0
output application/json
---
payload update {
case .IntegrationEntities.integrationEntity[0].integrationEntityDetails.contractUtilization.items.item -> $ map {
($ update {
case .price -> if ($ as Number < 1) "0" ++ $ else $
}
)}
}