Как сделать это отображение в dataweave (Mulesoft)

1. Уличный адрес: если ABC пуст, а ZXY заполнен, сопоставьте ZXY 2. Уличный адрес UC: если ZXY и ABC заполнены и ABC не начинается с «PO BOX», «P.O. BOX», «BP» или «POTBUS», карта ABC; в противном случае MAP ZXY 3.Адрес улицы: если P08 ABC заполнен, а ZXY пусто, только MAP ABC.

Мне удалось сопоставить 1-е условие и 3-е условие, как показано ниже, но я не уверен, как сделать второе.

{
ADDRESS_LINE1:ABC
   } when ABC != ""
     otherwise
     {

     ADDRESS_LINE1:ZXY
     }

person Satheesh Kumar    schedule 18.03.2016    source источник


Ответы (1)


Попробуйте это... должно сработать.

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

%dw 1.0
%output application/java
---
{
    'Address': (payload.addr.ABC when (payload.addr.ABC[0..5] != 'PO BOX' 
                                        and payload.addr.ABC[0..7] != 'P.O. BOX') otherwise payload.addr.XYZ)
                    when (payload.addr.ABC != '' 
                            and payload.addr.XYZ != '')
                    otherwise (payload.addr.ABC when payload.addr.ABC != '' otherwise payload.addr.XYZ)

}

Я проверил ввод образца -

<?xml version='1.0' encoding='UTF-8'?>
<addr>
    <ABC>P.O. BOX 123</ABC>
    <XYZ>DEFG</XYZ>
</addr>
person Manik Magar    schedule 18.03.2016
comment
! знак не работает, и могу ли я узнать, что делает 0..5 ?? - person Satheesh Kumar; 18.03.2016
comment
@SatheeshKumar, какую ошибку ты видишь !? [0..5] — селектор диапазона строк (например, подстрока). ABC[0..5] вернет первые 6 символов строки. Дополнительные сведения см. в документах docs.mulesoft. com/mule-user-guide/v/3.7/. Для приведенного выше примера ввода в моем сообщении я получаю DEFG в качестве адреса на выходе, потому что ABC начинается с «P.O. КОРОБКА' - person Manik Magar; 18.03.2016