送信されたFormsの処理

ユーザーがインタラクティブフォームに入力できるWebベースのアプリケーションでは、データをサーバーに送り返す必要があります。 Formsサービスを使用すると、ユーザーがインタラクティブフォームに入力したデータを取得できます。 データを取得したら、ビジネス要件に合わせてデータを処理できます。 例えば、データをデータベースに格納し、データを別のアプリケーションに送信し、データを別のサービスに送信し、データをフォームデザインに結合して、Webブラウザーに表示するなどの操作を実行できます。

フォームデータは、XMLまたはPDFデータとしてFormsサービスに送信されます。これは、Designerで設定されるオプションです。 XMLとして送信されるフォームを使用して、個々のフィールドデータ値を抽出できます。 つまり、ユーザーがフォームに入力した各フォームフィールドの値を抽出できます。 PDFデータとして送信されるフォームは、XMLデータではなくバイナリデータです。 フォームをPDFファイルとして保存するか、別のサービスにフォームを送信することができます。 XMLとして送信されたフォームからデータを抽出し、そのフォームデータを使用してPDFドキュメントを作成する場合は、別のAEM Forms操作を呼び出します。 (送信済みXMLデータを使用したPDFドキュメントの作成を参照)。

次の図は、Webブラウザーに表示されるインタラクティブフォームからHandleDataという名前のJavaサーブレットに送信されるデータを示しています。

hs_hs_handlesubmit

次の表に、この図の手順を示します。

ステップ

説明

1

ユーザーがインタラクティブフォームに入力し、フォームの「送信」ボタンをクリックします。

2

データはXMLデータとしてHandleData Javaサーブレットに送信されます。

3

HandleData Javaサーブレットには、データを取得するアプリケーションロジックが含まれています。

送信されたXMLデータの処理

フォームデータがXMLとして送信されると、送信されたデータを表すXMLデータを取得できます。 すべてのフォームフィールドは、XMLスキーマ内のノードとして表示されます。 ノード値は、ユーザーが入力した値に対応します。 ローンフォームでは、フォームの各フィールドがXMLデータ内のノードとして表示されます。 各ノードの値は、ユーザーが入力する値に対応します。 ユーザーが次のフォームに示すデータを使用してローンフォームに記入するとします。

hs_hs_loanformdata

次の図に、FormsサービスクライアントAPIを使用して取得される、対応するXMLデータを示します。

hs_hs_loandata

ローンフォームのフィールド。 これらの値は、
Java XMLクラスを使用する。

メモ

データをXMLデータとして送信するには、Designerでフォームデザインを正しく設定する必要があります。 XMLデータを送信するようにフォームデザインを適切に設定するには、フォームデザイン上にある「送信」ボタンがXMLデータを送信するように設定されていることを確認します。 XMLデータを送信するための「送信」ボタンの設定について詳しくは、AEM Forms Designerを参照してください。

送信されたPDFデータの処理

Formsサービスを呼び出すWebアプリケーションを検討します。 FormsサービスがインタラクティブPDFフォームをクライアントWebブラウザーにレンダリングした後、ユーザーはフォームに入力し、PDFデータとして送り返します。 Formsサービスは、PDFデータを受け取ると、そのPDFデータを別のサービスに送信したり、PDFファイルとして保存したりできます。 次の図に、アプリケーションのロジック・フローを示します。

hs_hs_savingforms

次の表に、この図の手順を示します。

ステップ

説明

1

Webページには、Formsサービスを呼び出すJavaサーブレットにアクセスするリンクが含まれています。

2

Formsサービスは、インタラクティブPDFフォームをクライアントのWebブラウザーにレンダリングします。

1

ユーザーはインタラクティブフォームに入力し、送信ボタンをクリックします。 フォームがPDFデータとしてFormsサービスに送信されます。 このオプションはDesignerで設定されます。

4

Formsサービスは、PDFデータをPDFファイルとして保存します。

送信されたURL UTF-16データの処理

フォームデータがURL UTF-16データとして送信される場合、クライアントコンピューターにはAdobe ReaderまたはAcrobat 8.1以降が必要です。 また、フォームデザインにURLエンコードデータ(HTTP Post)を含む送信ボタンが含まれ、データエンコードオプションがUTF-16の場合は、フォームデザインをメモ帳などのテキストエディターで変更する必要があります。 送信ボタンのエンコーディングオプションをUTF-16LEまたはUTF-16BEに設定できます。 Designerはこの機能を提供しません。

メモ

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

手順の概要

送信済みのフォームを処理するには、次のタスクを実行します。

  1. プロジェクトファイルを含めます。
  2. Forms Client APIオブジェクトを作成します。
  3. フォームデータを取得します。
  4. フォーム送信に添付ファイルが含まれているかどうかを確認します。
  5. 送信されたデータを処理します。

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

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

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

FormsサービスクライアントAPI操作をプログラムで実行する前に、Formsサービスクライアントを作成する必要があります。 Java APIを使用している場合は、FormsServiceClientオブジェクトを作成します。 Forms WebサービスAPIを使用している場合は、FormsServiceオブジェクトを作成します。

フォームデータの取得

送信されたフォームデータを取得するには、FormsServiceClientオブジェクトのprocessFormSubmissionメソッドを呼び出します。 このメソッドを呼び出す場合は、送信済みフォームのコンテンツタイプを指定する必要があります。 クライアントのWebブラウザーからFormsサービスにデータを送信する場合、XMLまたはPDFデータとして送信できます。 フォームフィールドに入力されたデータを取得するには、データをXMLデータとして送信します。

また、次の実行時オプションを設定して、PDFデータとして送信されたフォームからフォームフィールドを取得することもできます。

  • 次の値をprocessFormSubmissionメソッドにコンテンツタイプパラメーターとして渡します。CONTENT_TYPE=application/pdf.
  • RenderOptionsSpecオブジェクトのPDFToXDP値をtrueに設定します。
  • RenderOptionsSpecオブジェクトのExportDataFormat値をXMLDataに設定します。

processFormSubmissionメソッドを呼び出すときに、送信されたフォームのコンテンツタイプを指定します。 次のリストで、適用可能なコンテンツタイプ値を指定します。

  • text/xml:PDFフォームでフォームデータをXMLとして送信する際に使用するコンテンツタイプを表します。
  • application/x-www-form-urlencoded:HTMLフォームでデータをXMLとして送信する際に使用するコンテンツタイプを表します。
  • application/pdf:PDFフォームでデータをPDFとして送信する際に使用するコンテンツタイプを表します。
メモ

「送信済みFormsの処理」セクションには、対応する3つのクイックスタートが関連付けられています。 Java APIクイックスタートを使用したPDFとして送信されたPDF formsの処理では、送信されたPDFデータの処理方法を示します。 このクイックスタートで指定されているコンテンツタイプはapplication/pdfです。 Java APIクイックスタートを使用したXMLとして送信されたPDF formsの処理では、PDFフォームから送信された送信済みXMLデータを処理する方法を示します。 このクイックスタートで指定されているコンテンツタイプはtext/xmlです。 同様に、Java APIクイックスタートを使用したXML形式でのHTMLフォームの処理で、HTMLフォームから送信された送信済みXMLデータの処理方法を示します。 このクイックスタートで指定するコンテンツタイプは、application/x-www-form-urlencodedです。

Formsサービスに投稿されたフォームデータを取得し、その処理状態を判断します。 つまり、データがFormsサービスに送信される場合、必ずしもFormsサービスによるデータの処理が完了し、データの処理準備ができたとは限りません。 例えば、計算を実行するためにFormsサービスにデータを送信できます。 計算が完了すると、フォームはユーザーにレンダリングされ、計算結果が表示されます。 送信されたデータを処理する前に、Formsサービスがデータの処理を完了したかどうかを確認することをお勧めします。

Formsサービスは、データの処理が完了したかどうかを示す次の値を返します。

  • 0(送信): 送信されたデータは処理の準備ができました。
  • 1(計算): Formsサービスがデータに対して計算操作を実行したので、結果をユーザーにレンダリングする必要があります。
  • 2(検証): Formsサービスが検証したフォームデータと、その結果をユーザーに返す必要があります。
  • 3(次へ): 現在のページが変更され、クライアントアプリケーションに書き込む必要がある結果が反映されました。
  • 4(前):現在のページは、クライアントアプリケーションに書き込む必要がある結果と共に変更されます。
メモ

計算と検証は、ユーザーにレンダリングし直す必要があります。 (フォームデータの計算を参照)。

フォーム送信に添付ファイルが含まれているかどうかを確認します

Formsサービスに送信されるFormsには、添付ファイルを含めることができます。 例えば、Acrobatに組み込まれている添付ファイルウィンドウを使用すると、ユーザーは添付ファイルを選択してフォームと共に送信できます。 また、HTMLファイルと共にレンダリングされるHTMLツールバーを使用して、添付ファイルを選択することもできます。

フォームに添付ファイルが含まれているかどうかを確認したら、データを処理できます。 例えば、添付ファイルをローカルファイルシステムに保存できます。

メモ

添付ファイルを取得するには、フォームをPDFデータとして送信する必要があります。 フォームがXMLデータとして送信された場合、添付ファイルは送信されません。

送信されたデータの処理

送信データのコンテンツタイプに応じて、個々のフォームフィールドの値を送信済みXMLデータから抽出するか、送信済みPDFデータをPDFファイルとして保存する(または別のサービスに送信する)ことができます。 個々のフォームフィールドを抽出するには、送信されたXMLデータをXMLデータソースに変換し、org.w3c.domクラスを使用してXMLデータソースの値を取得します。

関連トピック

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

接続プロパティの設定

FormsサービスAPIのクイックスタート

Formsサービスにドキュメントを渡す

Forms

Java APIを使用して送信されたフォームを処理する

Forms API(Java)を使用して、送信されたフォームを処理します。

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

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

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

    • 接続プロパティを含む ServiceClientFactory オブジェクトを作成します。
    • コンストラクターを使用してFormsServiceClientオブジェクトを渡し、ServiceClientFactoryオブジェクトを作成します。
  3. フォームデータの取得

    • Javaサーブレットに投稿されたフォームデータを取得するには、コンストラクターを使用してcom.adobe.idp.Documentオブジェクトを作成し、コンストラクター内からjavax.servlet.http.HttpServletResponseオブジェクトのgetInputStreamメソッドを呼び出します。
    • コンストラクタを使用して RenderOptionsSpec オブジェクトを作成します。RenderOptionsSpecオブジェクトのsetLocaleメソッドを呼び出し、ロケール値を指定する文字列値を渡すことによって、ロケール値を設定します。
    メモ

    RenderOptionsSpecオブジェクトのsetPDF2XDPメソッドを呼び出してtrueを渡し、setXMLDataを呼び出してtrueを渡すことで、送信されたPDFコンテンツからXDPまたはXMLデータを作成するようFormsサービスに指示できます。 その後、FormsResultオブジェクトのgetOutputXMLメソッドを呼び出して、XDP/XMLデータに対応するXMLデータを取得できます。 (FormsResultオブジェクトは、次の手順で説明するprocessFormSubmissionメソッドで返されます)

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

      • フォームデータを格納するcom.adobe.idp.Documentオブジェクト。
      • 関連するすべてのHTTPヘッダーを含む環境変数を指定するstring値。 処理するコンテンツタイプを指定します。 XMLデータを処理するには、このパラメーターに次の文字列値を指定します。CONTENT_TYPE=text/xml. PDFデータを処理するには、このパラメーターに次の文字列値を指定します。CONTENT_TYPE=application/pdf.
      • HTTP_USER_AGENTヘッダー値を指定するstring値(例: )。 Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)」を選択します。このパラメーター値はオプションです。
      • 実行時オプションを格納するRenderOptionsSpecオブジェクト。

      processFormSubmissionメソッドは、フォーム送信の結果を含むFormsResultオブジェクトを返します。

    • FormsResultオブジェクトのgetActionメソッドを呼び出して、Formsサービスがフォームデータの処理を完了したかどうかを判断します。 このメソッドが値0を返す場合、データは処理できる状態になります。

  4. フォーム送信に添付ファイルが含まれているかどうかを確認します

    • FormsResultオブジェクトのgetAttachmentsメソッドを呼び出します。 このメソッドは、フォームと共に送信されたファイルを含むjava.util.Listオブジェクトを返します。
    • java.util.Listオブジェクトを繰り返し処理して、添付ファイルが存在するかどうかを判断します。 添付ファイルがある場合、各要素はcom.adobe.idp.Documentインスタンスになります。 com.adobe.idp.DocumentオブジェクトのcopyToFileメソッドを呼び出し、java.io.Fileオブジェクトを渡すことで、添付ファイルを保存できます。
    メモ

    この手順は、フォームがPDFとして送信された場合にのみ適用されます。

  5. 送信されたデータの処理

    • データコンテンツタイプがapplication/vnd.adobe.xdp+xmlまたはtext/xmlの場合、XMLデータ値を取得するアプリケーションロジックを作成します。

      • FormsResultオブジェクトのgetOutputContentメソッドを呼び出して、com.adobe.idp.Documentオブジェクトを作成します。
      • java.io.DataInputStreamコンストラクターを呼び出し、com.adobe.idp.Documentオブジェクトを渡して、java.io.InputStreamオブジェクトを作成します。
      • 静的なorg.w3c.dom.DocumentBuilderFactoryオブジェクトのnewInstanceメソッドを呼び出して、org.w3c.dom.DocumentBuilderFactoryオブジェクトを作成します。
      • org.w3c.dom.DocumentBuilderFactoryオブジェクトのnewDocumentBuilderメソッドを呼び出して、org.w3c.dom.DocumentBuilderオブジェクトを作成します。
      • org.w3c.dom.DocumentBuilderオブジェクトのparseメソッドを呼び出し、java.io.InputStreamオブジェクトを渡して、org.w3c.dom.Documentオブジェクトを作成します。
      • XMLドキュメント内の各ノードの値を取得します。 このタスクを実行する1つの方法は、次の2つのパラメーターを受け入れるカスタムメソッドを作成することです。org.w3c.dom.Documentオブジェクトと、値を取得するノードの名前。 このメソッドは、ノードの値を表す文字列値を返します。 このプロセスに続くコード例では、このカスタムメソッドをgetNodeTextと呼びます。 このメソッドの本文が表示されます。
    • データコンテンツタイプがapplication/pdfの場合は、送信されたPDFデータをPDFファイルとして保存するアプリケーションロジックを作成します。

      • FormsResultオブジェクトのgetOutputContentメソッドを呼び出して、com.adobe.idp.Documentオブジェクトを作成します。
      • java.io.Fileオブジェクトを作成するには、そのパブリックコンストラクターを使用します。 ファイル名の拡張子としてPDFを必ず指定してください。
      • com.adobe.idp.DocumentオブジェクトのcopyToFileメソッドを呼び出してjava.io.Fileオブジェクトを渡すことによって、PDFファイルを生成します。

関連トピック

クイックスタート(SOAPモード):Java APIを使用してXMLとして送信されたPDF formsの処理

クイックスタート(SOAPモード):Java APIを使用して、XMLとして送信されたHTMLフォームの処理

クイックスタート(SOAPモード):Java APIを使用してPDFとして送信されたPDF formsの処理

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

接続プロパティの設定

WebサービスAPIを使用して送信されたPDFデータを処理します

Forms API(Webサービス)を使用して、送信されたフォームを処理します。

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

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

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

  3. フォームデータの取得

    • Javaサーブレットに投稿されたフォームデータを取得するには、コンストラクタを使用してBLOBオブジェクトを作成します。

    • javax.servlet.http.HttpServletResponseオブジェクトのgetInputStreamメソッドを呼び出して、java.io.InputStreamオブジェクトを作成します。

    • コンストラクターを使用してjava.io.ByteArrayOutputStreamオブジェクトの長さを渡し、java.io.InputStreamオブジェクトを作成します。

    • java.io.InputStreamオブジェクトの内容をjava.io.ByteArrayOutputStreamオブジェクトにコピーします。

    • java.io.ByteArrayOutputStreamオブジェクトのtoByteArrayメソッドを呼び出して、バイト配列を作成します。

    • setBinaryDataメソッドを呼び出し、バイト配列を引数として渡すことで、BLOBオブジェクトを設定します。

    • コンストラクタを使用して RenderOptionsSpec オブジェクトを作成します。RenderOptionsSpecオブジェクトのsetLocaleメソッドを呼び出し、ロケール値を指定する文字列値を渡すことによって、ロケール値を設定します。

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

      • フォームデータを格納するBLOBオブジェクト。
      • 関連するすべてのHTTPヘッダーを含む環境変数を指定するstring値。 処理するコンテンツタイプを指定します。 XMLデータを処理するには、このパラメーターに次の文字列値を指定します。CONTENT_TYPE=text/xml. PDFデータを処理するには、このパラメーターに次の文字列値を指定します。CONTENT_TYPE=application/pdf.
      • HTTP_USER_AGENTヘッダー値を指定するstring値。例: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)
      • 実行時オプションを格納するRenderOptionsSpecオブジェクト。
      • メソッドで設定される空のBLOBHolderオブジェクト。
      • メソッドで設定される空のjavax.xml.rpc.holders.StringHolderオブジェクト。
      • メソッドで設定される空のBLOBHolderオブジェクト。
      • メソッドで設定される空のBLOBHolderオブジェクト。
      • メソッドで設定される空のjavax.xml.rpc.holders.ShortHolderオブジェクト。
      • メソッドで設定される空のMyArrayOf_xsd_anyTypeHolderオブジェクト。 このパラメーターは、フォームと共に送信される添付ファイルを保存するために使用されます。
      • 送信されるフォームを使用してメソッドによって入力される、空のFormsResultHolderオブジェクト。

      processFormSubmissionメソッドは、FormsResultHolderパラメーターにフォーム送信の結果を入力します。

    • FormsResultオブジェクトのgetActionメソッドを呼び出して、Formsサービスがフォームデータの処理を完了したかどうかを判断します。 このメソッドが値0を返す場合、フォームデータは処理できる状態になります。 FormsResultオブジェクトは、FormsResultHolderオブジェクトのvalueデータメンバーの値を取得することで取得できます。

  4. フォーム送信に添付ファイルが含まれているかどうかを確認します

    MyArrayOf_xsd_anyTypeHolderオブジェクトのvalueデータメンバーの値を取得します(MyArrayOf_xsd_anyTypeHolderオブジェクトがprocessFormSubmissionメソッドに渡されました)。 このデータメンバはObjectsの配列を返します。 Object配列内の各要素は、フォームと共に送信されたファイルに対応するObjectです。 配列内の各要素を取得し、BLOBオブジェクトにキャストできます。

  5. 送信されたデータの処理

    • データコンテンツタイプがapplication/vnd.adobe.xdp+xmlまたはtext/xmlの場合、XMLデータ値を取得するアプリケーションロジックを作成します。

      • FormsResultオブジェクトのgetOutputContentメソッドを呼び出して、BLOBオブジェクトを作成します。
      • BLOBオブジェクトのgetBinaryDataメソッドを呼び出して、バイト配列を作成します。
      • java.io.ByteArrayInputStreamコンストラクターを呼び出してバイト配列を渡すことで、java.io.InputStreamオブジェクトを作成します。
      • 静的なorg.w3c.dom.DocumentBuilderFactoryオブジェクトのnewInstanceメソッドを呼び出して、org.w3c.dom.DocumentBuilderFactoryオブジェクトを作成します。
      • org.w3c.dom.DocumentBuilderFactoryオブジェクトのnewDocumentBuilderメソッドを呼び出して、org.w3c.dom.DocumentBuilderオブジェクトを作成します。
      • org.w3c.dom.DocumentBuilderオブジェクトのparseメソッドを呼び出し、java.io.InputStreamオブジェクトを渡して、org.w3c.dom.Documentオブジェクトを作成します。
      • XMLドキュメント内の各ノードの値を取得します。 このタスクを実行する1つの方法は、次の2つのパラメーターを受け入れるカスタムメソッドを作成することです。org.w3c.dom.Documentオブジェクトと、値を取得するノードの名前。 このメソッドは、ノードの値を表す文字列値を返します。 このプロセスに続くコード例では、このカスタムメソッドをgetNodeTextと呼びます。 このメソッドの本文が表示されます。
    • データコンテンツタイプがapplication/pdfの場合は、送信されたPDFデータをPDFファイルとして保存するアプリケーションロジックを作成します。

      • FormsResultオブジェクトのgetOutputContentメソッドを呼び出して、BLOBオブジェクトを作成します。
      • BLOBオブジェクトのgetBinaryDataメソッドを呼び出して、バイト配列を作成します。
      • java.io.Fileオブジェクトを作成するには、そのパブリックコンストラクターを使用します。 ファイル名の拡張子としてPDFを必ず指定してください。
      • コンストラクタを使用して java.io.FileOutputStream オブジェクトを渡すことによって、java.io.File オブジェクトを作成します。
      • java.io.FileOutputStreamオブジェクトのwriteメソッドを呼び出し、バイト配列を渡すことによって、PDFファイルを生成します。

関連トピック

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

このページ