送信された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

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

ステップ

説明

3

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の呼び出し

このページ

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