Входные переменные в Dataweave

Я читаю документацию по Dataweave и меня озадачивает приведенный ниже пример.

В документации говорится

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

Затем следуйте приведенному ниже примеру

%dw 1.0
%input in0
%output application/xml
---
payload

Мои вопросы:

В каких областях мул будет искать переменную in0? Payload, Flow, Session или что-то еще и в каком порядке?

Где в этом примере используется in0? Как это помогает в этом примере?

Зачем мне нужна входная переменная? Dataweave, похоже, разрешает flowVars.hello.


person Sudarshan    schedule 15.07.2015    source источник


Ответы (2)


Я думаю, что пример не соответствует тексту. Этот пример должен быть:

%dw 1.0
%input in0
%output application/xml
---
in0

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

%dw 1.0
%input payload application/xml
%output application/xml
---
{
  a: payload
}

Далее в документации есть лучшие примеры:

Директива ввода CSV При определении ввода типа CSV есть несколько необязательных параметров, которые вы можете добавить к директиве ввода, чтобы настроить способ анализа данных.

header: логическое значение, определяющее, содержит ли первая строка данных заголовки

separatorChar: символ, разделяющий поля, ',' по умолчанию

quoteChar: символ, определяющий цитируемый текст, по умолчанию ""

escapeChar: символ, экранирующий кавычки, / по умолчанию

Директива ввода CSV с установленными пользовательскими параметрами выглядит так:

% input in0 application / csv header = true separatorChar =; Когда header = true, вы можете получить доступ к полям внутри ввода в любом месте по имени. Пример: in0.userName.

Когда header = false, вы должны обращаться к полям по индексу, ссылаясь сначала на запись, а затем на поле, например: in0 [107] [2]

person Ryan Carter    schedule 16.07.2015
comment
Значит, первая переменная после% input всегда будет давать псевдоним полезной нагрузки? поэтому в этом примере% input in0 application / csv; in0 - это псевдоним для полезной нагрузки, который должен иметь тип application / csv ... правильно ли я понимаю? Также есть какие-нибудь подсказки, почему они решили придумать совершенно новый язык, а не просто создать DSL на основе Groovy или что-то в этом роде? Как отлаживать эти сценарии? - person Sudarshan; 18.07.2015

Как правило, вам не нужно ничего объявлять с помощью директивы% input. По умолчанию полезная нагрузка, переменные потока, входящие / исходящие свойства, переменные сеанса и т. Д. Доступны в сети данных, как и в MEL.

MEL такой же, как Java, все, что вы можете написать на java для отладки (System.out), вы также можете сделать в MEL.

%dw 1.0
%output application/java
---
{
    GENDER: payload.gender,
    test:flowVars.test,
    testIp:inboundProperties.testIp,
    testOp:outboundProperties.testOp
}

Посмотрите на этот пример для нескольких входов - Несколько входов < / а>

person Manik Magar    schedule 26.02.2016