フォームデータの計算 calculating-form-data

このドキュメントのサンプルと例は、JEE 環境の AEM Forms のみを対象としています。

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

フォームデザインプロセスの一環として、演算とスクリプトを使用して、より豊かなユーザーエクスペリエンスを提供することができます。 演算とスクリプトは、ほとんどのフォームフィールドとオブジェクトに追加できます。フォームデザインスクリプトを作成して、ユーザーがインタラクティブフォームに入力したデータに対して計算操作を実行します。

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

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

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

cf_cf_finsrv_loancalcapp_v1

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

ステップ
説明
1
GetLoanForm Java サーブレットは、HTML 開始ページから呼び出されます。
2
GetLoanForm Java サーブレットは、Forms Service Client API を使用して、クライアント web ブラウザーにローンフォームをレンダリングします。サーバー上で実行するように設定されたスクリプトを含むフォームのレンダリングと、スクリプトを含まないフォームのレンダリングの違いは、スクリプトの実行に使用されるターゲットの場所を指定する必要があることです。ターゲットの場所が指定されていない場合、サーバー上で実行するように設定されたスクリプトは実行されません。例えば、この節で紹介するアプリケーションについて考えてみましょう。CalculateData Java サーブレットは、スクリプトが実行されるターゲットの場所です。
3
ユーザーがインタラクティブフィールドにデータを入力して、「計算」ボタンをクリックします。フォームが CalculateData Java サーブレットに送信され、スクリプトがそこで実行されます。
4
計算結果がフォームに表示された状態で、フォームが web ブラウザーにレンダリングされます。
5
ユーザーは、値に満足したら、「送信」ボタンをクリックします。フォームは、ProcessForm という名前の別の Java サーブレットに送信されます。

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

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

cf_cf_caldata

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

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

     NumericField3 = NumericField2 + NumericField1

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

NOTE
フォームデザインスクリプトの作成について詳しくは、Forms Designerを参照してください。
NOTE
Forms サービスについて詳しくは、AEM Forms サービスリファレンスを参照してください。

手順の概要 summary-of-steps

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

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

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

必要なファイルを開発プロジェクトに含めます。Java を使用してクライアントアプリケーションを作成する場合は、必要な JAR ファイルを含めます。Web サービスを使用している場合は、プロキシファイルを必ず含めてください。

Forms Client API オブジェクトの作成

Forms Service Client API 操作をプログラムで実行する前に、Forms サービスクライアントを作成する必要があります。Java API を使用している場合は、FormsServiceClient オブジェクトを作成します。Forms web サービス API を使用している場合は、FormsServiceService オブジェクトを作成します。

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

Forms サービスのクライアント API を使用して、サーバー上で実行するように設定されたスクリプトを含むフォームを処理するアプリケーションロジックを作成します。このプロセスは、送信されたフォームの処理に似ています。(送信済みフォームの処理を参照。)

送信されたフォームに関連付けられた処理状態が 1 (Calculate) であることを確認します。これは、Forms サービスがフォームデータに対して計算操作を実行しており、結果をユーザーに書き戻す必要があることを意味します。この場合、サーバー上で実行するように設定されたスクリプトが自動的に実行されます。

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

送信されたフォームに関連付けられている処理状態が 1 の場合は、結果をクライアント web ブラウザーに書き戻す必要があります。フォームが表示されると、計算された値が適切なフィールドに表示されます。

関連情報

AEM Forms Java ライブラリファイルを含める
Java API を使用してフォームデータを計算する
Web サービス API を使用してフォームデータを計算する
接続プロパティの設定
Forms Service API クイックスタート
インタラクティブPDF formsのレンダリング
Formsをレンダリングする Web アプリケーションの作成

Java API を使用してフォームデータを計算する calculate-form-data-using-the-java-api

Forms API(Java)を使用してフォームデータを計算します。

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

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

  2. Forms Client API オブジェクトの作成

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

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

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

      • フォームデータを含む com.adobe.idp.Document オブジェクト。
      • 関連するすべての HTTP ヘッダーを含む環境変数を指定する文字列値。CONTENT_TYPE 環境変数に 1 つ以上の値を指定して、処理するコンテンツタイプを指定します。例えば、XML データと PDF データを処理するには、このパラメーターに文字列値「CONTENT_TYPE=application/xml&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 オブジェクトを返します。

    • 送信されたフォームに関連付けられている処理状態が 1 を呼び出すことによって FormsResult オブジェクトの getAction メソッド。 このメソッドが値 1 を返した場合、計算は実行されており、データをクライアントの web ブラウザーに書き戻すことができます。

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

    • フォームデータストリームをクライアント web ブラウザーに送信するために使用される javax.servlet.ServletOutputStream オブジェクトを作成します。
    • の作成 com.adobe.idp.Document を呼び出すことによって、オブジェクトを FormsResult オブジェクトの getOutputContent メソッド。
    • の作成 java.io.InputStream を呼び出すことによって、オブジェクトを com.adobe.idp.Document オブジェクトの getInputStream メソッド。
    • バイト配列を作成し、 InputStream オブジェクトの read メソッドを使用し、バイト配列を引数として渡す。
    • を呼び出す javax.servlet.ServletOutputStream オブジェクトの write メソッドを使用して、フォームデータストリームをクライアント Web ブラウザーに送信します。 バイト配列を write メソッドに渡します。

関連トピック

AEM Forms Java ライブラリファイルを含める
接続プロパティの設定

Web サービス API を使用したフォームデータの計算 calculate-form-data-using-the-web-service-api

Forms API(web サービス)を使用してフォームデータを計算します。

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

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

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

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

    • Java サーブレットにポストされたフォームデータを取得するには、コンストラクターを使用して BLOB オブジェクトを作成します。

    • の作成 java.io.InputStream オブジェクトを javax.servlet.http.HttpServletResponse オブジェクトの getInputStream メソッド。

    • コンストラクターを使用して java.io.InputStream オブジェクトの長さを渡すことによって、java.io.ByteArrayOutputStream オブジェクトを作成します。

    • java.io.InputStream オブジェクトの内容を java.io.ByteArrayOutputStream オブジェクトにコピーします。

    • を呼び出してバイト配列を作成する java.io.ByteArrayOutputStream オブジェクトの toByteArray メソッド。

    • setBinaryData メソッドを呼び出してバイト配列を引数として渡すことによって、BLOB オブジェクトに入力します。

    • コンストラクターを使用して RenderOptionsSpec オブジェクトを作成します。を呼び出してロケール値を設定します。 RenderOptionsSpec オブジェクトの setLocale メソッドを使用して、ロケール値を指定する string 値を渡す。

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

      • フォームデータを格納する BLOB オブジェクト。
      • 関連するすべての HTTP ヘッダーが含まれる環境変数を指定する文字列の値。例えば、次の文字列の値を指定できます。HTTP_REFERER=referrer&HTTP_CONNECTION=keep-alive&CONTENT_TYPE=application/xml
      • 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 パラメーターに入力します。processFormSubmission メソッドは、フォーム送信の結果を含む FormsResult オブジェクトを返します。

    • 送信されたフォームに関連付けられている処理状態が 1 を呼び出すことによって FormsResult オブジェクトの getAction メソッド。 このメソッドが値 1 を返した場合、計算は実行されており、データをクライアントの web ブラウザーに書き戻すことができます。

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

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

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

recommendation-more-help
19ffd973-7af2-44d0-84b5-d547b0dffee2