Доступ к переменной внутри forEach в муле - PullRequest
0 голосов
/ 19 марта 2019

У меня есть два запроса

  1. Предположим, если я объявил две переменные внутри forEach, такие как flowVars.ABC и flowVars.DEF, как я могу получить доступ к этим двум переменным вне этой forEach блок?

  2. И каждая переменная имеет полезную нагрузку JSON, как я могу добавить данные этих двух переменных в одну полезную нагрузку JSON?

Кто-нибудь может мне помочь?Мне не удалось получить доступ к переменным внутри foreach и добавить 2 JSON.

Это мой пример кода

<flow name="test">
        <foreach doc:name="For Each">
            <scatter-gather doc:name="Scatter-Gather">
                <set-variable variableName="ABC" value="#[payload]" mimeType="application/json" doc:name="ABC"/>
                <set-variable variableName="DEF" value="#[payload]" mimeType="application/json" doc:name="DEF"/>
            </scatter-gather>
        </foreach>
        <set-payload value="#[flowVars.ABC + flowVars.DEF]" mimeType="application/json" doc:name="adding 2 vars"/>
    </flow>

1 Ответ

1 голос
/ 19 марта 2019

Вам необходимо понять, как работает область действия с foreach.Любые переменные, установленные внутри области действия foreach, НЕ будут доступны за пределами этой области.Однако переменные, установленные вне области действия foreach (например, set-variable перед foreach), будут доступны внутри области действия foreach.Это должно помочь вам обойти вашу проблему.Я убираю скаттерфляй, потому что он действительно не имеет никакого смысла в вашем примере:

<flow name="test">
    <set-variable variableName="ABC value="#[payload] mimeType="application/json" doc:name="ABC"/>
    <set-variable variableName="DEF value="#[payload] mimeType="application/json" doc:name="DEF"/>
    <foreach doc:name="For Each">
        <set-variable variableName="ABC" value="#[payload]" mimeType="application/json" doc:name="ABC"/>
        <set-variable variableName="DEF" value="#[payload]" mimeType="application/json" doc:name="DEF"/>
    </foreach>
    <set-payload value="#[flowVars.ABC ++ flowVars.DEF]" mimeType="application/json" doc:name="adding 2 vars"/>
</flow>

Помимо этого, я не уверен, является ли ваш код упрощением или нет, но кактеперь есть пара сомнительных вещей:

Почему вы используете скаттер-сбор?Если вам не нужно делать несколько вещей асинхронно (например, звонить в несколько служб), это просто усложняет ваш код.На мой взгляд, установка двух переменных не подходит.

Что должен делать ваш код?С моей точки зрения, похоже, что вы просто устанавливаете полезную нагрузку на дубликат последнего элемента в исходной полезной нагрузке.Если это так, вы можете просто сделать это в трансформаторе:

%dw 2.0
output application/json
---
if (not isEmpty(payload))
  payload[-1] ++ payload[-1]
else
  []
...