送信されたFormsの処理

このドキュメントのサンプルと例は、JEE環境上のAEM Formsに対してのみ提供されています。

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

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

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

hs_hs_handlessubmit

次の表で、この図の手順を説明します。

ステップ

説明

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デザイナを参照してください。

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

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

hs_hs_savingforms

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

ステップ

説明

1

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

2

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

3

ユーザーがインタラクティブフォームに入力し、送信ボタンをクリックします。 フォームが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クライアントAPIオブジェクトを作成します。
  3. フォームデータを取得します。
  4. フォーム送信に添付ファイルが含まれているかどうかを確認します。
  5. 送信されたデータを処理します。

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

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

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

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

フォームデータの取得

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

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

  • 次の値をprocessFormSubmissionメソッドにcontent typeパラメーターとして渡します。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をレンダリングするWeb アプリケーションの作成

Java APIを使用して送信済みのフォームを処理する

FormsAPI(Java)を使用して、送信済みフォームを処理します。

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

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

  2. Formsクライアント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オブジェクトと、値を取得するノードの名前。 このメソッドは、ノードの値を表すstring値を返します。 このプロセスの後のコード例では、このカスタムメソッドは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データを処理する

FormsAPI(Webサービス)を使用して、送信済みフォームを処理します。

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

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

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

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

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

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

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

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

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

    • BLOBオブジェクトを入力するには、setBinaryDataメソッドを呼び出し、バイト配列を引数として渡します。

    • コンストラクタを使用して 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を返す場合、フォームデータは処理の準備ができています。 FormsResultHolderオブジェクトのvalueデータメンバの値を取得することで、FormsResultオブジェクトを取得できます。

  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オブジェクトと、値を取得するノードの名前。 このメソッドは、ノードの値を表すstring値を返します。 このプロセスの後のコード例では、このカスタムメソッドは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の呼び出し

このページ