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

このドキュメントのサンプルと例は、JEE上のAEM Forms環境に限られています。

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

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

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

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

スクリプトフラグメント​には、日付パーサーや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 Client APIオブジェクトを作成します。
  3. URI値を指定します。
  4. フォームをレンダリングします。
  5. フォームデータストリームをクライアントWebブラウザーに書き込みます。

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

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

Forms Client APIオブジェクトの作成

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

URI値の指定

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

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

フラグメントに基づいてフォームをレンダリングする場合は、フォーム自体のみを参照し、フラグメントは参照しないでください。 例えば、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

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

Forms API(Java)を使用して、フラグメントに基づいてフォームをレンダリングします。

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

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

  2. Forms Client 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オブジェクトのgetOutputContentメソッドを呼び出して、com.adobe.idp.Documentオブジェクトを作成します。
    • getContentTypeメソッドを呼び出して、com.adobe.idp.Documentオブジェクトのコンテンツタイプを取得します。
    • setContentTypeメソッドを呼び出し、com.adobe.idp.Documentオブジェクトのコンテンツタイプを渡すことで、javax.servlet.http.HttpServletResponseオブジェクトのコンテンツタイプを設定します。
    • 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を使用してフラグメントに基づいてフォームをレンダリングする

Forms API(Webサービス)を使用して、フラグメントに基づいてフォームをレンダリングします。

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

    • FormsサービスのWSDLを使用するJavaプロキシクラスを作成します。
    • Javaプロキシクラスをクラスパスに含めます。
  2. Forms Client 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オブジェクトのコンテンツタイプを取得します。
    • setContentTypeメソッドを呼び出し、BLOBオブジェクトのコンテンツタイプを渡すことで、javax.servlet.http.HttpServletResponseオブジェクトのコンテンツタイプを設定します。
    • javax.servlet.http.HttpServletResponseオブジェクトのgetOutputStreamメソッドを呼び出して、フォームデータストリームをクライアントWebブラウザーに書き込むためのjavax.servlet.ServletOutputStreamオブジェクトを作成します。
    • バイト配列を作成し、BLOBオブジェクトのgetBinaryDataメソッドを呼び出してそれを設定します。 このタスクは、FormsResultオブジェクトの内容をバイト配列に割り当てます。
    • javax.servlet.http.HttpServletResponseオブジェクトのwriteメソッドを呼び出して、フォームデータストリームをクライアントWebブラウザーに送信します。 writeメソッドにバイト配列を渡します。

関連トピック

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

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

このページ