定義に基づいた動的なマップ

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

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

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

定義入力に応じて動的に実行内容を変更できる変換を作成できます。この DataWeave の例では、ペイロード入力と ​mapping​ という名前の変数の両方を取得します。この変数は、各項目の名前の変更方法とそれぞれで使用するデフォルト値を指定します。 開始する前に、DataWeave バージョン 2 (​%dw 2.0​) は Mule 4 アプリケーションを対象とすることに注意してください。Mule 3 アプリケーションの場合、Mule 3.9 ドキュメントセットの DataWeave 1.0 (​%dw 1.0​) の例を参照してください。他の Mule バージョンの場合は、目次の Mule Runtime バージョンセレクターを使用できます。

この例では、以下を使用します。

  • 入力配列のすべての要素を調べる ​map​ 関数。および、各要素の各項目を調べる 2 番目の ​map​ 関数。

  • mapping​ 変数で指定された変更を適用するカスタム関数。

  • デフォルト値を設定する ​default​。これは、​mapping​ 変数から取得します。

DataWeave
%dw 2.0
output application/json
var applyMapping = (input, mappingsDef) -> (
   mappingsDef map (def) -> {
    (def.target) : input[def.source] default def."default"
  }
)
---
payload.sfdc_users.*sfdc_user map (user) -> (
        applyMapping(user, vars.mappings)
)
入力ペイロード
<sfdc_users>
    <sfdc_user>
      <sfdc_name>Mariano</sfdc_name>
      <sfdc_last_name>Achaval</sfdc_last_name>
      <sfdc_employee>true</sfdc_employee>
    </sfdc_user>
    <sfdc_user>
      <sfdc_name>Julian</sfdc_name>
      <sfdc_last_name>Esevich</sfdc_last_name>
      <sfdc_employee>true</sfdc_employee>
    </sfdc_user>
    <sfdc_user>
      <sfdc_name>Leandro</sfdc_name>
      <sfdc_last_name>Shokida</sfdc_last_name>
    </sfdc_user>
</sfdc_users>
入力変数 ​mappings
[
  {
    "source": "sfdc_name",
    "target": "name",
    "default": "---"
  },
  {
    "source": "sfdc_last_name",
    "target": "lastName",
    "default": "---"
  },
  {
    "source": "sfdc_employee",
    "target": "user",
    "default": true
  }
]
出力 JSON
[
  [
    {"name": "Mariano"},
    {"lastName": "Achaval"},
    {"user": "true"}
  ],
  [
    {"name": "Julian"},
    {"lastName": "Esevich"},
    {"user": "true"}
  ],
  [
    {"name": "Leandro"},
    {"lastName": "Shokida"},
    {"user": true}
  ]
]