Formsサービスでは、ユーザーがフォームに入力した値を計算し、結果を表示できます。 フォームデータを計算するには、2つのタスクを実行する必要があります。 まず、フォームデータを計算するフォームデザインスクリプトを作成します。 フォームデザインは、3種類のスクリプトをサポートしています。 1つのスクリプトタイプはクライアントで実行され、別のスクリプトタイプはサーバーで実行され、3つ目のスクリプトタイプはサーバーとクライアントの両方で実行されます。 このトピックで説明されているスクリプトタイプは、サーバー上で実行されます。 サーバー側の計算は、HTML、PDF、およびForm Guide(非推奨)の変換に対してサポートされています。
フォームデザインのプロセスの一環として、演算とスクリプトを使用し、ユーザーの操作性を向上させることができます。 演算とスクリプトは、フォーム内のほとんどのフィールドとオブジェクトに追加できます。 ユーザーがインタラクティブフォームに入力したデータに対して演算操作を実行するには、フォームデザインのスクリプトを作成する必要があります。
ユーザーがフォームに値を入力し、「Calculate」ボタンをクリックして結果を表示します。 次のプロセスは、ユーザーにデータの計算を許可するアプリケーションの例を説明しています。
GetLoanForm
という名前のJavaサーブレットを呼び出します。GetLoanForm
サーブレットはローンフォームをレンダリングします。 このフォームには、スクリプト、インタラクティブフィールド、計算ボタン、送信ボタンが含まれています。CalculateData
Javaサーブレットに送信され、スクリプトが実行されます。 フォームがユーザーに送り返され、計算結果がフォームに表示されます。ProcessForm
という別のJavaサーブレットに送信されます。 (送信されたFormsの処理を参照)。次の図に、アプリケーションのロジックのフローを示します。
次の表に、この図の手順を示します。
ステップ |
説明 |
---|---|
1 |
|
2 |
|
3 |
ユーザーがインタラクティブフィールドにデータを入力し、「計算」ボタンをクリックします。 フォームが |
4 |
フォームがWebブラウザーにレンダリングされ、計算結果がフォームに表示されます。 |
5 |
値が十分な場合は、「送信」ボタンをクリックします。 フォームは、 |
通常、PDFコンテンツとして送信されるフォームには、クライアント上で実行されるスクリプトが含まれます。 ただし、サーバー側の計算を実行することもできます。 「送信」ボタンは、スクリプトの計算には使用できません。 この場合、Formsサービスがインタラクションを完了と見なすので、計算は実行されません。
フォームデザインのスクリプトの使用方法を説明するために、この節では、サーバー上で実行するように設定されたスクリプトを含むシンプルなインタラクティブフォームについて調べます。 次の図に示すフォームデザインには、ユーザーが最初の2つのフィールドに入力した値を追加し、その結果を3つ目のフィールドに表示するスクリプトが含まれています。
A. NumericField1 B. A NumericField2 C. A Field3という名前のフィールド
このフォームデザインにあるスクリプトの構文は次のとおりです。
NumericField3 = NumericField2 + NumericField1
このフォームデザインでは、「計算」ボタンはコマンドボタンで、スクリプトはこのボタンのClick
イベントにあります。 ユーザーが最初の2つのフィールド(NumericField1とNumericField2)に値を入力し、「Calculate」ボタンをクリックすると、フォームがFormsサービスに送信され、そこでスクリプトが実行されます。 Formsサービスは、フォームをクライアントデバイスにレンダリングし返し、計算の結果をNumericField3フィールドに表示します。
フォームデザインスクリプトの作成について詳しくは、「Formsデザイナ」を参照してください。
Formsサービスの詳細については、『AEM Formsのサービスリファレンス』を参照してください。
フォームデータを計算するには、次のタスクを実行します。
プロジェクトファイルを含める
必要なファイルを開発プロジェクトに含めます。 Javaを使用してクライアントアプリケーションを作成する場合は、必要なJARファイルを含めます。 Webサービスを使用している場合は、プロキシファイルを必ず含めてください。
FormsクライアントAPIオブジェクトの作成
プログラムでFormsサービスのクライアントAPI操作を実行する前に、Formsサービスクライアントを作成する必要があります。 Java APIを使用している場合は、FormsServiceClient
オブジェクトを作成します。 FormsのWebサービスAPIを使用している場合は、FormsServiceService
オブジェクトを作成します。
演算スクリプトを含むフォームの取得
FormsサービスクライアントAPIを使用して、サーバー上で実行するように設定されたスクリプトが含まれるフォームを処理するアプリケーションロジックを作成します。 このプロセスは、送信されたフォームの処理と似ています。 (送信されたFormsの処理を参照)。
送信されたフォームに関連付けられている処理状態が1
(Calculate)
であることを確認します。これは、Formsサービスがフォームデータに対して計算操作を実行しており、結果をユーザーに書き戻す必要があることを意味します。 この場合、サーバー上で実行するように設定されたスクリプトが自動的に実行されます。
フォームデータストリームをクライアントのWebブラウザーに書き戻します
送信されたフォームに関連付けられている処理状態が1
であることを確認したら、結果をクライアントWebブラウザーに書き戻す必要があります。 フォームが表示されると、計算値が適切なフィールドに表示されます。
関連項目
AEM Forms Java ライブラリファイルを含める
Java APICalculate form data using the Web service APISetting connection
propertiesForms Service API Quick
StartsインタラクティブPDFフォームのレンダリングインタラクティブPDFフォームのレンダリングFormsをレンダリングする
Web アプリケーションの計算
FormsAPI(Java)を使用してフォームデータを計算するには:
プロジェクトファイルを含める
Javaプロジェクトのクラスパスに、adobe-forms-client.jarなどのクライアントJARファイルを含めます。
FormsクライアントAPIオブジェクトの作成
ServiceClientFactory
オブジェクトを作成します。FormsServiceClient
オブジェクトを渡して、ServiceClientFactory
オブジェクトを作成します。演算スクリプトを含むフォームの取得
演算スクリプトを含むフォームデータを取得するには、コンストラクターを使用してcom.adobe.idp.Document
オブジェクトを作成し、コンストラクター内からjavax.servlet.http.HttpServletResponse
オブジェクトのgetInputStream
メソッドを呼び出します。
FormsServiceClient
オブジェクトのprocessFormSubmission
メソッドを呼び出し、次の値を渡します。
com.adobe.idp.Document
オブジェクト。CONTENT_TYPE
環境変数に1つ以上の値を指定して、処理するコンテンツタイプを指定する必要があります。 例えば、XMLデータとPDFデータを処理するには、このパラメーターに次の文字列値を指定します。CONTENT_TYPE=application/xml&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
メソッドを呼び出して、送信されたフォームに関連付けられている処理状態が1
であることを確認します。 このメソッドが値1
を返す場合、計算が実行され、データをクライアントWebブラウザーに書き戻すことができます。
フォームデータストリームをクライアントのWebブラウザーに書き戻します
javax.servlet.ServletOutputStream
オブジェクトを作成します。FormsResult
オブジェクト's getOutputContent
メソッドを呼び出して、com.adobe.idp.Document
オブジェクトを作成します。com.adobe.idp.Document
オブジェクトのgetInputStream
メソッドを呼び出して、java.io.InputStream
オブジェクトを作成します。InputStream
オブジェクトのread
メソッドを呼び出して、バイト配列を引数として渡すことで、フォームデータストリームを設定します。javax.servlet.ServletOutputStream
オブジェクトのwrite
メソッドを呼び出して、フォームデータストリームをクライアントのWebブラウザーに送信します。 バイト配列をwrite
メソッドに渡します。関連項目
AEM Forms Java ライブラリファイルを含める
接続プロパティの設定
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
メソッドを呼び出し、ロケール値を指定する文字列値を渡して、ロケール値を設定します。
FormsServiceClient
オブジェクトのprocessFormSubmission
メソッドを呼び出し、次の値を渡します。
BLOB
オブジェクト。HTTP_REFERER=referrer&HTTP_CONNECTION=keep-alive&CONTENT_TYPE=application/xml
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
パラメーターに入力します。 processFormSubmission
メソッドは、フォーム送信の結果を含むFormsResult
オブジェクトを返します。
FormsResult
オブジェクトのgetAction
メソッドを呼び出して、送信されたフォームに関連付けられている処理状態が1
であることを確認します。 このメソッドが値1
を返す場合、計算が実行され、データをクライアントWebブラウザーに書き戻すことができます。
フォームデータストリームをクライアントのWebブラウザーに書き戻します
javax.servlet.ServletOutputStream
オブジェクトを作成します。FormsResult
オブジェクトのgetOutputContent
メソッドを呼び出して、フォームデータを含むBLOB
オブジェクトを作成します。BLOB
オブジェクトのgetBinaryData
メソッドを呼び出して値を設定します。 このタスクは、FormsResult
オブジェクトの内容をバイト配列に割り当てます。javax.servlet.http.HttpServletResponse
オブジェクトのwrite
メソッドを呼び出して、フォームデータストリームをクライアントのWebブラウザーに送信します。 バイト配列をwrite
メソッドに渡します。Base64エンコーディングを使用したAEM Formsの呼び出しも参照し
てください。