送信済みフォームの処理 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.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 つの方法は、
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 の呼び出し