このドキュメントのサンプルと例は、JEE環境上のAEM Formsに対してのみ提供されています。
ユーザーがインタラクティブフォームに入力できるWebベースのアプリケーションでは、データをサーバーに送信し直す必要があります。 Formsサービスを使用すると、ユーザーがインタラクティブフォームに入力したデータを取得できます。 データを取得したら、ビジネス要件に合わせてデータを処理できます。 例えば、データをデータベースに格納し、データを別のアプリケーションに送信し、データを別のサービスに送信し、データをフォームデザインに結合し、Webブラウザーに表示するなどの操作を実行できます。
フォームデータは、XMLまたはPDFデータとしてFormsサービスに送信されます。これは、Designerで設定されるオプションです。 XML形式で送信されるフォームを使用すると、個々のフィールドデータ値を抽出できます。 つまり、ユーザーがフォームに入力した各フォームフィールドの値を抽出できます。 PDFデータとして送信されるフォームは、XMLデータではなくバイナリデータです。 フォームをPDFファイルとして保存したり、別のサービスにフォームを送信したりできます。 XMLとして送信されたフォームからデータを抽出し、フォームデータを使用してPDFドキュメントを作成する場合は、別のAEM Forms操作を呼び出します。 (「送信されたXMLデータを使用したPDFドキュメントの作成」を参照)。
次の図は、Webブラウザーに表示されるインタラクティブフォームからHandleData
という名前のJavaサーブレットに送信されるデータを示しています。
次の表で、この図の手順を説明します。
ステップ |
説明 |
---|---|
1 |
ユーザーがインタラクティブフォームに入力し、フォームの「送信」ボタンをクリックします。 |
2 |
データはXMLデータとして |
3 |
|
フォームデータがXMLとして送信されると、送信されたデータを表すXMLデータを取得できます。 すべてのフォームフィールドは、XMLスキーマでノードとして表示されます。 ノードの値は、ユーザーが入力した値に対応します。 フォームの各フィールドがXMLデータ内のノードとして表示されるローンフォームを考えてみましょう。 各ノードの値は、ユーザーが入力する値に対応します。 ユーザーがローンフォームに次のフォームに表示されるデータを入力するとします。
次の図に、FormsサービスクライアントAPIを使用して取得された、対応するXMLデータを示します。
ローンフォームのフィールド。 これらの値は取得できます
Java XMLクラスの使用」を参照してください。
データをXMLデータとして送信するには、Designerでフォームデザインを正しく設定する必要があります。 XMLデータを送信するようにフォームデザインを適切に設定するには、フォームデザイン上にある「送信」ボタンがXMLデータを送信するように設定します。 XMLデータを送信するための「送信」ボタンの設定について詳しくは、AEM Formsデザイナを参照してください。
Formsサービスを呼び出すWebアプリケーションを考えてみましょう。 FormsサービスがインタラクティブPDFフォームをクライアントのWebブラウザーにレンダリングした後、ユーザーはフォームに入力し、PDFデータとして送信し返します。 Formsサービスは、PDFデータを受け取ると、そのPDFデータを別のサービスに送信したり、PDFファイルとして保存したりできます。 次の図に、アプリケーションのロジックのフローを示します。
次の表に、この図の手順を示します。
ステップ |
説明 |
---|---|
1 |
Webページには、Formsサービスを呼び出すJavaサーブレットにアクセスするリンクが含まれています。 |
2 |
Formsサービスは、インタラクティブPDFフォームをクライアントのWebブラウザーにレンダリングします。 |
3 |
ユーザーがインタラクティブフォームに入力し、送信ボタンをクリックします。 フォームがPDFデータとしてFormsサービスに送信されます。 このオプションはDesignerで設定されます。 |
4 |
Formsサービスは、PDFデータをPDFファイルとして保存します。 |
フォームデータがURL UTF-16データとして送信される場合、クライアントコンピューターはAdobe ReaderまたはAcrobat 8.1以降を必要とします。 また、フォームデザインにURLエンコードデータ(HTTP Post)を持つ送信ボタンが含まれ、データエンコードオプションがUTF-16の場合は、フォームデザインをメモ帳などのテキストエディターで変更する必要があります。 送信ボタンのエンコーディングオプションをUTF-16LE
またはUTF-16BE
に設定できます。 Designerでは、この機能は提供されていません。
Formsサービスの詳細については、『AEM Formsのサービスリファレンス』を参照してください。
送信済みのフォームを処理するには、次のタスクを実行します。
プロジェクトファイルを含める
必要なファイルを開発プロジェクトに含めます。 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
メソッドを呼び出すときに、送信済みフォームのコンテンツタイプを指定します。 次のリストは、適用可能なコンテンツタイプの値を指定します。
「送信された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サービスは、データの処理が完了したかどうかを示す次の値を返します。
計算と検証は、ユーザーにレンダリングして戻す必要があります。 (「フォームデータの計算」を参照)。
フォーム送信に添付ファイルが含まれているかどうかを確認する
Formsサービスに送信されたFormsには添付ファイルを含めることができます。 例えば、Acrobatの組み込みの添付ファイルペインを使用して、フォームと共に送信する添付ファイルを選択できます。 また、HTMLファイルと共にレンダリングされるHTMLツールバーを使用して、添付ファイルを選択することもできます。
フォームに添付ファイルが含まれているかどうかを確認したら、データを処理できます。 例えば、添付ファイルをローカルファイルシステムに保存できます。
添付ファイルを取得するには、フォームをPDFデータとして送信する必要があります。 フォームがXMLデータとして送信される場合、添付ファイルは送信されません。
送信されたデータを処理する
送信データのコンテンツタイプに応じて、送信されたXMLデータから個々のフォームフィールド値を抽出したり、送信されたPDFデータをPDFファイルとして保存したり(または別のサービスに送信したり)できます。 個々のフォームフィールドを抽出するには、送信されたXMLデータをXMLデータソースに変換し、org.w3c.dom
クラスを使用してXMLデータソースの値を取得します。
関連トピック
FormsAPI(Java)を使用して、送信済みフォームを処理します。
プロジェクトファイルを含める
Javaプロジェクトのクラスパスに、adobe-forms-client.jarなどのクライアントJARファイルを含めます。
FormsクライアントAPIオブジェクトの作成
ServiceClientFactory
オブジェクトを作成します。FormsServiceClient
オブジェクトを渡して、ServiceClientFactory
オブジェクトを作成します。フォームデータの取得
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
オブジェクト。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
を返す場合、データは処理の準備ができています。
フォーム送信に添付ファイルが含まれているかどうかを確認する
FormsResult
オブジェクトのgetAttachments
メソッドを呼び出します。 このメソッドは、フォームと共に送信されたファイルを含むjava.util.List
オブジェクトを返します。java.util.List
オブジェクトを繰り返し処理して、添付ファイルが存在するかどうかを確認します。 添付ファイルがある場合、各要素はcom.adobe.idp.Document
インスタンスになります。 com.adobe.idp.Document
オブジェクトのcopyToFile
メソッドを呼び出し、java.io.File
オブジェクトを渡すことで、添付ファイルを保存できます。この手順は、フォームが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
オブジェクトを作成します。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の処理
FormsAPI(Webサービス)を使用して、送信済みフォームを処理します。
プロジェクトファイルを含める
Formsクライアント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
メソッドを呼び出して、バイト配列を作成します。
BLOB
オブジェクトを入力するには、setBinaryData
メソッドを呼び出し、バイト配列を引数として渡します。
コンストラクタを使用して RenderOptionsSpec
オブジェクトを作成します。RenderOptionsSpec
オブジェクトのsetLocale
メソッドを呼び出し、ロケール値を指定する文字列値を渡して、ロケール値を設定します。
FormsService
オブジェクトのprocessFormSubmission
メソッドを呼び出し、次の値を渡します。
BLOB
オブジェクト。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
オブジェクトを取得できます。
フォーム送信に添付ファイルが含まれているかどうかを確認する
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
オブジェクトを作成します。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ファイルを入力します。関連トピック