送信済みフォームの処理 handling-submitted-forms
このドキュメントのサンプルと例は、JEE 環境の AEM Forms のみを対象としています。
ユーザーがインタラクティブフォームに入力できる Web ベースのアプリケーションでは、データをサーバーに送り返す必要があります。 Forms サービスを使用すると、ユーザーがインタラクティブフォームに入力したデータを取得できます。 データを取得したら、ビジネス要件に合わせてそのデータを処理できます。 例えば、そのデータをデータベースに格納したり、別のアプリケーションに送信したり、別のサービスに送信したり、フォームデザインで結合したり、Web ブラウザーに表示したりすることができます。
フォームデータは、XML データまたは PDF データとして Forms サービスに送信されます(その選択は Designer で設定します)。 XML 形式で送信されたフォームを使用すると、個々のフィールドデータ値を抽出できます。 つまり、ユーザーがフォームに入力した各フォームフィールドの値を抽出できます。 PDF 形式で送信されたフォームは、XML データではなくバイナリデータです。 そのフォームは、PDF ファイルとして保存するか、別のサービスに送信することができます。 XML 形式で送信されたフォームからデータを抽出し、そのフォームデータを使用して PDF ドキュメントを作成する場合は、別の AEM Forms 操作を呼び出します。 (送信された XML データを使用して PDF ドキュメントを作成するを参照してください)
次の図は、Web ブラウザーに表示されたインタラクティブフォームから HandleData という名前の Java サーブレットに送信されるデータを示しています。
次の表で、図の手順を説明します。
HandleData Java サーブレットに送信されます。HandleData Java サーブレットには、データを取得するアプリケーションロジックが含まれています。送信された XML データの処理 handling-submitted-xml-data
フォームデータを XML 形式で送信すると、送信データを表す XML データを取得できます。 すべてのフォームフィールドは、XML スキーマのノードとして表示されます。 ノードの値は、ユーザーが入力した値に対応します。 フォーム内の各フィールドが XML データ内のノードとして表示されるローン申請書について考えてみましょう。 各ノードの値は、ユーザーが入力する値に対応します。 ユーザーが次のフォームに示すデータを使用してローン申請書に入力するとします。
次の図に、Forms サービスクライアント API を使用して取得される、対応する XML データを示します。
ローン申請書のフィールド。 これらの値は
Java XML クラスを使用します。
送信された PDF データの処理 handling-submitted-pdf-data
Forms サービスを呼び出す web アプリケーションについて考えます。 Forms サービスがインタラクティブ PDF フォームをクライアント web ブラウザーにレンダリングしたら、ユーザーはフォームに入力し、フォームを PDF データとして送り返します。 Forms サービスは PDF データを受け取ると、PDF データを別のサービスに送信したり、PDF ファイルとして保存したりできます。 次の図に、アプリケーションのロジック・フローを示します。
次の表に、この図の手順を示します。
送信された URL UTF-16 データの処理 handling-submitted-url-utf-16-data
フォームデータが URL UTF-16 データとして送信される場合、クライアントコンピューターには Adobe Reader または Acrobat 8.1 以降が必要です。 また、フォームデザインに URL エンコードされたデータ (HTTP Post) を含む「送信」ボタンが含まれ、データエンコードオプションが UTF-16 の場合、フォームデザインはメモ帳などのテキストエディターで変更する必要があります。 エンコーディングオプションは、送信ボタン用に UTF-16LE または UTF-16BE のいずれかに設定できます。 Designer はこの機能を提供していません。
手順の概要 summary-of-steps
送信されたフォームを処理するには、次のタスクを実行します。
- プロジェクトファイルを含めます。
- Forms Client API オブジェクトを作成します。
- フォームデータを取得します。
- フォーム送信に添付ファイルが含まれているかどうかを確認します。
- 送信されたデータを処理します。
プロジェクトファイルを含める
必要なファイルを開発プロジェクトに含めます。 Java を使用してクライアントアプリケーションを作成する場合は、必要な JAR ファイルを含めます。 Web サービスを使用している場合は、プロキシファイルを必ず含めてください。
Forms Client API オブジェクトを作成
Forms Service Client API 操作をプログラムで実行する前に、Forms サービスクライアントを作成する必要があります。 Java API を使用している場合は、FormsServiceClient オブジェクトを作成します。 Forms web サービス API を使用している場合は、FormsService オブジェクトを作成します。
フォームデータを取得
送信されたフォームデータを取得するには、FormsServiceClient オブジェクトの processFormSubmission メソッドを呼び出します。 このメソッドを呼び出す場合は、送信されたフォームのコンテンツタイプを指定する必要があります。 クライアントの Web ブラウザーから Forms サービスにデータが送信された場合、そのデータは XML または PDF データとして送信できます。 フォームフィールドに入力されたデータを取得するには、データを XML データとして送信します。
また、次の実行時オプションを設定して、PDF データとして送信されたフォームからフォームフィールドを取得することもできます。
CONTENT_TYPE=application/pdfの値をコンテンツタイプパラメーターとしてprocessFormSubmissionメソッドに渡します。RenderOptionsSpecオブジェクトのPDFToXDP値をtrueに設定しますRenderOptionsSpecオブジェクトのExportDataFormat値をXMLDataに設定します
processFormSubmission メソッドを呼び出すときに、送信されたフォームのコンテンツタイプを指定します。 次のリストで、適用可能なコンテンツタイプの値を指定します。
- text/xml:PDF フォームがフォームデータを XML として送信するときに使用するコンテンツタイプを表します。
- application/x-www-form-urlencoded:HTML フォームがデータを XML として送信するときに使用するコンテンツタイプを表します。
- application/pdf:PDF フォームがデータを PDF として送信するときに使用するコンテンツタイプを表します。
application/pdf です。 Java API クイックスタートを使用して XML として送信された PDF フォームの処理は、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 ツールバーを使用して、添付ファイルを選択することもできます。
フォームに添付ファイルが含まれているかどうかを確認したら、そのデータを処理できます。 例えば、添付ファイルをローカルファイルシステムに保存できます。
送信されたデータの処理
送信データのコンテンツタイプによって異なりますが、送信されたのが XML データであれば個々のフォームフィールドの値を抽出することができ、送信されたのが PDF データであれば PDF ファイルとして保存(または別のサービスに送信)することができます。 個々のフォームフィールドを抽出するには、送信された XML データを XML データソースに変換し、org.w3c.dom クラスを使用して XML データソースの値を取得します。
関連トピック
Java API を使用して送信フォームを処理する handle-submitted-forms-using-the-java-api
Forms API(Java)を使用して、送信されたフォームを処理します。
-
プロジェクトファイルを含める
adobe-forms-client.jar などのクライアント JAR ファイルを Java プロジェクトのクラスパスに含めます。
-
Forms Client API オブジェクトの作成
- 接続プロパティを含む
ServiceClientFactoryオブジェクトを作成します。 - コンストラクターを使用して
ServiceClientFactoryオブジェクトを渡すことにより、FormsServiceClientオブジェクトを作成します。
- 接続プロパティを含む
-
フォームデータを取得
- Java サーブレットに投稿されたフォームデータを取得するには、コンストラクタを使用し、そのコンストラクタ内から
javax.servlet.http.HttpServletResponseオブジェクトのgetInputStreamメソッドを呼び出すことによって、com.adobe.idp.Documentオブジェクトを作成します。 - コンストラクタを使用して
RenderOptionsSpecオブジェクトを作成します。RenderOptionsSpecオブジェクトのsetLocaleメソッドを呼び出してロケール値を指定する文字列値を渡すことによって、ロケール値を設定します。
note note NOTE RenderOptionsSpecオブジェクトのsetPDF2XDPメソッドを呼び出しtrueを渡すか、setXMLDataを呼び出しtrueを渡すことによって、Forms サービスに対し、送信された PDF コンテンツから XDP データまたは XML データを作成するよう命令できます。 その後、FormsResultオブジェクトのgetOutputXMLメソッドを呼び出して、XDP/XML データに対応する XML データを取得することができます。 (FormsResultオブジェクトがprocessFormSubmissionメソッドによって返されます。これについては、次の下位手順で説明します)。-
FormsServiceClientオブジェクトのprocessFormSubmissionメソッドを呼び出して、次の値を渡します。- フォームデータを含む
com.adobe.idp.Documentオブジェクト。 - 関連するすべての HTTP ヘッダーを含む環境変数を指定する文字列値。 処理するコンテンツタイプを指定します。 XML データを処理するには、パラメーター
CONTENT_TYPE=text/xmlに次の文字列値を指定します。 PDF データを処理するには、このパラメーターに文字列値CONTENT_TYPE=application/pdfを指定します。 HTTP_USER_AGENTヘッダー値を指定する文字列値(例:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322). このパラメーター値はオプションです。- 実行時オプションを格納する
RenderOptionsSpecオブジェクト。
processFormSubmissionメソッドは、フォーム送信の結果を含むFormsResultオブジェクトを返します。 - フォームデータを含む
-
FormsResultオブジェクトのgetActionメソッドを呼び出して、Forms サービスがフォームデータの処理を完了したかどうかを判断します。 このメソッドが値0を返した場合、処理するデータの準備が整っています。
- Java サーブレットに投稿されたフォームデータを取得するには、コンストラクタを使用し、そのコンストラクタ内から
-
フォーム送信に添付ファイルが含まれているかどうかを確認します
FormsResultオブジェクトのgetAttachmentsメソッドを呼び出します。 このメソッドは、フォームと共に送信されたファイルを含むjava.util.Listオブジェクトを返します。java.util.Listオブジェクトを反復処理して、添付ファイルが存在するかどうかを確認します。 添付ファイルがある場合、各要素はcom.adobe.idp.Documentインスタンスです。com.adobe.idp.DocumentオブジェクトのcopyToFileメソッドを呼び出してjava.io.Fileオブジェクトを渡すことで、添付ファイルを保存できます。
note note NOTE この手順は、フォームが PDF として送信された場合にのみ適用されます。 -
送信されたデータを処理
-
データコンテンツタイプが
application/vnd.adobe.xdp+xmlまたはtext/xmlの場合、XML データ値を取得するアプリケーションロジックを作成します。FormsResultオブジェクトのgetOutputContentメソッドを呼び出すことによってcom.adobe.idp.Documentオブジェクトを作成します。java.io.InputStreamオブジェクトを作成するには、java.io.DataInputStreamコントラクターを呼び出して、com.adobe.idp.Documentオブジェクトを渡します。- 静的な
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 つの方法は、
org.w3c.dom.Documentオブジェクトおよび値を取得するノードの名前の 2 つのパラメーターを受け入れるカスタムメソッドを作成することです。 このメソッドは、ノードの値を表す文字列値を返します。 このプロセスに続くコード例では、このカスタムメソッドは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 フォームの処理
Web サービス API を使用して送信された PDF データを処理します handle-submitted-pdf-data-using-the-web-service-api
Forms API(Web サービス)を使用して送信されたフォームを処理します。
-
プロジェクトファイルを含める
- Forms Service WSDL を使用する Java プロキシクラスを作成します。
- Java プロキシクラスをクラスパスに含めます。
-
Forms Client API オブジェクトの作成
FormsServiceオブジェクトを作成し、認証値を設定します。 -
フォームデータを取得
-
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メソッドを呼び出してバイト配列を作成します。 -
setBinaryDataメソッドを呼び出してバイト配列を引数として渡すことによって、BLOBオブジェクトに入力します。 -
コンストラクターを使用して
RenderOptionsSpecオブジェクトを作成します。RenderOptionsSpecオブジェクトのsetLocaleメソッドを呼び出してロケール値を指定する文字列値を渡すことによって、ロケール値を設定します。 -
FormsServiceオブジェクトのprocessFormSubmissionメソッドを呼び出して、次の値を渡します。- フォームデータを含む
BLOBオブジェクト。 - 関連するすべての HTTP ヘッダーを含む環境変数を指定する文字列値。 処理するコンテンツタイプを指定します。 XML データを処理するには、パラメーター
CONTENT_TYPE=text/xmlに次の文字列値を指定します。 PDF データを処理するには、このパラメーターに文字列値CONTENT_TYPE=application/pdfを指定します。 HTTP_USER_AGENTヘッダー値を指定する文字列値(例: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オブジェクトを取得できます。
-
-
フォーム送信に添付ファイルが含まれているかどうかを確認します
MyArrayOf_xsd_anyTypeHolderオブジェクトのvalueデータメンバーの値を取得します(MyArrayOf_xsd_anyTypeHolderオブジェクトはprocessFormSubmissionメソッドに渡されました)。 このデータメンバーはObjectsの配列を返します。Object配列内の各要素は、フォームとともに送信されたファイルに対応するObjectです。 配列内の各要素を取得し、BLOBオブジェクトにキャストできます。 -
送信されたデータを処理
-
データコンテンツタイプが
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 つの方法は、
org.w3c.dom.Documentオブジェクトおよび値を取得するノードの名前の 2 つのパラメーターを受け入れるカスタムメソッドを作成することです。 このメソッドは、ノードの値を表す文字列値を返します。 このプロセスに続くコード例では、このカスタムメソッドは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 の呼び出し