送信済みフォームの処理 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 の呼び出し