Извлечь поле из массива с помощью функции DW 1.0 - PullRequest
2 голосов
/ 20 февраля 2020

У меня есть переменная сеанса varIP1, которая имеет значение, как показано ниже: (Это MIME-тип application / java)

{abc={FedId=abc, Id=01FcLA, type=User, Profile={Id=02EmQA, type=Profile, Name=Analyst}}}

Я заинтересован в извлечении первого идентификатора (01FcLA) сверху используя функцию, описанную ниже:

%dw 1.0
%output application/json
%var myLib = readUrl("classpath://dwlib/my-global-functions.wev", "application/dw")
---
{

    "Id": (myLib.idLookup(sessionVars.varIP1 ,$.Id,"Id") default null)
}

Глобальная функция, которую я использую:

%function validateLookup(lookupArray, key) 'true' when (lookupArray != null and IsNull(key) == 'false' and lookupArray[key] != null) otherwise 'false'
%function idLookup(lookupArray,key,value) (lookupArray[key][0][value] default '') as :string when (validateLookup(lookupArray,key) == 'true')  otherwise null

При использовании приведенного выше кода «Id» становится нулевым. Какие-либо изменения, необходимые выше?

Спасибо.

1 Ответ

0 голосов
/ 20 февраля 2020

Это будет самый простой подход, если вы знаете, что ваша sessionVar будет иметь такую ​​же структуру:

%dw 1.0
%output application/json
---
{
    Id: sessionVars.varIP1..Id
}

Обновлено, поскольку ab c не может быть жестко закодировано.

Есть нет причин ставить default null. Если он не может найти идентификатор, он будет нулевым. Если вы хотите установить значение по умолчанию "", это будет иметь больше смысла.

...