フラグメントに基づいたフォームのレンダリング rendering-forms-based-on-fragments
このドキュメントのサンプルと例は、JEE 環境の AEM Forms のみを対象としています。
フラグメントに基づいたフォームのレンダリング rendering-forms-based-on-fragments-inner
Forms サービスでは、 Designer を使用して作成したフラグメントに基づくフォームをレンダリングできます。 フラグメントとは、フォームの再利用可能な部分のことで、複数のフォームデザインに挿入できる個別の XDP ファイルとして保存されます。 例えば、フラグメントには住所ブロックや法律文を含めることができます。
フラグメントの使用により、大量のフォームの作成とメンテナンスを簡単に、短時間で実行できます。 フォームを作成するときに、必要なフラグメントへの参照を挿入すると、このフラグメントがフォームに表示されます。 フラグメント参照には、物理 XDP ファイルを指すサブフォームが含まれます。 フラグメントを基にしたフォームデザインの作成について詳しくは、Forms Designer を参照してください。
フラグメントには、選択サブフォームセットにラップされた複数のサブフォームを含めることができます。 選択サブフォームセットは、データ接続からのデータのフローに基づいてサブフォームの表示を制御します。 条件ステートメントを使用して、配信するフォームに表示するサブフォームをそのセットから指定します。 例えば、セットにあるサブフォームごとに特定の地理的な場所に関する情報を指定しておき、ユーザーの場所に基づいて、表示するサブフォームを決定できます。
スクリプトフラグメントには、日付パーサーや web サービス呼び出しなど、特定のオブジェクトとは独立して保存されている再利用可能な JavaScript 関数や値が含まれています。 このようなフラグメントには、階層パレットに変数の子として表示される単独のスクリプトオブジェクトがあります。 フラグメントは、他のオブジェクトのプロパティとなっているスクリプトからは作成できません。このようなスクリプトとして、検証、計算、初期化などのイベントスクリプトがあります。
フラグメントを使用する利点は次のとおりです。
- コンテンツの再利用:フラグメントを使用して、複数のフォームデザインでコンテンツを再利用できます。 複数のフォームで同じコンテンツの一部を使用する必要がある場合は、コンテンツをコピーまたは再作成するよりも、フラグメントを使用する方が速くて簡単です。 フラグメントを使用し、それをフォームで参照することで、フォームデザインの中で頻繁に使用する部分を一貫性のあるコンテンツと外観ですべてのフォームに表示できます。
- グローバルな更新:フラグメントを使用すれば、1 つのファイルを一度変更するだけで、複数のフォームをグローバルに変更できます。 フラグメントのコンテンツ、スクリプトオブジェクト、 データバインディング、レイアウトまたはスタイルを変更すると、そのフラグメントを参照しているすべての XDP フォームに変更が反映されます。
- 例えば、多くのフォームで共有される要素として、国名のドロップダウンリストオブジェクトを含んだ住所ブロックが考えられます。 このドロップダウンリストオブジェクトの値を更新するには、多数のフォームを開いて変更する必要があります。 フラグメントに住所ブロックを含めると、1 つのフラグメントファイルを開くだけで変更できます。
- PDF フォームでフラグメントを更新するには、Designer でそのフォームを再度保存します。
- 共有フォームの作成:フラグメントを使用して、複数のリソースでフォームの作成を共有できます。 スクリプトまたは Designer のその他の高度な機能に精通しているフォーム開発者は、スクリプトまたは動的プロパティを活用するフラグメントを作成、共有することができます。 フォームデザイナーがこれらのフラグメントを使用してフォームデザインをレイアウトすれば、複数の担当者が作成した複数のフォームの各部分で一貫性のある外観と機能を実現できます。
フラグメントを使用して作成されたフォームデザインの作成 assembling-a-form-design-assembled-using-fragments
Forms サービスに渡すフォームデザインを、複数のフラグメントに基づいて作成することができます。 複数のフラグメントを作成するには、アセンブラーサービスを使用します。 別の Forms サービス(Output サービス)で使用するフォームデザインを作成するための Assemble サービスの使用例については、フラグメントを使用した PDF ドキュメントの作成を参照してください。 Output サービスを使用する代わりに、Forms サービスを使用して同じワークフローを実行できます。
アセンブラーサービスを使用する場合、フラグメントを使用して作成されたフォームデザインを渡します。 作成されたフォームデザインは、他のフラグメントを参照しません。 これに対し、このトピックでは、他のフラグメントを参照するフォームデザインを Forms サービスに渡す方法について説明します。 ただし、このフォームデザインは Assembler によって作成されたものではありません。 Designer で作成されています。
手順の概要 summary-of-steps
フラグメントに基づいてフォームをレンダリングするには、次のタスクを実行します。
- プロジェクトファイルを含めます。
- Forms Client API オブジェクトを作成します。
- URI 値を指定します。
- フォームをレンダリングします。
- フォームデータストリームをクライアントの Web ブラウザーに書き込みます。
プロジェクトファイルを含める
必要なファイルを開発プロジェクトに含めます。 Java を使用してクライアントアプリケーションを作成する場合は、必要な JAR ファイルを含めます。 Web サービスを使用している場合は、プロキシファイルを必ず含めてください。
Forms Client API オブジェクトを作成
Forms Service Client API 操作をプログラムで実行する前に、Forms サービスクライアントを作成する必要があります。
URI 値の指定
フラグメントに基づいてフォームを正常にレンダリングするには、フォームと、フォームデザインが参照するフラグメント(XDP ファイル)の両方を、Forms サービスが特定できるようにする必要があります。 例えば、フォームの名前が 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 フォームのレンダリングを参照してください。
クライアント web ブラウザーへのフォームデータストリームの書き込み
Forms サービスがフォームをレンダリングすると、クライアントの web ブラウザーに書き込む必要があるフォームデータストリームが返されます。 クライアント Web ブラウザーに書き込まれると、フォームはユーザーに対して表示されます。
関連トピック
Java API を使用してフラグメントに基づいてフォームをレンダリング
Java API を使用してフラグメントに基づいてフォームをレンダリング render-forms-based-on-fragments-using-the-java-api
Forms API(Java)を使用して、フラグメントに基づいてフォームをレンダリングします。
-
プロジェクトファイルを含める
adobe-forms-client.jar などのクライアント JAR ファイルを Java プロジェクトのクラスパスに含めます。
-
Forms Client API オブジェクトの作成
- 接続プロパティを含む
ServiceClientFactoryオブジェクトを作成します。 - コンストラクターを使用して
ServiceClientFactoryオブジェクトを渡すことにより、FormsServiceClientオブジェクトを作成します。
- 接続プロパティを含む
-
URI 値を指定
- コンストラクターを使用して、URI 値を格納する
URLSpecオブジェクトを作成します。 URLSpecオブジェクトのsetApplicationWebRootメソッドを呼び出して、アプリケーションの web ルートを表す文字列値を渡します。URLSpecオブジェクトのsetContentRootURIメソッドを呼び出して、コンテンツルート URI 値を指定する文字列値を渡します。 フォームデザインとフラグメントがコンテンツルート URI に配置されていることを確認します。 そうでない場合、Forms サービスは例外をスローします。 リポジトリを参照するには、repository://を指定します。URLSpecオブジェクトのsetTargetURLメソッドを呼び出して、フォームデータの送信先となるターゲット URL 値を指定する文字列値を渡します。 フォームデザインでターゲット URL を定義する場合、空の文字列を渡すことができます。 また、計算を実行するためのフォームの送信先の URL を指定することもできます。
- コンストラクターを使用して、URI 値を格納する
-
フォームのレンダリング
FormsServiceClientオブジェクトのrenderPDFFormメソッドを呼び出して、次の値を渡します。- ファイル名拡張子を含んだフォームデザイン名を指定する文字列値。 Forms アプリケーションの一部であるフォームデザインを参照する場合は、必ず次のような完全なパスを指定します。
Applications/FormsApplication/1.0/FormsFolder/Loan.xdp - フォームに結合するデータを含む
com.adobe.idp.Documentオブジェクトです。 データを結合しない場合は、空のcom.adobe.idp.Documentオブジェクトを渡します。 - 実行時オプションを保存する
PDFFormRenderSpecオブジェクト。 URLSpecフラグメントに基づいてフォームをレンダリングするために Forms サービスで必要な URI 値を含むオブジェクト。- 添付ファイルを格納する
java.util.HashMapオブジェクト。 これはオプションのパラメーターであり、フォームにファイルを添付しない場合にnullを指定できます。
renderPDFFormメソッドは、クライアントの Web ブラウザーに書き込む必要があるフォームデータストリームを含むFormsResultオブジェクトを返します。 - ファイル名拡張子を含んだフォームデザイン名を指定する文字列値。 Forms アプリケーションの一部であるフォームデザインを参照する場合は、必ず次のような完全なパスを指定します。
-
フォームデータストリームをクライアント web ブラウザーに書き込む
FormsResultオブジェクトの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メソッドに渡します。
関連トピック
Web サービス API を使用してフラグメントに基づいてフォームをレンダリング render-forms-based-on-fragments-using-the-web-service-api
Forms API(web サービス)を使用して、フラグメントに基づいてフォームをレンダリングします。
-
プロジェクトファイルを含める
- Forms Service WSDL を使用する Java プロキシクラスを作成します。
- Java プロキシクラスをクラスパスに含めます。
-
Forms Client API オブジェクトの作成
FormsServiceオブジェクトを作成し、認証値を設定します。 -
URI 値を指定
- コンストラクターを使用して URI 値を格納する
URLSpecオブジェクトを作成します。 URLSpecオブジェクトのsetApplicationWebRootメソッドを呼び出して、アプリケーションの web ルートを表す文字列値を渡します。URLSpecオブジェクトのsetContentRootURIメソッドを呼び出して、コンテンツルート URI 値を指定する文字列値を渡します。 フォームデザインがコンテンツルート URI に配置されていることを確認します。 そうでない場合、Forms サービスは例外をスローします。 リポジトリを参照するには、repository://を指定します。URLSpecオブジェクトのsetTargetURLメソッドを呼び出して、フォームデータの送信先となるターゲット URL 値を指定する文字列値を渡します。 フォームデザインでターゲット URL を定義する場合、空の文字列を渡すことができます。 また、計算を実行するためのフォームの送信先の URL を指定することもできます。
- コンストラクターを使用して URI 値を格納する
-
フォームのレンダリング
FormsServiceオブジェクトのrenderPDFFormメソッドを呼び出して、次の値を渡します。- ファイル名拡張子を含んだフォームデザイン名を指定する文字列値。 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 ブラウザーに書き込む必要のあるフォームデータストリームを入力します。 - ファイル名拡張子を含んだフォームデザイン名を指定する文字列値。 Forms アプリケーションの一部であるフォームデザインを参照する場合は、必ず次のような完全なパスを指定します。
-
フォームデータストリームをクライアント 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メソッドに渡します。
関連トピック
Base64 エンコーディングを使用した AEM Forms の呼び出し