フォームデータの計算

このドキュメントのサンプルと例は、JEE上のAEM Forms環境に限られています。

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

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

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

  • ユーザーは、Webアプリケーションの開始ページとして機能するStartLoan.htmlというHTMLページにアクセスします。 このページは、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. NumericField2 Cという名前のフィール​NumericField3という名前のフィールド

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

     NumericField3 = NumericField2 + NumericField1

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

メモ

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

メモ

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

手順の概要

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

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

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

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

Forms Client 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 API
APISetting connection
propertiesForms Service API Quick StartsRendering Interactive PDF
🔗
🔗
FormsForms Renders Webアプリケーションの作成

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

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

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

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

  2. Forms Client 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オブジェクトの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を使用してフォームデータを計算する

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

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

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

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

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

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

    • javax.servlet.http.HttpServletResponseオブジェクトのgetInputStreamメソッドを使用して、java.io.InputStreamオブジェクトを作成します。

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

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

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

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

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

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

      • フォームデータを格納するBLOBオブジェクト。
      • 環境変数を指定するstring値に、関連するすべてのHTTPヘッダーが含まれていました。 例えば、次の文字列値を指定できます。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の呼び出しも参照してください。

このページ