スクリプトの実行

フォームの作成者は、スクリプトをサーバー上で実行するかクライアント上で実行するかを指定します。Forms サービスは、runAt 属性を使用してクライアントとサーバー間で分散できるフォームインテリジェンスを実行するための分散イベント処理環境を作成します。この属性やフォームデザイン内でのスクリプトの作成について詳しくは、Forms Designer を参照してください。

Forms サービスは、フォームのレンダリング中にスクリプトを実行できます。その結果、データベースに接続するか、クライアント上で使用できない web サービスに接続することで、フォームにデータを事前入力できます。また、ボタンの Click イベントをサーバーで実行するように設定して、クライアントがデータをサーバーにラウンドトリップするようにすることもできます。これにより、ユーザーがフォームを操作している間に、エンタープライズデータベースなどのサーバーリソースを必要とする可能性のあるスクリプトをクライアントが実行できます。HTML フォームの場合、formcalc スクリプトはサーバー上でのみ実行できます。その結果、これらのスクリプトを server または both で実行するように指定する必要があります。

ページ(パネル)間を移動するフォームは、xfa.host.pageUp および xfa.host.pageDown メソッドを呼び出すことによって設計できます。このスクリプトはボタンの Click イベントに配置され、runAt 属性は Both に設定されます。Both を選択する理由は、(PDF としてレンダリングされるフォームの場合)Adobe Reader や Acrobat がサーバーに移動せずにページを変更でき、HTML フォームがサーバーにデータをラウンドトリップさせずにページを変更できるようにするためです。つまり、あるフォームは Forms サービスに送信され、あるフォームは新しいページを表示する HTML としてレンダリングされます。

スクリプト変数やフォームフィールドには、同じ名前(item など)を付けないことをお勧めします。Internet Explorer などの一部の web ブラウザーでは、フォームフィールドと同じ名前の変数が初期化されず、スクリプトエラーが発生する場合があります。フォームフィールドとスクリプト変数に異なる名前を付けることをお勧めします。

ページナビゲーション機能とフォームスクリプトの両方を含む HTML フォームをレンダリングする場合(例えば、フォームがレンダリングされるたびにスクリプトがデータベースからフィールドデータを取得するような場合)、フォームスクリプトが form:ready イベントではなく form:calculate イベント内に配置する必要があります。

form:ready イベントにあるフォームスクリプトは、フォームの最初のレンダリング時に 1 回だけ実行され、以降のページ取得時には実行されません。これに対し、 form:calculate イベントは、フォームがレンダリングされるページナビゲーションごとに実行されます。

NOTE
複数ページフォームでは、JavaScript によってページに加えられた変更は、別のページに移動しても保持されません。

フォームを送信する前にカスタムスクリプトを呼び出すことができます。この機能は、使用可能なすべてのブラウザーで機能します。ただし、Output Type プロパティが Form Body に設定されている HTML フォームをレンダリングする場合にのみ使用できます。Output TypeFull HTML の場合には機能しません。この機能を設定する手順については、管理ヘルプの「フォームの設定」を参照してください。

フォームを送信する前に、呼び出すコールバック関数を定義します。ここで、関数の名前は _user_onsubmit です。この関数は例外をスローしないと想定されます。例外がスローされても無視されます。JavaScript 関数は HTML の HEAD セクションに配置することをお勧めしますが、xfasubset.js を含むスクリプトタグが終わる前であれば任意の場所で宣言できます。

フォームサーバーがドロップダウンリストを含む XDP をレンダリングすると、ドロップダウンリストの作成に加えて、2 つの非表示のテキストフィールドも作成されます。これらのテキストフィールドには、ドロップダウンリストのデータが格納されます(一方にはオプションの表示名が格納され、もう一方にはオプションの値が格納されます)。そのため、ユーザーがフォームを送信するたびに、ドロップダウンリストのデータ全体が送信されます。毎回それほど多くのデータを送信しない場合は、それを無効にするカスタムスクリプトを作成できます。例:ドロップダウンリストの名前は drpOrderedByStateProv で、サブフォームヘッダーの下にラップされます。HTML 入力要素の名前は header[0].drpOrderedByStateProv[0] になります。ドロップダウンのデータを格納して送信する非表示フィールドの名前には、header[0].drpOrderedByStateProv_DISPLAYITEMS_[0] header[0].drpOrderedByStateProv_VALUEITEMS_[0] という名前が付けられます。

データをポストしない場合は、次の方法でこれらの入力要素を無効にできます。var __CUSTOM_SCRIPTS_VERSION = 1; //enabling the feature function _user_onsubmit() { var elems = document.getElementsByName("header[0].drpOrderedByStateProv_DISPLAYITEMS_[0]"); elems[0].disabled = true; elems = document.getElementsByName("header[0].drpOrderedByStateProv_VALUEITEMS_[0]"); elems[0].disabled = true; }

header[0].drpOrderedByStateProv_DISPLAYITEMS_[0] header[0].drpOrderedByStateProv_VALUEITEMS_[0]
var __CUSTOM_SCRIPTS_VERSION = 1; //enabling the feature
    function _user_onsubmit() {
    var elems = document.getElementsByName("header[0].drpOrderedByStateProv_DISPLAYITEMS_[0]");
    elems[0].disabled = true;
    elems = document.getElementsByName("header[0].drpOrderedByStateProv_VALUEITEMS_[0]");
    elems[0].disabled = true;
    }

XFA サブセット

HTML としてレンダリングするフォームデザインを作成する場合は、JavaScript 言語のスクリプトの XFA サブセットにスクリプティングを制限する必要があります。

クライアント上で実行される、またはクライアントとサーバーの両方で実行されるスクリプトは、XFA サブセット内で記述する必要があります。サーバー上で実行されるスクリプトは、完全な XFA スクリプティングモデルを使用でき、FormCalc も使用できます。JavaScript の使用について詳しくは、 Forms Designerを参照してください。

クライアントでスクリプトを実行する場合、表示されている現在のパネルだけがスクリプトを使用できます。例えば、パネル B が表示されているときに、パネル A にあるフィールドに対するスクリプトを記述することはできません。サーバーでスクリプトを実行すると、すべてのパネルにアクセスできます。

また、クライアントで実行するスクリプト内で Scripting Object Model(SOM)式を使用する場合は注意が必要です。クライアントで実行するスクリプトでは、簡単化された SOM 式のサブセットのみをサポートしています。

イベントのタイミング

XFA サブセットは、HTML イベントにマップされる XFA イベントを定義します。イベントの計算と検証のタイミングには、動作にわずかな違いがあります。Web ブラウザーでは、フィールドを終了すると、完全な calculate イベントが実行されます。フィールド値を変更した場合、calculate イベントは自動的には実行されません。calculate イベントを強制的に実行するには、xfa.form.execCalculate メソッドを呼び出します。

Web ブラウザーでは、validate イベントは、フィールドを終了するかフォームを送信する場合にのみ実行されます。validate イベントを強制的に実行するには xfa.form.execValidate メソッドを呼び出します。

Web ブラウザー(Adobe Reader や Acrobat とは異なり)に表示されるフォームは、必須フィールドの XFA null テスト(エラーまたは警告)に準拠しています。

  • null テストでエラーが発生し、値を指定せずにフィールドを終了した場合は、メッセージボックスが表示され、「OK」をクリックした後にそのフィールドに再配置されます。
  • null テストで警告が生成され、値を指定せずにフィールドを終了した場合、「OK」または「キャンセル」をクリックするように促されます。「OK」は値を指定せずに続行し、「キャンセル」は値を入力するフィールドに戻ります。

null テストについて詳しくは、Forms Designer を参照してください。

フォームボタン

「送信」ボタンをクリックすると、フォームデータが Forms サービスに送信され、フォームの処理を終了します。preSubmit イベントは、クライアントまたはサーバーで実行するように設定できます。preSubmit イベントは、フォーム送信の前に実行されます(クライアント上で実行するように設定されている場合)。それ以外の場合は、preSubmit イベントは、フォームの送信中にサーバーで実行されます。preSubmit イベントについて詳しくは、Forms Designer を参照してください。

ボタンにクライアントサイドのスクリプトが関連付けられていない場合、データがサーバーに送信され、サーバー上で計算が実行されて HTML フォームが再生成されます。ボタンにクライアントサイドのスクリプトが含まれている場合、データはサーバーに送信されず、クライアント側のスクリプトが web ブラウザーで実行されます。

HTML 4.0 web ブラウザー

HTML 4.0 のみをサポートする web ブラウザーは、XFA サブセットのクライアントサイドスクリプティングモデルをサポートできません。HTML 4.0 と MSDHTML または CSS2 HTML の両方で動作するフォームデザインを作成する場合、クライアントで実行するようにマークされたスクリプトは、サーバー上で実際に実行されます。例えば、HTML 4.0 web ブラウザーで表示されているフォーム上のボタンをユーザーがクリックしたとします。この場合、フォームデータはクライアントサイドスクリプトが実行されるサーバーに送信されます。

HTML 4.0 のサーバーと、MSDHTML または CSS2HTML 用のクライアントで実行する calculate イベントに、フォームロジックを配置することをお勧めします。

プレゼンテーションの変更の維持

HTML ページ(パネル)間を移動すると、データの状態のみが保持されます。背景色や必須フィールド設定などの設定は維持されません(初期設定と異なる場合)。プレゼンテーションの状態を維持するには、フィールドのプレゼンテーションの状態を表すフィールド(通常は非表示)を作成する必要があります。非表示のフィールド値に基づいて、プレゼンテーションを変更するフィールドの Calculate イベントにスクリプトを追加すると、HTML ページ(パネル)間を移動するときにプレゼンテーションの状態を維持できます。

次のスクリプトは、hiddenField の値に基づいてフィールドの fillColor を保持します。このスクリプトがフィールドの Calculate イベントにあるとします。

     If (hiddenField.rawValue == 1)
         this.fillColor = "255,0,0"
     else
         this.fillColor = "0,255,0"
NOTE
テーブルのセル内にネストされている場合、スタティックオブジェクトはレンダリングされた HTML フォームには表示されません。例えば、テーブルのセル内にネストされた円や長方形は、レンダリングされた HTML フォーム内には表示されません。ただし、テーブルの外側に配置されている場合は、同じスタティックオブジェクトが正しく表示されます。

デジタル署名用 HTML フォーム

フォームが以下の HTML 変換のいずれかとしてレンダリングされている場合、デジタル署名フィールドを含む HTML 署名フォームには署名できません。

  • AHTML
  • HTML4
  • StaticHTML
  • NoScriptXHTML

ドキュメントのデジタル署名については、 ドキュメントのデジタル署名と認証を参照してください。

アクセシビリティガイドラインに準拠した XHTML フォームのレンダリング

アクセシビリティガイドラインに準拠する完全な HTML フォームをレンダリングできます。つまり、本文タグ内でレンダリングされる HTML フォームとは異なり、フォームは完全な HTML タグ内でレンダリングされます(完全な HTML ページではありません)。

フォームデータの検証

フォームを HTML フォームとしてレンダリングする場合、フォームフィールドに対する検証ルールの使用を制限することをお勧めします。一部の検証ルールは、HTML フォームでサポートされていない可能性があります。例えば、MM-DD-YYYY という検証パターンを HTMLフォームとしてレンダリングされているフォームデザインの Date/Time フィールドに適用する場合、日付が正しく入力されていても、適切に機能しません。ただし、この検証パターンは、PDF としてレンダリングされているフォームに対しては適切に機能します。

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

手順の概要

HTMLフォームをレンダリングするには、次の手順を実行します。

  1. プロジェクトファイルを含めます。
  2. Forms Client API オブジェクトを作成します。
  3. HTML の実行時オプションを設定します。
  4. HTML フォームをレンダリングします。
  5. フォームデータストリームをクライアントの Web ブラウザーに書き込みます。

プロジェクトファイルの組み込み

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

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

データをプログラムによって PDF formClient API に読み込む前に、Form Data Integration サービスクライアントを作成する必要があります。サービスクライアントを作成する場合、サービスを呼び出すために必要な接続設定を定義します。

HTML 実行時オプションを設定

HTML フォームのレンダリング時に、HTML 実行時オプションを設定します。例えば、HTML フォームにツールバーを追加すると、クライアントコンピューター上の添付ファイルを選択したり、HTML フォームでレンダリングされた添付ファイルを取得したりできます。デフォルトでは、HTML ツールバーは無効になっています。ツールバーを HTML フォームに追加するには、実行時オプションをプログラムによって設定する必要があります。デフォルトでは、HTML ツールバーは次のボタンで構成されています。

  • Home:アプリケーションの web ルートへのリンクを提供します。
  • Upload:現在のフォームに添付するファイルを選択するためのユーザーインターフェイスを提供します。
  • Download:添付ファイルを表示するユーザインタフェースを提供します。

HTML フォーム上に HTML ツールバーが表示されている場合、ユーザーは最大 10 個のファイルを選択して、フォームデータと共に送信することができます。ファイルが送信されると、Forms サービスはファイルを取得することができます。

フォームを HTML としてレンダリングする際に、ユーザーエージェント値を指定することができます。ユーザーエージェント値は、ブラウザーとシステムの情報を提供します。これはオプションの値で、空の文字列値を渡すことができます。Java API クイックスタートを使用した HTML フォームのレンダリングでは、ユーザーエージェント値を取得する方法、それを使用してフォームを HTML としてレンダリングする方法を示しています。

フォームデータの投稿先となる HTTP URL は、Forms サービスクライアント API を使用してターゲット URL を設定することで指定するか、XDP フォームデザインに含まれる「送信」ボタンで指定することもできます。ターゲット URL がフォームデザインで指定されている場合は、Forms サービスクライアント API を使用して値を設定しないでください。

NOTE
ツールバーを含む HTML フォームのレンダリングはオプションです。
NOTE
AHTML フォームをレンダリングする場合は、ツールバーをフォームに追加しないことをお勧めします。

HTML フォームをレンダリング

HTML フォームをレンダリングするには、Designer で作成され XDP ファイルとして保存されたフォームデザインを指定します。HTML 変換タイプを選択します。たとえば、Internet Explorer 5.0 以降のダイナミック HTML をレンダリングする HTML 変換タイプを指定できます。

HTML フォームのレンダリングには、他のフォームタイプのレンダリングに必要な URI 値などの値も必要です。

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

Forms サービスが HTML フォームをレンダリングすると、クライアント web ブラウザーに書き込む必要があるフォームデータストリームが返されます。クライアント web ブラウザーに書き込まれると、HTML フォームがユーザーに対して表示されます。

関連トピック

Java API を使用してフォームを HTML としてレンダリングする

Web サービス API を使用してフォームを HTML としてレンダリングする

AEM Forms Java ライブラリファイルを含める

接続プロパティの設定

Forms サービス API のクイックスタート

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

カスタムツールバーを持つ HTML Forms のレンダリング

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