lookup

DataWeave 2.2 は Mule 4.2 と互換性があり、Mule 4.2 にバンドルされています。 このバージョンの Mule は、拡張サポートが終了する 2023 年 5 月 2 日にその すべてのサポート​が終了しました。

このバージョンの Mule を使用する CloudHub には新しいアプリケーションをデプロイできなくなります。許可されるのはアプリケーションへのインプレース更新のみになります。

標準サポートが適用されている最新バージョンの Mule 4 にアップグレード​することをお勧めします。これにより、最新の修正とセキュリティ機能強化を備えたアプリケーションが実行されます。

lookup(String, Any, Number)

この関数を使用すると、Mule アプリケーション内でフローを実行し、結果のペイロードを取得できます。

これは、Mule Runtime バージョン 4.1.4 以降で実行されている Mule アプリケーションで動作します。

Flow Reference コンポーネント (推奨) と同様に、​lookup​ 関数を使用すると、アプリケーション内で別のフローを実行し、結果のペイロードを取得できます。これは、フローの名前と入力ペイロードをパラメーターとして使用します。たとえば、​lookup("anotherFlow", payload)​ は、​anotherFlow​ という名前のフローを実行します。

この関数は、現在の属性、変数、エラーを使用して、指定されたフローを実行しますが、属性または変数を含まないペイロードを渡すのみです。同様に、コールされたフローはそのペイロードを返すのみです。

lookup​ 関数では、サブフローのコールはサポートされません。

DataWeave のような関数型言語では、​lookup​ 関数の呼び出しに副作用が​ない​ことが期待されることを常に覚えておくことが重要です。このため、DataWeave エンジン内部の動作により、​lookup​ 関数が他の ​lookup​ 関数と並行して呼び出されたり、一切呼び出されなかったりすることがあります。

Flow Ref (​flow-ref​) コンポーネントを使用してフローを呼び出して、​target​ 属性を使用してフローの結果を ​var​ に配置し、その ​var​ を DataWeave スクリプト内から参照することをお勧めします。

パラメーター

名前 説明

flowName

対象フローを識別する文字列。

payload

対象フローに送信するペイロード。任意 (​Any​) 型を使用できます。

timeoutMillis

省略可能。対象フローの実行のタイムアウト (ミリ秒)。実行しているスレッドが ​CPU_LIGHT​ または ​CPU_INTENSIVE​ の場合、デフォルトの ​2000​ ミリ秒 (2 秒) に設定され、他のスレッドから実行している場合は 1 分に設定されます。lookup の実行に、指定された ​timeoutMillis​ 値よりも長い時間がかかっている場合、エラーが発生します。

次の例は、2 つのフローの XML を示しています。​flow1​ の ​lookup​ 関数は ​flow2​ を実行し、オブジェクト ​{test:'hello '}​ をそのペイロードとして ​flow2​ に渡します。次に、​flow2​ の Set Payload コンポーネント (​<set-payload/>​) は ​{test:'hello '}​ の値を文字列 ​world​ と連結し、​hello world​ を出力して記録します。

ソース

<flow name="flow1">
  <http:listener doc:name="Listener" config-ref="HTTP_Listener_config"
    path="/source"/>
  <ee:transform doc:name="Transform Message" >
    <ee:message >
      <ee:set-payload ><![CDATA[%dw 2.0
output application/json
---
Mule::lookup('flow2', {test:'hello '})]]></ee:set-payload>
    </ee:message>
  </ee:transform>
</flow>
<flow name="flow2" >
  <set-payload value='#[payload.test ++ "world"]' doc:name="Set Payload" />
  <logger level="INFO" doc:name="Logger" message='#[payload]'/>
</flow>