フラグメントに基づくFormsのレンダリング

フラグメントに基づくFormsのレンダリング

Formsサービスは、Designerを使用して作成したフラグメントに基づくフォームをレンダリングできます。 フラグメント​はフォームの再利用可能な部分で、複数のフォームデザインに挿入できる独立したXDPファイルとして保存されます。 例えば、フラグメントには住所ブロックや法律文を含めることができます。

フラグメントの使用により、大量のフォームの作成とメンテナンスを簡単に、短時間で実行できます。新しいフォームを作成する場合は、必要なフラグメントへの参照を挿入すると、そのフラグメントがフォームに表示されます。 フラグメント参照には、物理 XDP ファイルを指すサブフォームが含まれます。フラグメントを基にしたフォームデザインの作成について詳しくは、Formsデザイナを参照してください

フラグメントには、選択サブフォームセットに含めるサブフォームを複数含めることができます。 選択サブフォームセットは、データ接続からのデータのフローに基づいてサブフォームの表示を制御します。 条件ステートメントを使用して、配信するフォームに表示するサブフォームをそのセットから指定します。例えば、セット内の各サブフォームには特定の地理的な場所に関する情報を含めることができ、表示されるサブフォームはユーザーの場所に基づいて決定できます。

スクリプトフラグメント​には、日付パーサーやWebサービス呼び出しなど、特定のオブジェクトとは別に保存されている再利用可能なJavaScript関数や値が含まれています。 このようなフラグメントには、階層パレットに変数の子として表示される単独のスクリプトオブジェクトがあります。フラグメントは、他のオブジェクトのプロパティとなっているスクリプトからは作成できません。このようなスクリプトとして、検証、計算、初期化などのイベントスクリプトがあります。

フラグメントを使用する利点は次のとおりです。

  • コンテンツの再利用:フラグメントを使用すると、複数のフォームデザインでコンテンツを再利用できます。複数のフォームで同じコンテンツの一部を使用する必要がある場合は、コンテンツをコピーまたは再作成するよりも、フラグメントを使用する方が高速で簡単です。 フラグメントを使用し、それをフォームで参照することで、フォームデザインの中で頻繁に使用する部分を一貫性のあるコンテンツと外観ですべてのフォームに表示できます。
  • グローバルな更新:フラグメントを使用すると、1つのファイルで複数のフォームに1回だけグローバルな変更を行うことができます。フラグメント内のコンテンツ、スクリプトオブジェクト、データ連結、レイアウトまたはスタイルを変更すると、そのフラグメントを参照するすべてのXDPフォームに変更が反映されます。
  • 例えば、多くのフォームで共通する要素は、国のコンボボックスリストオブジェクトを含む住所ブロックなどです。 コンボボックスリストオブジェクトの値を更新する必要がある場合は、多数のフォームを開いて変更する必要があります。 フラグメントに住所ブロックを含める場合は、フラグメントファイルを1つ開くだけで変更できます。
  • PDFフォーム内のフラグメントを更新するには、Designerでフォームを再度保存する必要があります。
  • 共有フォームの作成:フラグメントを使用すると、複数のリソースでフォームの作成を共有できます。スクリプトまたは Designer のその他の高度な機能に精通しているフォーム開発者は、スクリプトまたは動的プロパティを活用するフラグメントを作成、共有することができます。フォーム作成者がこれらのフラグメントを使用してフォームデザインをレイアウトすれば、複数の担当者が作成した複数のフォームの各部分で一貫性のある外観と機能を実現できます。

フラグメントを使用して組み立てたフォームデザインのアセンブリ

複数のフラグメントを基にしてFormsサービスに渡すフォームデザインをアセンブルできます。 複数のフラグメントをアセンブリするには、Assemblerサービスを使用します。 Assembleサービスを使用して、別のFormsサービス(Outputサービス)で使用されるフォームデザインを作成する例については、「フラグメントを使用したPDFドキュメントの作成」を参照してください。 Outputサービスを使用する代わりに、Formsサービスを使用して同じワークフローを実行できます。

Assemblerサービスを使用する場合、フラグメントを使用してアセンブルされたフォームデザインを渡します。 作成されたフォームデザインは、他のフラグメントを参照していません。 これに対し、このトピックでは、他のフラグメントを参照するフォームデザインをFormsサービスに渡す方法について説明します。 ただし、フォームデザインはAssemblerでアセンブルされていません。 Designerで作成されました。

メモ

Formsサービスの詳細については、『AEM Formsのサービスリファレンス』を参照してください。

メモ

フラグメントに基づいてフォームをレンダリングするWebベースのアプリケーションの作成について詳しくは、FormsをレンダリングするWeb アプリケーションの作成を参照してください。

手順の概要

フラグメントに基づいてフォームをレンダリングするには、次のタスクを実行します。

  1. プロジェクトファイルを含めます。
  2. FormsクライアントAPIオブジェクトを作成します。
  3. URI値を指定します。
  4. フォームをレンダリングします。
  5. フォームデータストリームをクライアントのWebブラウザーに書き込みます。

プロジェクトファイルを含める

必要なファイルを開発プロジェクトに含めます。 Javaを使用してクライアントアプリケーションを作成する場合は、必要なJARファイルを含めます。 Webサービスを使用している場合は、プロキシファイルを必ず含めてください。

FormsクライアントAPIオブジェクトの作成

プログラムでFormsサービスのクライアントAPI操作を実行する前に、Formsサービスクライアントを作成する必要があります。

URI値の指定

フラグメントに基づいてフォームを正しくレンダリングするには、Formsサービスがフォームと、フォームデザインが参照するフラグメント(XDPファイル)の両方を見つけられることを確認する必要があります。 例えば、フォームの名前がPO.xdpで、このフォームでFooterUS.xdpとFooterCanada.xdpの2つのフラグメントを使用しているとします。 この場合、Formsサービスは3つのXDPファイルをすべて検索できる必要があります。

フォームとそのフラグメントを整理するには、フォームを1つの場所に配置し、別の場所に配置します。または、すべてのXDPファイルを同じ場所に配置します。 この節の目的上、すべてのXDPファイルがAEM Formsリポジトリにあると仮定します。 XDPファイルのAEM Formsリポジトリへの配置について詳しくは、「リソースの書き込み」を参照してください。

フラグメントに基づいてフォームをレンダリングする場合は、フォーム自体のみを参照し、フラグメントは参照しません。 例えば、FooterUS.xdpやFooterCanada.xdpではなくPO.xdpを参照する必要があります。 フラグメントは、Formsサービスが見つけられる場所に配置してください。

フォームのレンダリング

フラグメントに基づくフォームは、フラグメント化されていないフォームと同じ方法でレンダリングできます。 つまり、フォームをPDF、HTML、またはフォームガイド(非推奨)としてレンダリングできます。 この節の例では、フラグメントに基づくフォームをインタラクティブPDFフォームとしてレンダリングします。 (インタラクティブPDF formsのレンダリングを参照)。

フォームデータストリームをクライアントのWebブラウザーに書き込みます

Formsサービスはフォームをレンダリングすると、フォームデータストリームを返します。このストリームをクライアントのWebブラウザーに書き込む必要があります。 クライアントのWebブラウザーに書き込まれると、フォームはユーザーに表示されます。

関連トピック

Java APIを使用したフラグメントに基づくフォームのレンダリング

WebサービスAPIを使用してフラグメントに基づいてフォームをレンダリングする

AEM Forms Java ライブラリファイルを含める

接続プロパティの設定

FormsサービスAPIクイック開始

インタラクティブPDF formsのレンダリング

FormsをレンダリングするWeb アプリケーションの作成

Java APIを使用してフラグメントに基づいてフォームをレンダリングする

FormsAPI(Java)を使用してフラグメントに基づいてフォームをレンダリングする:

  1. プロジェクトファイルを含める

    Javaプロジェクトのクラスパスに、adobe-forms-client.jarなどのクライアントJARファイルを含めます。

  2. FormsクライアントAPIオブジェクトの作成

    • 接続プロパティを含む ServiceClientFactory オブジェクトを作成します。
    • コンストラクターを使用し、FormsServiceClientオブジェクトを渡して、ServiceClientFactoryオブジェクトを作成します。
  3. URI値の指定

    • コンストラクターを使用して、URI値を格納するURLSpecオブジェクトを作成します。
    • URLSpecオブジェクトのsetApplicationWebRootメソッドを呼び出し、アプリケーションのWebルートを表す文字列値を渡します。
    • URLSpecオブジェクトのsetContentRootURIメソッドを呼び出し、コンテンツルートURI値を指定する文字列値を渡します。 フォームデザインとフラグメントがコンテンツルートURI内にあることを確認します。 そうでない場合、Formsサービスは例外をスローします。 リポジトリを参照するには、repository://を指定します。
    • URLSpecオブジェクトのsetTargetURLメソッドを呼び出し、フォームデータのポスト先のターゲットURL値を指定する文字列値を渡します。 フォームデザインでターゲットURLを定義する場合は、空の文字列を渡すことができます。 演算を実行するために、フォームの送信先URLを指定することもできます。
  4. フォームのレンダリング

    FormsServiceClientオブジェクトのrenderPDFFormメソッドを呼び出し、次の値を渡します。

    • ファイル名拡張子を含むフォームデザイン名を指定するstring値。 Formsアプリケーションの一部であるフォームデザインを参照する場合は、Applications/FormsApplication/1.0/FormsFolder/Loan.xdpなど、完全なパスを必ず指定してください。
    • フォームとマージするデータを含むcom.adobe.idp.Documentオブジェクト。 データをマージしない場合は、空のcom.adobe.idp.Documentオブジェクトを渡します。
    • 実行時オプションを格納するPDFFormRenderSpecオブジェクト。
    • フラグメントに基づいてフォームをレンダリングするためにFormsサービスで必要なURI値を含むURLSpecオブジェクトです。
    • 添付ファイルを格納するjava.util.HashMapオブジェクト。 これはオプションのパラメーターです。フォームにファイルを添付しない場合は、nullを指定できます。

    renderPDFFormメソッドは、クライアントのWebブラウザーに書き込む必要があるフォームデータストリームを含むFormsResultオブジェクトを返します。

  5. フォームデータストリームをクライアントのWebブラウザーに書き込みます

    • FormsResultオブジェクト's getOutputContentメソッドを呼び出して、com.adobe.idp.Documentオブジェクトを作成します。
    • getContentTypeメソッドを呼び出して、com.adobe.idp.Documentオブジェクトのコンテンツタイプを取得します。
    • javax.servlet.http.HttpServletResponseオブジェクトのコンテンツタイプを設定するには、setContentTypeメソッドを呼び出し、com.adobe.idp.Documentオブジェクトのコンテンツタイプを渡します。
    • javax.servlet.http.HttpServletResponseオブジェクトのgetOutputStreamメソッドを呼び出して、フォームデータストリームをクライアントのWebブラウザーに書き込むために使用するjavax.servlet.ServletOutputStreamオブジェクトを作成します。
    • com.adobe.idp.DocumentオブジェクトのgetInputStreamメソッドを呼び出して、java.io.InputStreamオブジェクトを作成します。
    • InputStreamオブジェクトのreadメソッドを呼び出し、バイト配列を引数として渡すことで、バイト配列を作成し、フォームデータストリームを入力します。
    • javax.servlet.ServletOutputStreamオブジェクトのwriteメソッドを呼び出して、フォームデータストリームをクライアントのWebブラウザーに送信します。 バイト配列をwriteメソッドに渡します。

関連トピック

断片に基づくFormsのレンダリング

クイック開始(SOAPモード):Java APIを使用したフラグメントに基づくフォームのレンダリング

AEM Forms Java ライブラリファイルを含める

接続プロパティの設定

WebサービスAPIを使用してフラグメントに基づいてフォームをレンダリングする

FormsAPI(Webサービス)を使用してフラグメントに基づいてフォームをレンダリングするには:

  1. プロジェクトファイルを含める

    • FormsサービスのWSDLを使用するJavaプロキシクラスを作成します。
    • クラスパスにJavaプロキシクラスを含めます。
  2. FormsクライアントAPIオブジェクトの作成

    FormsServiceオブジェクトを作成し、認証値を設定します。

  3. URI値の指定

    • コンストラクターを使用して、URI値を格納するURLSpecオブジェクトを作成します。
    • URLSpecオブジェクトのsetApplicationWebRootメソッドを呼び出し、アプリケーションのWebルートを表す文字列値を渡します。
    • URLSpecオブジェクトのsetContentRootURIメソッドを呼び出し、コンテンツルートURI値を指定する文字列値を渡します。 フォームデザインがコンテンツルートURI内にあることを確認します。 そうでない場合、Formsサービスは例外をスローします。 リポジトリを参照するには、repository://を指定します。
    • URLSpecオブジェクトのsetTargetURLメソッドを呼び出し、フォームデータのポスト先のターゲットURL値を指定する文字列値を渡します。 フォームデザインでターゲットURLを定義する場合は、空の文字列を渡すことができます。 演算を実行するために、フォームの送信先URLを指定することもできます。
  4. フォームのレンダリング

    FormsServiceオブジェクトのrenderPDFFormメソッドを呼び出し、次の値を渡します。

    • ファイル名拡張子を含むフォームデザイン名を指定するstring値。 Formsアプリケーションの一部であるフォームデザインを参照する場合は、Applications/FormsApplication/1.0/FormsFolder/Loan.xdpなど、完全なパスを必ず指定してください。
    • フォームとマージするデータを含むBLOBオブジェクト。 データを結合したくない場合は、nullを渡します。
    • 実行時オプションを格納するPDFFormRenderSpecオブジェクト。 タグ付きPDFオプションは、入力ドキュメントがPDFドキュメントの場合は設定できません。 入力ファイルがXDPファイルの場合は、タグ付きPDFオプションを設定できます。
    • Formsサービスに必要なURI値を含むURLSpecオブジェクト。
    • 添付ファイルを格納するjava.util.HashMapオブジェクト。 これはオプションのパラメーターです。フォームにファイルを添付しない場合は、nullを指定できます。
    • メソッドによって入力される空のcom.adobe.idp.services.holders.BLOBHolderオブジェクト。 このパラメーターは、レンダリングされたフォームを保存するために使用します。
    • メソッドによって入力される空のjavax.xml.rpc.holders.LongHolderオブジェクト。 この引数は、フォームのページ数を格納します。
    • メソッドによって入力される空のjavax.xml.rpc.holders.StringHolderオブジェクト。 この引数はロケールの値を格納します。
    • この操作の結果を含む空のcom.adobe.idp.services.holders.FormsResultHolderオブジェクトです。

    renderPDFFormメソッドは、最後の引数値として渡されるcom.adobe.idp.services.holders.FormsResultHolderオブジェクトに、クライアントWebブラウザーに書き込む必要のあるフォームデータストリームを入力します。

  5. フォームデータストリームをクライアントのWebブラウザーに書き込みます

    • com.adobe.idp.services.holders.FormsResultHolderオブジェクトのvalueデータメンバの値を取得して、FormResultオブジェクトを作成します。
    • FormsResultオブジェクトのgetOutputContentメソッドを呼び出して、フォームデータを含むBLOBオブジェクトを作成します。
    • getContentTypeメソッドを呼び出して、BLOBオブジェクトのコンテンツタイプを取得します。
    • javax.servlet.http.HttpServletResponseオブジェクトのコンテンツタイプを設定するには、setContentTypeメソッドを呼び出し、BLOBオブジェクトのコンテンツタイプを渡します。
    • javax.servlet.http.HttpServletResponseオブジェクトのgetOutputStreamメソッドを呼び出して、フォームデータストリームをクライアントのWebブラウザーに書き込むために使用するjavax.servlet.ServletOutputStreamオブジェクトを作成します。
    • バイト配列を作成し、BLOBオブジェクトのgetBinaryDataメソッドを呼び出して値を設定します。 このタスクは、FormsResultオブジェクトの内容をバイト配列に割り当てます。
    • javax.servlet.http.HttpServletResponseオブジェクトのwriteメソッドを呼び出して、フォームデータストリームをクライアントのWebブラウザーに送信します。 バイト配列をwriteメソッドに渡します。

関連トピック

断片に基づくFormsのレンダリング

Base64エンコーディングを使用したAEM Formsの呼び出し

このページ

Adobe Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free
Adobe Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free
Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now
Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now