Как мы можем преобразовать код Mule 4 datawevae 2.0 в Mule 3 dataweave 1.0? - PullRequest
0 голосов
/ 09 июля 2020

У меня есть следующий код dataweave 2.0 в Mule 4, и мне нужен этот код в Mule 3 dataweave 1.0. Может кто-нибудь мне помочь, как преобразовать этот код в dw 1.0?

    Dataweave step 1

%dw 2.0
output application/json
fun prepareList(list:Array, maxSize: Number) = if(sizeOf(list) >= maxSize )
list
else
prepareList(list ++ [(sizeOf(list) + 1) as Number],maxSize)
---
(payload map (row, index) -> ({
    dummy : prepareList([],sizeOf(row))  map (irow, icounter) -> {

        ((row[icounter] splitBy "=")[0]) : (row[icounter] splitBy "=")[1] 
    } 

})) 



Dataweave step 2

%dw 2.0
output application/json
---
((payload reduce ((item, acc) -> acc ++ item)).*dummy map (row, index) -> ({
    index : row reduce ((item2, acc2) -> acc2 ++ item2)
})).*index

Ответы [ 2 ]

0 голосов
/ 09 июля 2020

Вы не можете. Похоже, но DW 2 намного мощнее DW 1. Это похоже на изменение C ++ на C. Выглядит одинаково, но концепции разные.

Верно и обратное. https://simpleflatservice.com/mule4/Mule3toMule4Transformation.html

0 голосов
/ 09 июля 2020

Большинство операций, таких как map, reduce, splitBy, будут работать в DataWeave 1.0 в основном одинаково и, вероятно, потребуют небольших изменений или вообще не потребуют их. Селектор * такой же.

Вам нужно будет заменить if ... else ... на when ... в противном случае ...

Вам также нужно будет изменить объявления перед разделителем ---, чтобы они соответствовали соглашениям DataWeave 1.0.

Пример:

%dw 1.0
%output application/json
%function prepareList(list, maxSize) 
              list when ( sizeOf(list) >= maxSize ) 
                   otherwise prepareList(list ++ [(sizeOf(list) + 1) as Number],maxSize)
---
...