フォームデータの計算

Formsサービスでは、ユーザーがフォームに入力した値を計算し、結果を表示できます。 フォームデータを計算するには、2つのタスクを実行する必要があります。 まず、フォームデータを計算するフォームデザインスクリプトを作成します。 フォームデザインは、3種類のスクリプトをサポートしています。 1つのスクリプトタイプはクライアントで実行され、別のスクリプトタイプはサーバーで実行され、3つ目のスクリプトタイプはサーバーとクライアントの両方で実行されます。 このトピックで説明するスクリプトタイプは、サーバー上で実行されます。 サーバー側の計算は、HTML、PDF、およびForm Guide(非推奨)の変換に対してサポートされています。

フォームデザインのプロセスの一環として、演算とスクリプトを使用し、ユーザーの操作性を向上させることができます。 演算とスクリプトは、フォーム内のほとんどのフィールドとオブジェクトに追加できます。 ユーザーがインタラクティブフォームに入力したデータに対して演算操作を実行するには、フォームデザインのスクリプトを作成する必要があります。

ユーザーがフォームに値を入力し、「Calculate」ボタンをクリックして結果を表示します。 次のプロセスは、ユーザーにデータの計算を許可するアプリケーションの例を説明しています。

  • ユーザーがStartLoan.htmlというHTMLページにアクセスし、Webアプリケーションの開始ページとして機能します。 このページはGetLoanFormという名前のJavaサーブレットを呼び出します。
  • GetLoanFormサーブレットはローンフォームをレンダリングします。 このフォームには、スクリプト、インタラクティブフィールド、計算ボタン、送信ボタンが含まれています。
  • ユーザーがフォームのフィールドに値を入力し、「計算」ボタンをクリックします。 フォームがCalculateData Javaサーブレットに送信され、スクリプトが実行されます。 フォームがユーザーに送り返され、計算結果がフォームに表示されます。
  • ユーザは、満足のいく結果が表示されるまで値の入力と計算を続けます。 問題が解決したら、「送信」ボタンをクリックしてフォームを処理します。 フォームは、送信されたデータを取得するProcessFormという別のJavaサーブレットに送信されます。 (送信されたFormsの処理を参照)。

次の図に、アプリケーションのロジックのフローを示します。

cf_cf_finsrv_loancalcapp_v1

次の表に、この図の手順を示します。

ステップ

説明

1

GetLoanForm JavaサーブレットがHTML開始ページから呼び出されます。

2

GetLoanForm Javaサーブレットは、FormsサービスクライアントAPIを使用して、ローンフォームをクライアントWebブラウザーにレンダリングします。 サーバー上で実行するように設定されたスクリプトが含まれるフォームのレンダリングと、スクリプトが含まれないフォームのレンダリングの違いは、スクリプトの実行に使用するターゲットの場所を指定する必要があるということです。 ターゲットーの場所を指定しない場合、サーバー上で実行するように設定されたスクリプトは実行されません。 例えば、この節で紹介するアプリケーションについて考えてみましょう。 CalculateData Javaサーブレットは、スクリプトが実行されるターゲットの場所です。

3

ユーザーがインタラクティブフィールドにデータを入力し、「計算」ボタンをクリックします。 フォームがCalculateData Javaサーブレットに送信され、スクリプトが実行されます。

4

フォームがWebブラウザーにレンダリングされ、計算結果がフォームに表示されます。

5

値が十分な場合は、「送信」ボタンをクリックします。 フォームは、ProcessFormという別のJavaサーブレットに送信されます。

通常、PDFコンテンツとして送信されるフォームには、クライアント上で実行されるスクリプトが含まれます。 ただし、サーバー側の計算を実行することもできます。 「送信」ボタンは、スクリプトの計算には使用できません。 この場合、Formsサービスがインタラクションを完了と見なすので、計算は実行されません。

フォームデザインのスクリプトの使用方法を説明するために、この節では、サーバー上で実行するように設定されたスクリプトを含むシンプルなインタラクティブフォームについて調べます。 次の図に示すフォームデザインには、ユーザーが最初の2つのフィールドに入力した値を追加し、その結果を3つ目のフィールドに表示するスクリプトが含まれています。

cf_cf_caldata

A. NumericField1 B. A NumericField2 C. A Field3という名前のフィールド

このフォームデザインにあるスクリプトの構文は次のとおりです。

     NumericField3 = NumericField2 + NumericField1

このフォームデザインでは、「計算」ボタンはコマンドボタンで、スクリプトはこのボタンのClickイベントにあります。 ユーザーが最初の2つのフィールド(NumericField1とNumericField2)に値を入力し、「Calculate」ボタンをクリックすると、フォームがFormsサービスに送信され、そこでスクリプトが実行されます。 Formsサービスは、フォームをクライアントデバイスにレンダリングし返し、計算の結果をNumericField3フィールドに表示します。

メモ

フォームデザインスクリプトの作成について詳しくは、「Formsデザイナ」を参照してください。

メモ

Formsサービスの詳細については、『AEM Formsのサービスリファレンス』を参照してください。

手順の概要

フォームデータを計算するには、次のタスクを実行します。

  1. プロジェクトファイルを含めます。
  2. FormsクライアントAPIオブジェクトを作成します。
  3. 演算スクリプトを含むフォームを取得します。
  4. フォームデータストリームをクライアントのWebブラウザーに書き戻します

プロジェクトファイルを含める

必要なファイルを開発プロジェクトに含めます。 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 ライブラリファイルを含める

接続プロパティの設定

FormsサービスAPIクイック開始

インタラクティブPDF formsのレンダリング

FormsをレンダリングするWeb アプリケーションの作成

Java APIを使用してフォームデータを計算する

FormsAPI(Java)を使用してフォームデータを計算するには:

  1. プロジェクトファイルを含める

    Javaプロジェクトのクラスパスに、adobe-forms-client.jarなどのクライアントJARファイルを含めます。

  2. FormsクライアントAPIオブジェクトの作成

    • 接続プロパティを含む ServiceClientFactory オブジェクトを作成します。
    • コンストラクターを使用し、FormsServiceClientオブジェクトを渡して、ServiceClientFactoryオブジェクトを作成します。
  3. 演算スクリプトを含むフォームの取得

    • 演算スクリプトを含むフォームデータを取得するには、コンストラクターを使用してcom.adobe.idp.Documentオブジェクトを作成し、コンストラクター内からjavax.servlet.http.HttpServletResponseオブジェクトのgetInputStreamメソッドを呼び出します。

    • FormsServiceClientオブジェクトのprocessFormSubmissionメソッドを呼び出し、次の値を渡します。

      • フォームデータを含むcom.adobe.idp.Documentオブジェクト。
      • 関連するすべてのHTTPヘッダーを含む環境変数を指定するstring値。 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ブラウザーに書き戻すことができます。

  4. フォームデータストリームをクライアントの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 ライブラリファイルを含める

接続プロパティの設定

WebサービスAPIを使用してフォームデータを計算する

FormsAPI(Webサービス)を使用してフォームデータを計算するには:

  1. プロジェクトファイルを含める

    • FormsサービスのWSDLを使用するJavaプロキシクラスを作成します。
    • クラスパスにJavaプロキシクラスを含めます。
  2. FormsクライアントAPIオブジェクトの作成

    FormsServiceオブジェクトを作成し、認証値を設定します。

  3. 演算スクリプトを含むフォームの取得

    • 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ヘッダーが含まれる環境変数を指定するstring値。 例えば、次の文字列値を指定できます。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ブラウザーに書き戻すことができます。

  4. フォームデータストリームをクライアントのWebブラウザーに書き戻します

    • フォームデータストリームをクライアントのWebブラウザーに送信するために使用するjavax.servlet.ServletOutputStreamオブジェクトを作成します。
    • FormsResultオブジェクトのgetOutputContentメソッドを呼び出して、フォームデータを含むBLOBオブジェクトを作成します。
    • バイト配列を作成し、BLOBオブジェクトのgetBinaryDataメソッドを呼び出して値を設定します。 このタスクは、FormsResultオブジェクトの内容をバイト配列に割り当てます。
    • javax.servlet.http.HttpServletResponseオブジェクトのwriteメソッドを呼び出して、フォームデータストリームをクライアントのWebブラウザーに送信します。 バイト配列をwriteメソッドに渡します。

関連トピック

Base64エンコーディングを使用したAEM Formsの呼び出し

このページ

Adobe Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free
Adobe Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free
Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now
Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now