Parse Template (<parse-template/>)

テンプレートを処理して結果を取得します。

テンプレートには、Mule が評価して結果に置き換える DataWeave 式が埋め込まれたテキストが含まれます。

外部ファイル参照を使用してテンプレートを設定するか、コンポーネント設定にテンプレートを埋め込みます。

コンポーネント XML

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

<parse-template
  doc:name="Parse template"
  doc:id="fppwuw"
  location="template.html" />
<parse-template/>​ Attributes 説明

doc:name

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

doc:id

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

location

テンプレートファイルの場所。Mule は、メッセージのプロパティまたは変数から抽出した値をこのファイルに挿入します。

content

テンプレートを表す文字列であり、このテンプレートでは埋め込まれた式が評価され、その結果に置き換えられます。

target

Parse Template が実行された後に ​targetValue​ で定義された式の結果が保存される変数の名前。詳細は、対象変数を使用したデータの強化を参照してください。

targetValue

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

この例では、Parse Template を使用してデータを HTML に動的に読み込みます。

例: データベースクエリの結果の動的処理

この例では、データベースから従業員データを HTML テンプレートに読み込む Mule アプリケーションで Parse Template を使用します。フローは、テンプレートで構築された出力をコール元に返します。

Unresolved include directive in modules/ROOT/pages/_partials/mule-components/4.4/component-parse-template.adoc - include::mule-runtime::example$parse-template-reference.xml[]

テンプレートコンテンツ

テンプレートでは、名前、部門、役職、開始日、および従業員種別の各値を含む項目を入力ペイロードから選択します。

Unresolved include directive in modules/ROOT/pages/_partials/mule-components/4.4/component-parse-template.adoc - include::mule-runtime::example$responseHtml.template[]

Parse Template への入力

http://localhost:8081/getEmployee?id=1234​ など、従業員の ID を識別するクエリパラメーターを含む URI でフローを開始し、Select 操作で次の入力を Parse Template に返すとします。

{
  "first_name": "Melba",
  "last_name": "Roy Mouton",
  "department": "Computers",
  "job_title": "Assistant Chief of Research Programs",
  "start_date": "01/01/2021",
  "employee_type": "mathematician"
}

テンプレートの出力

この​​では、テンプレートで構築された出力が返されます。出力は、選択された従業員データを含む HTML です。

<html>
  <body>
    <table>
      <thead>
        <tr>
          <th>First Name</th>
          <th>Last Name</th>
          <th>Department</th>
          <th>Job Title</th>
          <th>Start Date</th>
          <th>Employee Type</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td>"Melba"</td>
          <td>"Roy Mouton"</td>
          <td>"Computers"</td>
          <td>"Assistant Chief of Research Programs"</td>
          <td>"01/01/2021"</td>
          <td>"mathematician"</td>
        </tr>
      </tbody>
    </table>
  </body>
</html>

HTML 行でのデータの動的な生成

この例では、オブジェクトの配列として表される従業員レコードで Parse Template を使用します。

Unresolved include directive in modules/ROOT/pages/_partials/mule-components/4.4/component-parse-template.adoc - include::mule-runtime::example$parse-template-reference2.xml[]

テンプレートコンテンツ

次のテンプレートでは、DataWeave スクリプトを使用して入力配列を反復処理し、配列内のオブジェクトごとに HTML 行を作成します。

Unresolved include directive in modules/ROOT/pages/_partials/mule-components/4.4/component-parse-template.adoc - include::mule-runtime::example$responseHtmlMap.template[]

Parse Template への入力

Parse Template コンポーネントは Set Payload から次のペイロードを受け取るとします。

{
	Employee: [

			{
				"first_name" : "Melba",
				"last_name" : "Roy Mouton",
				"department" : "Computers",
				"job_title" : "Assistant Chief of Research Programs",
				"start_date" : "01/01/2021",
				"employee_type" : "mathematician"

			},
			{
				"first_name" : "Annie",
				"last_name" : "Easley",
				"department" : "Software Development",
				"job_title" : "Technical Lead",
				"start_date" : "06/02/2020",
				"employee_type" : "Rocket Scientist"

			}

	]
}

テンプレートの出力

この​​では、テンプレートで構築された出力が返されます。出力は、動的に作成された行と、配列内のオブジェクトのデータを含む HTML です。

<html>
  <body>
    <table>
      <thead>
        <tr>
          <th>First Name</th>
          <th>Last Name</th>
          <th>Department</th>
          <th>Job Title</th>
          <th>Start Date</th>
          <th>Employee Type</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td><span>Melba</span></td>
          <td><span>Roy Mouton</span></td>
          <td><span>Computers</span></td>
          <td><span>Assistant Chief of Research Programs</span></td>
          <td><span>01/01/2021</span></td>
          <td><span>mathematician</span></td>
        </tr>
        <tr>
          <td><span>Annie</span></td>
          <td><span>Easley</span></td>
          <td><span>Software Development</span></td>
          <td><span>Technical Lead</span></td>
          <td><span>06/02/2020</span></td>
          <td><span>Rocket Scientist</span></td>
        </tr>
      </tbody>
    </table>
  </body>
</html>

特殊文字

Parse Template は、テンプレート内での式の使用や、これらの式でのリテラルの使用をサポートします。テンプレートは、​\#[​ といったシーケンスや引用符など、一部の特殊文字を認識します。これらの文字をエスケープすることで通常の文字として扱うことができます。

  • #[an-expression]​:

    テンプレート内では ​#[]​ を使用して式を指定します。たとえば、テンプレートの HTML 要素内で ​<td>#[upper("mulesoft")]</td>​ という式を指定すると ​<td>MULESOFT</td>​ に解決されます。空白の式 (​#[]​) はエラーとなりますが、​#['']​ や ​#[""]​ などの空白文字列は有効な式です。

  • サブ式:

    引用符で囲まれたサブ式を解決するには、サブ式を別の ​#[]​ で囲みます。たとえば、次のテンプレートスニペットでは、4 つの要素で同じサブ式 (​upper("world")​) が引用符の内部または外部に指定されています。最初の 2 つは同じ結果を返します。最後の 2 つは、サブ式が引用符内に指定されていますが、別の ​#[]​ で囲まれていないため、​upper("world")​ を処理せずにそのまま返します。

    Parse Template スニペット:
    <td>#['hello #[upper("world")]']</td>
    <td>#['hello ' ++ upper("world")]</td>
    <td>#['hello upper("world")']</td>
    <td>#['hello ++ upper("world")']</td>
    出力される値:
    <td>hello WORLD</td>
    <td>hello WORLD</td>
    <td>hello upper("world")</td>
    <td>hello ++ upper("world")</td>
  • エスケープ文字 (​\​):

    Parse Template は、文字シーケンスの ​#[​ で式の開始を示します。この文字シーケンスを式として解釈せずにリテラル文字として扱うには、​\​ でエスケープします。たとえば、​<td>#[</td>​ は ​<td>#[</td>​ を返します。

    また、式の文字列に含まれる特殊文字を通常の文字として扱いたい場合があります。式に含まれる文字列内の特殊文字をエスケープするには、特殊文字の前に ​\​ を付けます。特殊文字の例としては、​#[​ のシーケンス、引用符 (​'​ または ​"​)、アポストロフィ (​'​)、​$​ などがあります。​\#​ や ​[​ は、文字列内でこれらの 2 文字が (​\#​ が ​[​ の前に来て) 連続していない限り、エスケープする必要はありません。

    Parse Template スニペット:
    <td>\#[</td>
    <td>#['abcd\#[-1234' ++ now() as String ++ '.log']</td>
    <td>'abc'def'</td>
    <td>#['abc\'def']</td>
    <td>"xyz"xyz"</td>
    <td>#["xyz\"xyz"]</td>
    <td>#["abc\$DEF\#ghi\[JKL]"]</td>
    出力される値:
    <td>#[</td>
    <td>abcd#[-12342020-07-06T17:20:10.683-07:00.log</td>
    <td>'abc'def'</td>
    <td>abc'def</td>
    <td>"xyz"xyz"</td>
    <td>xyz"xyz</td>
    <td>abc$DEF#ghi[JKL]</td>

    詳細は、​「特殊文字のエスケープ」​を参照してください。