Dynamic Evaluate コンポーネント

Mule 4.1 の標準サポートは 2020 年 11 月 2 日に終了しました。このバージョンの Mule は、拡張サポートが終了する 2022 年 11 月 2 日にその すべてのサポート​が終了しました。

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

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

Dynamic Evaluate コンポーネントは、式を評価して DataWeave スクリプトを選択し、新しいスクリプトを実行して結果を生成します。この動作により、​Transform Message コンポーネント​でハードコード化する代わりに、動的にスクリプトを選択できます。

スクリプトには、​message​、​payload​、​vars​、​attributes​ などの通常の​コンテキスト変数​を使用できますが、キー - 値ペアのセットを指定することによってカスタム変数を追加することもできます。

動的評価の設定

項目 説明

DataWeave 式

Mule が実行する DataWeave スクリプトを選択する式を指定します。

expression="#[vars.generateOrderScript]"

パラメータ

DataWeave 式

DataWeave スクリプトが評価するパラメータとして設定されるキー-値ペアを指定します。

#[{joiner: ' and ', id: payload.user.id}]

XML 設定の例

次の例では、​userId​ クエリパラメータを使用してデータベースからスクリプトを選択し、そのスクリプトを ​userScript​ 変数に保存します。​dynamic-evaluate​ コンポーネントは、​userScript​ 変数にアクセスし、指令された (​attributes.queryParams.userName​ の値を含む) パラメータ ​name​ を使用してスクリプトを呼び出します。

<flow name="dynamic-evaluate-example-flow">
  <http:listener config-ref="HTTP_Listener_Configuration" path="/"/>
  <!-- This SQL query uses queryParams.userId to dynamically select a DataWeave script stored in a Database,
  and then assign this script to target variable userScript-->
  <db:select config-ref="dbConfig" target="userScript">
    <db:sql>#["SELECT script FROM SCRIPTS WHERE ID = $(attributes.queryParams.userId)"]</db:sql>
  </db:select>
  <!-- The dynamic evaluate component executes the script stored in vars.userScript-->
  <ee:dynamic-evaluate expression="#[vars.userScript]">
    <!-- This line sets a parameter called 'name', so the expression in the Dynamic Evaluate component can use it -->
    <ee:parameters>#[{name: attributes.queryParams.userName}]</ee:parameters>
  </ee:dynamic-evaluate>
</flow>

次のスクリプトが例のデータベースのエントリ ​lsalander​ と ​mblomkvist​ にそれぞれ保存されているとします。

例: lsalander スクリプト
output application/json
---
{
  message: "Order " ++ attributes.queryParams.orderId ++ " has been received from " ++ name,
  items: payload.items
}
例: mblomkvist スクリプト
output application/x-www-form-urlencoded
---
{
  message: "Order " ++ attributes.queryParams.orderId ++ " has been received from " ++ name,
  items: payload.items
}

アプリケーション動作の例

このサンプル Mule アプリケーションが要求で ​lsalander​ を ​queryParams.userId​ として受け取ると、Mule は対応するスクリプトを実行して JSON 応答を返します。アプリケーションが ​mblomkvist​ を ​queryParams.userId​ 値として受け取った場合、Mule は別のスクリプトを実行して ​x-www-form-urlencoded​ 応答を返します。

この例は、ユーザに基づいて応答種別をパラメータ化でき、さらに各ユーザのニーズに合わせて応答全体をパラメータ化できることを示しています。