如何在 mule 3 中声明局部变量
How to declare a local variable in mule3
我正在 Mule 3 中进行数据转换。我正在更新现有代码,其中在 DataWeave 1.0 中声明了很多变量
我想在声明的变量中添加一个名为“type__c”的字段。
我的输入载荷如下
{
"billofPlaning": {
"billcollection": {
"itemDetail": [
{
"comm": [
{
"commodity": {
"itemSequence": 1,
"equipmentPrefix": "ABCD",
"equipmentNumber": "1234"
}
},
{
"commodity": {
"itemSequence": 2,
"equipmentPrefix": "DEFG",
"equipmentNumber": "5678"
}
}
]
}
]
},
"equip": [
{
"equipment": {
"prefix": "ABCD",
"number": "1234",
"type": 2345
}
},
{
"equipment": {
"prefix": "HIJ",
"number": "7890",
"type": 234567
}
}
]
}
}
我现有的 DataWeave 1.0 脚本是这样的:
%dw 1.0
%output application/java
%var inputData=payload
%var payBill= inputData.billofPlaning.billcollection.itemDetail default [] map (billcode,indexOfbillcode) -> {
billcode: {
"field1": "",
"type__c": ""
}
---
paybill
我想在上面的 DataWeave 1.0 代码中为字段“type__c”重用下面的 DataWeave 2.0 代码。
%dw 2.0
output application/json
var test= ((payload.billofPlaning.equip) filter (($.equipment.prefix == payload.billofPlaning.billcollection.itemDetail.comm[0].commodity.equipmentPrefix[0])
and ($.equipment.number == payload.billofPlaning.billcollection.itemDetail.comm[0].commodity.equipmentNumber[0])))
---
"type__c": test.equipment."type"[0]
我们能否使用 DataWeave 1.0 以某种更好的方式来做到这一点(基本上是使用任何局部变量或我们在 DataWeave 1.0 中声明的 payBill 变量中的某些内容)?
不清楚您的转换逻辑是什么以及预期结果是什么。如果您只想重用 test
变量,DataWeave 1 和 DataWeave 2 之间那个特定变量的唯一区别是前者的变量声明使用 %
字符。我将它添加到脚本中并删除了无用的 inputData 变量。我还修复了缺少结束大括号的脚本。
%dw 1.0
%output application/java
%var test= ((payload.billofPlaning.equip) filter (($.equipment.prefix == payload.billofPlaning.billcollection.itemDetail.comm[0].commodity.equipmentPrefix[0])
and ($.equipment.number == payload.billofPlaning.billcollection.itemDetail.comm[0].commodity.equipmentNumber[0])))
%var payBill=(payload.billofPlaning.billcollection.itemDetail default [])
map (billcode,indexOfbillcode) -> {
billcode: {
"field1": "",
"type__c": test
}
}
---
payBill
输出:
[{billcode={field1=, type__c=[{equipment={prefix=ABCD, number=1234, type=2345}}]}}]
如果你想定义一个'local'变量你可以用using
语法声明scoped variables。我看不出这在这个特定脚本中有何意义。通常它用于简化对嵌套项的访问,此脚本不使用它。
示例:
%dw 1.0
%output application/java
%var payBill=(payload.billofPlaning.billcollection.itemDetail default [])
map (billcode,indexOfbillcode) ->
using ( test= ((payload.billofPlaning.equip) filter (($.equipment.prefix == payload.billofPlaning.billcollection.itemDetail.comm[0].commodity.equipmentPrefix[0])
and ($.equipment.number == payload.billofPlaning.billcollection.itemDetail.comm[0].commodity.equipmentNumber[0]))) )
{
billcode: {
"field1": "",
"type__c": test
}
}
---
payBill
我不会称之为改进。
DataWeave 2.0 中的等价物是 do 命令,它具有改进的功能和更好的语法。
我正在 Mule 3 中进行数据转换。我正在更新现有代码,其中在 DataWeave 1.0 中声明了很多变量
我想在声明的变量中添加一个名为“type__c”的字段。
我的输入载荷如下
{
"billofPlaning": {
"billcollection": {
"itemDetail": [
{
"comm": [
{
"commodity": {
"itemSequence": 1,
"equipmentPrefix": "ABCD",
"equipmentNumber": "1234"
}
},
{
"commodity": {
"itemSequence": 2,
"equipmentPrefix": "DEFG",
"equipmentNumber": "5678"
}
}
]
}
]
},
"equip": [
{
"equipment": {
"prefix": "ABCD",
"number": "1234",
"type": 2345
}
},
{
"equipment": {
"prefix": "HIJ",
"number": "7890",
"type": 234567
}
}
]
}
}
我现有的 DataWeave 1.0 脚本是这样的:
%dw 1.0
%output application/java
%var inputData=payload
%var payBill= inputData.billofPlaning.billcollection.itemDetail default [] map (billcode,indexOfbillcode) -> {
billcode: {
"field1": "",
"type__c": ""
}
---
paybill
我想在上面的 DataWeave 1.0 代码中为字段“type__c”重用下面的 DataWeave 2.0 代码。
%dw 2.0
output application/json
var test= ((payload.billofPlaning.equip) filter (($.equipment.prefix == payload.billofPlaning.billcollection.itemDetail.comm[0].commodity.equipmentPrefix[0])
and ($.equipment.number == payload.billofPlaning.billcollection.itemDetail.comm[0].commodity.equipmentNumber[0])))
---
"type__c": test.equipment."type"[0]
我们能否使用 DataWeave 1.0 以某种更好的方式来做到这一点(基本上是使用任何局部变量或我们在 DataWeave 1.0 中声明的 payBill 变量中的某些内容)?
不清楚您的转换逻辑是什么以及预期结果是什么。如果您只想重用 test
变量,DataWeave 1 和 DataWeave 2 之间那个特定变量的唯一区别是前者的变量声明使用 %
字符。我将它添加到脚本中并删除了无用的 inputData 变量。我还修复了缺少结束大括号的脚本。
%dw 1.0
%output application/java
%var test= ((payload.billofPlaning.equip) filter (($.equipment.prefix == payload.billofPlaning.billcollection.itemDetail.comm[0].commodity.equipmentPrefix[0])
and ($.equipment.number == payload.billofPlaning.billcollection.itemDetail.comm[0].commodity.equipmentNumber[0])))
%var payBill=(payload.billofPlaning.billcollection.itemDetail default [])
map (billcode,indexOfbillcode) -> {
billcode: {
"field1": "",
"type__c": test
}
}
---
payBill
输出:
[{billcode={field1=, type__c=[{equipment={prefix=ABCD, number=1234, type=2345}}]}}]
如果你想定义一个'local'变量你可以用using
语法声明scoped variables。我看不出这在这个特定脚本中有何意义。通常它用于简化对嵌套项的访问,此脚本不使用它。
示例:
%dw 1.0
%output application/java
%var payBill=(payload.billofPlaning.billcollection.itemDetail default [])
map (billcode,indexOfbillcode) ->
using ( test= ((payload.billofPlaning.equip) filter (($.equipment.prefix == payload.billofPlaning.billcollection.itemDetail.comm[0].commodity.equipmentPrefix[0])
and ($.equipment.number == payload.billofPlaning.billcollection.itemDetail.comm[0].commodity.equipmentNumber[0]))) )
{
billcode: {
"field1": "",
"type__c": test
}
}
---
payBill
我不会称之为改进。
DataWeave 2.0 中的等价物是 do 命令,它具有改进的功能和更好的语法。