Dynamic Evaluate (<ee:dynamic-evaluate/>)

式を評価して DataWeave スクリプトを選択し、新しいスクリプトを実行して結果を生成します。

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

コンポーネント XML

このコンポーネントは、次の XML 構造をサポートします。

<ee:dynamic-evaluate
  expression=""
  doc:name="Dynamic evaluate"
  doc:id="ojfqoz">
  <ee:parameters>#[]</ee:parameters>
</ee:dynamic-evaluate>
<ee:dynamic-evaluate/>​ Attributes 説明

doc:name

コンポーネントの編集可能な名前。

doc:id

コンポーネントの自動生成された識別子。

expression

Mule で実行される DataWeave スクリプトを選択する式 (例: expression="#[vars.generateOrderScript]"​)。

<ee:parameters/> Attributes 説明

なし

DataWeave スクリプトが評価できるパラメーターとして設定されるキー-値ペアを指定します (例: <ee:parameters>#[{name: attributes.queryParams.userName}]</ee:parameters>​)。

次の例では、​userId​ クエリパラメーターを使用してデータベースからスクリプトを選択し、そのスクリプトを ​userScript​ 変数に保存します。Dynamic Evaluate (​<ee: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 は ​lsalander​ スクリプトを実行して JSON 応答を返します。アプリケーションが ​mblomkvist​ を ​queryParams.userId​ 値として受け取った場合、Mule は別のスクリプトを実行して ​x-www-form-urlencoded​ 応答を返します。

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

関連情報