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>

Dynamic Evaluate (​<ee:dynamic-evaluate/>​) 属性は UI および XML で設定できます。

属性名 属性 XML 説明

Dynamic evaluate (動的評価)​ (デフォルト)

doc:name

キャンバスに表示されるコンポーネントの編集可能な名前。

なし

doc:id

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

Expression (式)

expression

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

Additional Bindings (追加のバインド)

parameters

なし

Target Variable (対象変数)

target

メッセージデータを格納する変数の名前。数字、文字、アンダースコアのみを使用できます。たとえば、名前にハイフンは使用できません。 Mule ドキュメントの Enrich Data with Target Variablesを参照してください。

Target Value (対象値)

targetValue

対象変数に格納するデータの値。このデフォルト値はメッセージペイロード (payload) です。この項目は、変数が受け入れるすべての値を受け入れます。サポートされているデータ型、DataWeave の式、​payload​、​attributes​、​message​ キーワードが該当しますが、​vars​ キーワードは対象外です。 Mule ドキュメントの Enrich Data with Target Variablesを参照してください。

<ee:parameters/>​ は Dynamic Evaluate の子要素です。

子要素 説明

<ee:parameters/>

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​ 応答を返します。

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

関連情報