Доступ к переменной внутри forEach в mule

#mule #mule-studio #dataweave #mule-esb

#mule #mule-studio #сохранение данных #mule-esb

Вопрос:

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

  1. Предположим, если я объявил две переменные внутри forEach like 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. Какую версию mule вы используете? И что вы пытаетесь здесь сделать? Не могли бы вы, пожалуйста, предоставить входные и ожидаемые выходные примеры?

2. ПРИВЕТ, Джерни, среда выполнения Mule 3.9, и у меня есть масса данных, которые я должен параллельно загружать в отдельные объекты SFDC 2 (A amp; B). Для этой цели я использовал scatter для сбора и последующей отправки записей, SFDC respose, который я сопоставил с соответствующим идентификатором, там я могу фильтровать записи сбоев.. весь процесс в forEach .., здесь у меня есть две полезные нагрузки (в которых есть только записи сбоев A amp; B. только)., я должен взять эти 2 полезные нагрузки в формате JSON, добавить их и сгенерировать в CSV-файл.

3. Здесь, используя transformer, как я могу добавить эти 2 полезных нагрузки в одну полезную нагрузку?? и scatter gather вызывает дважды 0 и 1 . Я хочу сделать это как один вызов.

Ответ №1:

Вам нужно понимать, как работает определение области с foreach . Любые переменные, установленные внутри foreach области, не будут доступны за пределами этой области. Однако переменные, установленные за пределами foreach области видимости (например, a set-variable перед foreach ), будут доступны внутри foreach области видимости. Это должно помочь вам обойти вашу проблему. Я убираю scatter-gather, потому что в вашем примере это действительно не служит никакой цели:

 <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>
  

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

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

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

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