161
Designer スクリプティング基礎 AEM 6.2 Forms

Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

  • Upload
    others

  • View
    10

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

Designer スクリプティング基礎

AEM 6.2 Forms

Page 2: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

最終更新日 2018年4月12日

法的通知法律上の注意については、https://helpx.adobe.com/jp/legal/legal-notices.htmlを参照してください。

Page 3: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

i

目次

このドキュメントの内容 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1目的と対象範囲 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1追加情報 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

Designer を使用したスクリプティング . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3スクリプティングが機能する仕組み . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3演算とスクリプトをサポートするオブジェクト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4オブジェクトライブラリのオブジェクト間の関係について . . . . . . . . . . . . . . . . . . . . . . . 5スクリプトエディター . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

スクリプティングのための Designer の設定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8スクリプトエディターを表示するには . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 行表示から複数行表示に変更するには . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8新規フォームのデフォルトのスクリプト言語を設定するには . . . . . . . . . . . . . . . . . . . . . . 8現在のフォームのデフォルトのスクリプト言語を設定するには . . . . . . . . . . . . . . . . . . . . . 8現在のフォームのデフォルトのスクリプト言語を設定するには . . . . . . . . . . . . . . . . . . . . . 9フォームテンプレートのデフォルトスクリプト言語を設定するには . . . . . . . . . . . . . . . . . . 9フォームテンプレートのデフォルトスクリプト言語を設定するには . . . . . . . . . . . . . . . . . . 9デフォルトの処理アプリケーションを設定するには . . . . . . . . . . . . . . . . . . . . . . . . . . .10デフォルトの処理アプリケーションを設定するには . . . . . . . . . . . . . . . . . . . . . . . . . . .10フォームテンプレートのデフォルトの処理アプリケーションを変更するには . . . . . . . . . . . . .10フォームテンプレートのデフォルトの処理アプリケーションを変更するには . . . . . . . . . . . . .11アラビア文字、ヘブライ文字、タイ文字、ベトナム文字を表示するには . . . . . . . . . . . . . . . .11ワークスペースを使用した演算とスクリプトのデバッグ . . . . . . . . . . . . . . . . . . . . . . . . .12

演算とスクリプトの作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14フォームデザインのオブジェクトおよび変数の命名規則 . . . . . . . . . . . . . . . . . . . . . . . . .14スクリプト言語の選択 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15演算またはスクリプトを作成するには . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16演算またはスクリプトを作成するには . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .17テキストまたはその他の項目を検索するには . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18

Page 4: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

ii

テキストまたはその他の項目を置換するには . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .19ステートメント完了を使用して演算とスクリプトを作成するには . . . . . . . . . . . . . . . . . . . .20オブジェクト参照構文を自動的に挿入するには . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .20演算またはスクリプトを実行するタイミングの指定 . . . . . . . . . . . . . . . . . . . . . . . . . . .21スクリプティングイベントおよびスクリプトを表示するには . . . . . . . . . . . . . . . . . . . . . .22演算またはスクリプトの実行場所の指定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .24演算とスクリプトのテストおよびデバッグ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .24スクリプトの構文をチェックするには . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .25セキュリティ制約への対処 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .26

イベント . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27イベントのタイプ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .27プロセスイベント . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .28インタラクティブイベント . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .29アプリケーションイベント . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .32calculate イベント . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .33change イベント . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .34click イベント . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .36docClose イベント . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .37docReady イベント . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .38enter イベント . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .39exit イベント . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .40form:ready イベント . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .41full イベント . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .42indexChange イベント . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .43initialize イベント . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .44layout:ready イベント . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .45mouseDown イベント . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .46mouseEnter イベント . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .47mouseExit イベント . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .48mouseUp イベント . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .49postOpen イベント . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .50postPrint イベント . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .51postSave イベント . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .52postSign イベント . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .53postSubmit イベント . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .54preOpen イベント . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .55prePrint イベント . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .56preSave イベント . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .57preSign イベント . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .58preSubmit イベント . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .59validate イベント . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .60

Page 5: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

iii

FormCalcおよびJavaScriptによるスクリプティング . . . . . . . . . . . . . . . . . . . . . . . . . . . 61FormCalc の使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .65組み込み関数の使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .65基本計算の作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .67JavaScript の使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .69JavaScript を使用したスクリプトの作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .69JavaScript での厳密なスコープ規則の強制 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .70JavaScript スクリプトをオブジェクトに追加するには . . . . . . . . . . . . . . . . . . . . . . . . . .74

変数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75変数名の設定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .75テキスト変数を定義するには . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .75テキスト変数を定義するには . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .76テキスト変数の定義を表示するには . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .77テキスト変数の定義を表示するには . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .77テキスト変数を削除するには . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .77テキスト変数を削除するには . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .77演算とスクリプトでの変数の使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .78

演算とスクリプトでのオブジェクトの参照 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79オブジェクトのプロパティおよび値の参照 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .80名称未設定オブジェクトと繰り返しオブジェクトの参照 . . . . . . . . . . . . . . . . . . . . . . . . .82現在のオブジェクトの参照 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .84FormCalc 参照構文のショートカット . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .85

JavaScript 関数の作成と再利用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92スクリプトオブジェクトを作成するには . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .92スクリプトをスクリプトオブジェクトに追加するには . . . . . . . . . . . . . . . . . . . . . . . . . .93スクリプトオブジェクトに保存されたJavaScript関数を参照するには . . . . . . . . . . . . . . . . . .93

スクリプトフラグメントの使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95スクリプトフラグメントのプロパティ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .95スクリプトフラグメントを作成するには . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .96スクリプトフラグメントを挿入するには . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .96

演算とスクリプトのデバッグ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98Designerのレポートパレットの警告メッセージおよび検証メッセージ . . . . . . . . . . . . . . . . .98messageBoxメソッドを使用したデバッグのフィードバックの提供 . . . . . . . . . . . . . . . . . . .98FormCalc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .99JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .99テキストフィールドへの情報の出力 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .99JavaScript のデバッグ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .99デバッグのヒント . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102

Page 6: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

iv

ホストアプリケーションの使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106ホストスクリプトモデルのプロパティおよびメソッド . . . . . . . . . . . . . . . . . . . . . . . . . 106ホストスクリプトモデル機能の比較 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107

イベントモデルの使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109イベントモデルのプロパティとメソッド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

AcrobatのスクリプティングからDesignerへの移行 . . . . . . . . . . . . . . . . . . . . . . . . . . . 111スクリプトを含む Acrobat フォームの変換 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112Designer での Acrobat の JavaScript オブジェクトの使用 . . . . . . . . . . . . . . . . . . . . . . . 112Designer でサポートされる Acrobat の JavaScript オブジェクト . . . . . . . . . . . . . . . . . . . 113

一般的なスクリプティングタスクの例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126フィールド、入力可能な領域およびサブフォームの背景色の変更 . . . . . . . . . . . . . . . . . . . 126オブジェクトの表示および非表示 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128タブ順序からのオブジェクトの除外 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132クライアントでのオブジェクトの視覚プロパティの変更 . . . . . . . . . . . . . . . . . . . . . . . . 133コンボボックスの現在または以前の値の取得 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137フィールドの値のコピー時のリッチテキストの書式設定の保持 . . . . . . . . . . . . . . . . . . . . 138実行時のフィールドの高さの調整 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139実行時の必須フィールドの設定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139フィールドの合計の計算 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140フォームの入力者のインタラクションに応答するフィールドのハイライト表示 . . . . . . . . . . . 141現在のサブフォームの値のリセット . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145フォームデザインのオブジェクトの配置の変更 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146インスタンスマネージャーのプロパティを使用したサブフォームの制御 . . . . . . . . . . . . . . . 147インスタンスマネージャーのメソッドを使用したサブフォームの制御 . . . . . . . . . . . . . . . . 149インスタンスマネージャーを使用した実行時のサブフォームの制御 . . . . . . . . . . . . . . . . . 151

Page 7: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

このドキュメントの内容

1

1. このドキュメントの内容

Designerスクリプティング基礎へようこそ。 スクリプティング基礎では、Designerの演算とスクリプトを使用してDesignerでフォームを開発したり、作成済みのフォームを拡張したりする方法の概要を示します。

例えば、演算とスクリプトを使用して次のような操作を行うことができます。

• 実行時にオブジェクトの動作と外観を変更する

• フィールド値のプレゼンテーションを制御する

• ダイアログボックスや視覚的キューを使用してフォーム入力者とやり取りする

• フォーム入力を自動化する

• ホスト環境を制御する

• Web サービスとやり取りする

• データベースとやり取りし、データソースのデータをフォームに埋め込む

注:このドキュメントでは、Adobe Experience Manager Forms、AEM Forms、JEE 上の AEM Forms、LiveCycle が同じ意味で使用されています。

1.1. 目的と対象範囲

スクリプティング基礎 は、演算とスクリプトを使用して Designer フォームを拡張しようと考えているフォーム作成者およびフォーム開発者向けのガイドです。ただし、読者がスクリプト言語(特に JavaScript™)およびオブジェクトモデルの処理方法を知っていることを前提にしています。また、Adobe® Acrobat®Professional または Acrobat Standard に習熟し、構造化された XML 環境での作業に慣れている必要もあります。

スクリプティング基礎 の目的は次の情報を読者に提供することです。

• Designer の演算とスクリプトを使用してフォームを拡張する方法の紹介

• Designer の演算とスクリプト機能のわかりやすい詳細情報と例

• Designer のスクリプティングおよび関連テクノロジに関するさらに詳しいリソースへの参照

このガイドを読み終われば、Designer の演算とスクリプトを使用する準備ができます。開発過程で、このガイドの説明と例で示された指示や基礎知識を参照すれば、プロジェクトを問題なく完成させることができます。

Page 8: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

このドキュメントの内容 1

2

1.2. 追加情報

Adobe には、フォーム作成者およびフォーム開発者を対象とした、Designer スクリプティングに関するさまざまなリソースがあります。

1.2.1. Designer ヘルプ

演算とスクリプトの使用に関する情報を含む、製品の使い方の詳細が記載されています。Designer に関するトピックの情報は、最初にヘルプで検索してください。 Designer ヘルプ には、「ヘルプ」メニューからアクセスできます。また、 Designer ヘルプにオンラインでアクセスすることもできます。

1.2.2. スクリプティング基礎

Designerで使用する演算とスクリプトの作成の概要が示されています。これは、FormCalcおよび JavaScriptを使用して演算とスクリプトを作成する際のガイドです。

1.2.3. スクリプティングリファレンス

『スクリプティングリファレンス』では、Designerで使用可能なモデル、オブジェクト、プロパティ、メソッドについて詳しく説明しています。この PDF はリファレンス資料です。演算やスクリプトの作成方法に関する情報を提供するものではありません。

「 スクリプティングリファレンス」を参照してください。

1.2.4. ユーザーフォーラム

Designer フォーラムは、Designer に関する問題について議論する専門家が集う場所です。読者の質問に応えたり、製品のバグや問題点を報告したり、他のフォーム作成者や Adobe の専門家に自分の質問を投稿したりします。詳しくは、 www.adobeforums.comを参照してください。

1.2.5. スクリプティングサンプル

スクリプティングサンプルは、サンプルの作成方法とフォームの作成および表示に使用するサンプルデータに関する説明が含まれる実用フォームまたはパッケージです。新しいサンプルは、Adobe の専門家およびサードパーティによって順次追加されます。 デベロッパーセンターを参照してください。

Page 9: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

Designer を使用したスクリプティング

3

2. Designer を使用したスクリプティング

フォームデザインのプロセスの中で、フォーム作成者は演算とスクリプトを使用してユーザーにとっての利便性を向上させることができます。演算とスクリプトは、フォーム内のほとんどのフィールドやオブジェクトに追加することができます。例えば、次の JavaScript スクリプトでは 2 つの数値フィールドの値を乗算し、その結果を 3 つ目の数値フィールドに表示します。

NumericField3.rawValue = NumericField1.rawValue * NumericField2.rawValue;

さらに高度な操作として、特定の目的のカスタムフォームに合わせて独自の関数を作成することもできます。

Designer は 2 種類のスクリプト言語をサポートしています。フォーム作成者は、目的に合わせて言語を使い分けてください。FormCalc はシンプルで使いやすい計算言語で、一般的な表計算の機能をモデル化したものです。FormCalc には、フォームのデザインに必要な時間を短縮するためのさまざな組み込み関数が搭載されています。JavaScript は多彩な機能を持つスクリプト言語で、スクリプトを非常に柔軟に記述し、スクリプト言語に関する既知の情報を最大限に活用することを可能にします。

フォーム上でのスクリプティングは必須の操作ではありません。ユーザーの利便性を高めるためにスクリプティングを利用することもできますが、Designer では、フォーム作成のための便利な機能のほとんどがスクリプトなしで使用できます。ただし、スクリプティングを利用すると、フォームデザインのあらゆる要素について細かな設定と制御が可能になります。

注:ツールメニューのアクションビルダーダイアログボックスを使用すると、スクリプトを記述しないで、編集可能なレイアウトを含むフォームに一般的なインタラクティブ機能を作成できます。

2.1. スクリプティングが機能する仕組み

Designer のスクリプティングでは、イベントベースのモデルにより、フォーム内のオブジェクトに対して実行時に様々な変更を加えることができます。フォーム作成者は、スクリプトを実行したいタイミングに応じた方法でオブジェクトにスクリプトを追加します。例えば、次のスクリプトをボタンオブジェクトのclick イベントに対して設定した場合、そのボタンがユーザーにクリックされた時点でメッセージボックスが開き、メッセージが表示されます。

xfa.host.messageBox("This is a message for a form filler.", "User Feedback", 3);

特定のイベントに関連付けられたスクリプトは、そのイベントが発生するたびに実行されます。イベントによっては 1 回のフォーム入力セッション内で複数回発生する場合があります。例えば、次のスクリプトでは数値フィールドの現在の値を 1 増やします。

NumericField1.rawValue = NumericField1.rawValue + 1;

このスクリプトを NumericField1 の calculate イベントに設定したとすると 、フォームを初めて開いたとき NumericField1 に 2 が表示されます。これは、フォームが開く際の一連のイベントの中でcalculate イベントは 2 回発生することを示しています。

Page 10: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

Designer を使用したスクリプティング 2

4

関連するリンク:イベント

演算とスクリプトをサポートするオブジェクト

オブジェクトライブラリのオブジェクト間の関係について

2.2. 演算とスクリプトをサポートするオブジェクト

次の表は、Designer のライブラリパレットに標準で含まれているオブジェクトに関してスクリプトのサポート状況をまとめたクイックリファレンスです。

関連するリンク:オブジェクトライブラリのオブジェクト間の関係について

演算とスクリプトをサポートするオブジェクト 演算とスクリプトをサポートしないオブジェクト

バーコード 丸

ボタン コンテンツ領域

チェックボックス 線グラフ

日付 / 時間フィールド 四角形

十進数フィールド 画像

署名フィールド サブフォームセット

コンボボックス テーブルセクション

電子メール送信ボタン テキスト

HTTP 送信ボタン

画像フィールド

リストボックス

数値フィールド

Paper Forms Barcode

パスワードフィールド

印刷ボタン

ラジオボタン

リセットボタン

サブフォーム

テーブル(ボディ行、ヘッダー行およびフッター行を含む)

テキストフィールド

Page 11: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

Designer を使用したスクリプティング

5

2.3. オブジェクトライブラリのオブジェクト間の関係について

Designer で演算やスクリプトを作成する場合は、スクリプトを追加するオブジェクトが、実際には基盤となる XML フォームアーキテクチャの XML オブジェクトとして定義されていることを頭に入れておく必要があります。したがって、オブジェクトライブラリパレットの「標準」タブには様々なオブジェクトが含まれていますが、これらの多くのオブジェクトは同じ XML オブジェクトによって定義されています。このため、使用できる様々なスクリプティングプロパティやスクリプティングメソッドは、オブジェクトライブラリパレットのオブジェクトではなく、XML オブジェクトの定義に基づいています。

オブジェクトライブラリパレットの「標準」タブに含まれるオブジェクトで、同じ基盤の XML オブジェクト定義に基づくものは、共通のプロパティとメソッドのセットを使用します。 スクリプティングオブジェクトセクションを参照すると、対応する基盤の XML オブジェクトに基づくプロパティとメソッドのセットを確認できます。また、基盤の XML オブジェクト定義ごとに、特に Designer オブジェクトの外観を制御する子オブジェクトが含まれています。

例えば、Designer の日付 /時間フィールドオブジェクトで使用可能なプロパティとメソッドを参照する場合は、 field オブジェクトから開始します。 日付 /時間フィールドの外観を制御する、対応する XML オブジェクトを参照する場合は、 dateTimeEdit オブジェクトを確認してください。

次の表に、Designerのオブジェクトライブラリパレットの「標準」タブに表示されるオブジェクトと、対応する XML フォームアーキテクチャオブジェクトの対応関係を示します。

標準オブジェクトライブラリオブジェクトXML フォームアーキテクチャオブジェクト(ベース)

XML フォームアーキテクチャオブジェクト(UI)

バーコード field barcode

ボタン field button

チェックボックス field checkButton

日付 / 時間フィールド field dateTime

十進数フィールド field numericEdit

署名フィールド field signature

コンボボックス field choiceList

電子メール送信ボタン field button

HTTP 送信ボタン field button

画像フィールド field imageEdit

リストボックス field choiceList

数値フィールド field numericEdit

Paper Forms Barcode field barcode

パスワードフィールド field passwordEdit

印刷ボタン field button

Page 12: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

Designer を使用したスクリプティング 2

6

関連するリンク:演算とスクリプトをサポートするオブジェクト

2.4. スクリプトエディター

フォームの演算やスクリプトを作成、修正および表示するには、スクリプトエディターを使用します。例えば、2つの数値フィールドを合計する単純な計算のスクリプトや、エンドユーザーの操作に応じてフォームの外観を変更する複雑なスクリプトを作成できます。Designer は、FormCalc と呼ばれる Designer 独自のスクリプト言語でのスクリプティングと JavaScript でのスクリプティングをサポートしています。

デフォルトでは、スクリプトエディターは Designer ワークスペースの上端に表示されます。スクリプトエディターには 1 行表示と複数行表示という 2 つの表示モードがあり、必要に合わせてどちらかを選択できます。1 行表示では、レイアウトエディターと他のパレット用のスペースが最大限に表示されます。複数行表示では、スクリプトを書くためのスペースが最大限に表示されます。

表示

ユーザー定義のスクリプティングのためのフォームデザインのイベントをすべて表示します。目的のオブジェクトに適用できないイベントは灰色で表示されます。演算やスクリプトを含むイベントは、名前の横にアスタリスク(*)が表示されます。

子オブジェクトのイベントを表示ボタン

現在のオブジェクトおよびすべての子オブジェクトについて、イベントリストで現在選択しているイベントを表示します。階層パレットで最上位のオブジェクトを選択している場合、このオプションでは、フォーム上のすべてのオブジェクトに対してイベントリストで現在選択しているイベントが表示されます。

関数

言語リストで現在選択しているスクリプティング言語に応じて、使用可能な FormCalc またはJavaScript 組み込み関数のリストを表示します。

スクリプト編集フィールドに関数を配置し、一覧から関数を選択して Enter キーを押します。

スクリプトの構文をチェック

フォームに含まれるすべてのスクリプトの構文が正しいかどうかチェックし、エラーがあればレポートパレットの「警告」タブに表示します。

ラジオボタン field checkButton

リセットボタン field button

サブフォーム subform 該当なし

テーブル(ボディ行、ヘッダー行およびフッター行を含む) subform 該当なし

テキストフィールド field textEdit

標準オブジェクトライブラリオブジェクトXML フォームアーキテクチャオブジェクト(ベース)

XML フォームアーキテクチャオブジェクト(UI)

Page 13: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

Designer を使用したスクリプティング

7

言語

現在の演算やスクリプトに使用するスクリプト言語を指定します。2 つのオプションを指定できます。

• FormCalc FormCalc はAdobe 独自の計算言語で、主として単純な演算など短いスクリプトに使用されます。

• JavaScript JavaScript は新規フォームのデフォルトのスクリプト言語です。(「 新規フォームのデフォルトのスクリプト言語を設定するには」を参照してください。)

言語リストに表示されるスクリプト言語は、オプションダイアログボックスのワークスペースパネルで新規フォームのデフォルトとして選択したスクリプト言語オプションと一致します。ただし、フォームのプロパティダイアログボックスの「デフォルト」タブで現在のフォームのスクリプト言語設定を変更した場合は、言語リストに表示されるスクリプト言語も新しいイベントの新規スクリプトに対して同様に変更されます。フォームのプロパティダイアログボックスでスクリプト言語オプションを変更しても既存のスクリプトのスクリプト言語は変更されません。イベントに既に含まれるスクリプトが削除された場合、Designer の現行セッション中はスクリプトエディターで引き続き同じスクリプト言語が使用されます。

実行場所

演算やスクリプトを実行する場所を指定します。3 つのオプションを指定できます。

• クライアント演算とスクリプトは、クライアントアプリケーション(Acrobat、Adobe® Reader®、Web ブラウザーなど)がフォームを処理するときに実行します。

• サーバー 演算とスクリプトは、サーバーアプリケーション(例えば Forms Generator)がフォームを処理するときに実行します。

• クライアント/サーバー 演算とスクリプトは、HTML クライアントアプリケーションでクライアントサイドのスクリプティングがサポートされていない限り、サーバーアプリケーション(Forms など)がフォームを処理するときに実行します。例えば、データベースにアクセスして入力前のフォーム内容を設定するスクリプトなどがあります。

イベント伝播

「イベント伝播」チェックボックスを表示するには、ツール/ワークスペースのダイアログに移動し、「ワークスペース」タブで、「イベント伝播オプションの表示」チェックボックスを選択します。

スクリプトエディターでイベント伝播を有効にすることで、スクリプトをグローバルにできます。その設定はフォームイベントの先祖コンテナへの伝播を可能にします。イベント伝播はフォーム内のスクリプト数を減らすことができます。たとえば、無効なフィールド、サブフォーム、または除外グループの外見をコントロールするグローバルスクリプトを作成できます。グローバルイベントのいくつかの例を以下に示します。

• アクティブなフィールドに色を付ける enter/exit/mouseEnter/mouseExit イベント。

• フォームセッションのキーストロークを追跡する変更イベント。

Page 14: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

スクリプティングのための Designer の設定 3

8

3. スクリプティングのための Designer の設定

3.1. スクリプトエディターを表示するには

1) ウィンドウ/スクリプトエディターを選択します。

注:Designer ワークスペースにスクリプトエディターが表示されているときは、拡張ボタンを使用してスクリプトエディターをすばやくドッキングまたはドッキング解除できます。

3.2. 1 行表示から複数行表示に変更するには

1) スクリプトエディターのパレットバーをドラッグして、パレットを目的のサイズにします。

注:複数行表示では、「すべてのイベント」および「スクリプトを使用するイベント」オプションがイベントリストに加えられます。「すべてのイベント」オプションは、フォームデザインオブジェクトで使用できるイベントを、演算やスクリプトを含まないものも含めてすべて表示します。「スクリプトを使用するイベント」オプションは、オブジェクトのイベントのうち演算やスクリプトを含むものだけを表示します。

3.3. 新規フォームのデフォルトのスクリプト言語を設定するには

1) ツール/オプションを選択します。

2) 「ワークスペース」をクリックします。

3) 「新規フォームのデフォルト言語」リストで、新規フォームのデフォルトのスクリプト言語を選択します。

3.4. 現在のフォームのデフォルトのスクリプト言語を設定するには

1) ファイル/フォームのプロパティを選択します。

2) 「デフォルト」タブをクリックします。

3) デフォルト言語リストで、現在表示されているフォームのデフォルトのスクリプト言語を選択します。

Page 15: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

スクリプティングのための Designer の設定

9

3.5. 現在のフォームのデフォルトのスクリプト言語を設定するには

1) 編集/フォームのプロパティを選択します。

2) 「デフォルト」タブをクリックします。

3) デフォルト言語リストで、現在表示されているフォームのデフォルトのスクリプト言語を選択します。

3.6. フォームテンプレートのデフォルトスクリプト言語を設定するには

1) 新しいフォームデザインを作成します。

2) ファイル/フォームのプロパティを選択します。

3) 「デフォルト」タブをクリックします。

4) デフォルト言語リストから設定したいスクリプト言語を選択します。

5) Designer のインストール先の Templates フォルダーにある元のフォームテンプレートファイルをバックアップしておきます。

6) 新規に作成したフォームデザインを TDS ファイルとして保存し、該当するフォームテンプレートを上書きします。例えば、Letter.tds というファイル名を指定し、Templates¥Blank フォルダーにあるLetter.tds ファイルを上書きして保存します。

3.7. フォームテンプレートのデフォルトスクリプト言語を設定するには

1) 新しいフォームデザインを作成します。

2) 編集/フォームのプロパティを選択します。

3) 「デフォルト」タブをクリックします。

4) デフォルト言語リストから設定したいスクリプト言語を選択します。

5) Designer のインストール先の Templates フォルダーにある元のフォームテンプレートファイルをバックアップしておきます。

6) 新規に作成したフォームデザインを TDS ファイルとして保存し、該当するフォームテンプレートを上書きします。例えば、Letter.tds というファイル名を指定し、Templates¥Blank フォルダーにあるLetter.tds ファイルを上書きして保存します。

Page 16: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

スクリプティングのための Designer の設定 3

10

3.8. デフォルトの処理アプリケーションを設定するには

1) ファイル/フォームのプロパティを選択します。

2) 「デフォルト」タブをクリックします。

3) デフォルト実行位置リストからデフォルトの処理アプリケーションを選択します。

注:この手順では、フォームの現在のインスタンスに対するデフォルトの処理アプリケーションの値だけが設定されます。

新規フォームを作成するたびにデフォルトの処理アプリケーションを変更する必要をなくすには、新規フォームデザインの作成に使用するフォームテンプレートファイルに変更を加える必要があります。

3.9. デフォルトの処理アプリケーションを設定するには

1) 編集/フォームのプロパティを選択します。

2) 「デフォルト」タブをクリックします。

3) デフォルト実行位置リストからデフォルトの処理アプリケーションを選択します。

注:この手順では、フォームの現在のインスタンスに対するデフォルトの処理アプリケーションの値だけが設定されます。

新規フォームを作成するたびにデフォルトの処理アプリケーションを変更する必要をなくすには、新規フォームデザインの作成に使用するフォームテンプレートファイルに変更を加える必要があります。

3.10. フォームテンプレートのデフォルトの処理アプリケーションを変更するには

1) 新しいフォームデザインを作成します。

2) ファイル/フォームのプロパティを選択します。

3) 「デフォルト」タブをクリックします。

4) デフォルト実行位置リストからデフォルトの処理アプリケーションを選択します。

5) Designer のインストール先の Templates フォルダーにある元のフォームテンプレートファイルをバックアップしておきます。

6) 新規に作成したフォームデザインを TDS ファイルとして保存し、該当するフォームテンプレートを上書きします。例えば、Letter.tds というファイル名を指定し、Templates¥Blank フォルダーにあるLetter.tds ファイルを上書きして保存します。

Page 17: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

スクリプティングのための Designer の設定

11

3.11. フォームテンプレートのデフォルトの処理アプリケーションを変更するには

1) 新しいフォームデザインを作成します。

2) 編集/フォームのプロパティを選択します。

3) 「デフォルト」タブをクリックします。

4) デフォルト実行位置リストからデフォルトの処理アプリケーションを選択します。

5) Designer のインストール先の Templates フォルダーにある元のフォームテンプレートファイルをバックアップしておきます。

6) 新規に作成したフォームデザインを TDS ファイルとして保存し、該当するフォームテンプレートを上書きします。例えば、Letter.tds というファイル名を指定し、Templates¥Blank フォルダーにあるLetter.tds ファイルを上書きして保存します。

3.12. アラビア文字、ヘブライ文字、タイ文字、ベトナム文字を表示するには

スクリプトエディターまたは「XML ソース」タブでアラビア文字、ヘブライ文字、タイ文字、ベトナム文字を表示するには、Designer のスクリプトエディターおよび「XML ソース」タブで使用されているフォント設定を変更する必要があります。そのように設定しない場合、Designer では言語特有の文字が存在する位置に四角形が表示されます。

1) ツール/オプションを選択して、左側のリストから「ワークスペース」を選択します。

2) 次のいずれかのオプションを選択します。

• FormCalc のシンタックスフォーマット :FormCalc を使用する場合にスクリプトエディターのフォントを設定します。

• JavaScript のシンタックスフォーマット :JavaScript を使用する場合にスクリプトエディターのフォントを設定します。

• XML ソース構文のフォーマット :「XML ソース」タブのフォントを設定します。

3) 「フォント」ボックスで、対象の言語をサポートするフォントを選択します。例えば、Adobe Arabicはアラビア語を、Adobe Hebrew はヘブライ語を、Adobe Thai はタイ語を、Myriad® Pro およびMinion® Pro はベトナム語をサポートします。システムに存在しない場合は、インターネットで言語に必要なフォントを検索できます。

4) 「OK」をクリックします。

5) 「OK」をクリックしてオプションダイアログボックスを閉じます。

Page 18: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

スクリプティングのための Designer の設定 3

12

3.13. ワークスペースを使用した演算とスクリプトのデバッグ

Designer のワークスペースには、演算とスクリプトのデバッグ作業を支援する様々な機能があります。

次の表に、Designerの各種パレットおよびタブの便利なデバッグ情報が表示される場所とその目的を示します。

ワークスペース上の場所 用途

レポートパレットの「警告」タブ

ツールメニューから「スクリプトの構文をチェック」コマンドを選択するか、またはツールツールバーの「スクリプトの構文をチェック」ボタンをクリックすると、ターゲットおよび警告マーカーメッセージと、すべての JavaScript または FormCalc スクリプトの構文エラーが表示されます。詳しくは、「 スクリプトの構文をチェックするには」を参照してください。「警告」タブの構文警告メッセージをダブルクリックすると、エラーを含むスクリプトがスクリプトエディターに読み込まれ、エラーのある行がハイライト表示されます。警告メッセージをダブルクリックしてデザインビューおよび階層パレットで関連オブジェクトを選択したり、F1 キーを押して問題の解決方法に関する情報を表示したりすることもできます。JavaScript コンソールを有効にして、JavaScript の実行時エラーをチェックできます。詳しくは、「 JavaScript のデバッグ」を参照してください。

レポートパレットの「連結」タブ

データソースに連結されているフィールドをフォームデザインに含めると、フィールドのデータ連結をどのように定義したかに基づいて、「連結」タブにフィールドのリストが表示されます。例えば、グローバルデータ連結が設定されているフィールドのみのリストや、データ連結が定義されていないフィールドのみのリストを表示させることができます。この機能は、特にフォームにデータ連結フィールドが多数ある場合に便利です。

レポートパレットの「ログ」タブ

フォームの読み込みまたは保存を行ったとき、あるいは「PDF プレビュー」タブを使用してフォームをプレビューしたときに Designer によって生成される、検証メッセージ、JavaScriptまたは FormCalc スクリプト実行エラー、およびデザイン時フォームレンダリングエラーが表示されます。

階層パレット 階層パレットを使用すると、参照構文のフォームオブジェクトの場所がわかります。階層パレットには、フォームの構造が視覚的に表示されます。「マスターページ」タブと「デザインビュー」タブの内容がここに表示されます。また、階層パレットの参照オブジェクトノードの下には参照オブジェクトが表示されます。参照オブジェクト とは、必要になった場合だけフォームに追加されるオブジェクトです。データが複数のページやコンテンツ領域にまたがる場合は、オーバーフローリーダーサブフォームおよびオーバーフロートレーラーサブフォームがフォーム内の適切な場所に挿入されます。

オブジェクトパレットの「連結」タブ

オブジェクトパレットの「連結」タブは、データソースと連結できるすべての Designer オブジェクトで使用できます。フォームデザイン上のオブジェクトをデータ接続の特定のデータノードに連結すると、そのデータノードにアクセスするための有効な FormCalc 参照構文がデータ連結(開く、保存、送信)リストに表示されます。FormCalc 参照構文は、テスト目的で他の演算またはスクリプトにおいて使用することができます。

Page 19: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

スクリプティングのための Designer の設定

13

演算とスクリプトをより簡単にデバッグできるようスクリプトエディターのデフォルトのオプションを変更すると便利です。これらのオプションは、オプションダイアログボックスのワークスペースパネルに表示されます。ワークスペースパネルは、ツール/オプションを選択し、左側のリストから「ワークスペース」を選択すると使用できます。例えば、スクリプトエディターに行番号を表示するかどうかを選択することや、FormCalc または JavaScript の構文のフォーマットを変更することができます。

「XML ソース」タブ 「XML ソース」タブには、フォームデザインの XML コードが入っています。XML ソースコードは、フォームのすべてのアスペクトを定義します。「XML ソース」タブを使用して、フォームデザインの XML フォームオブジェクトモデルを表示できるほか、オブジェクトとプロパティの関係を確認できます。XML ソースの XML 要素名は XML フォームオブジェクトモデルのオブジェクト名に相当し、属性はプロパティに相当します。階層パレットでオブジェクトを選択した後、「XML ソース」タブをクリックすると、対応する要素の先頭行がハイライト表示されます。階層パレットに表示される Designer のオブジェクト名が XML ソースの name 属性の値になります。ツール/オプションで表示されるオプションダイアログボックスで、行番号の表示や非表示、構文の色の設定など「XML ソース」タブのソース表示用オプションを設定できます。XML ソースコードを直接、編集するのはお勧めできません。

ワークスペース上の場所 用途

Page 20: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

演算とスクリプトの作成 4

14

4. 演算とスクリプトの作成

Designerには、様々なタスクの実行に使用できる幅広い演算とスクリプトの機能が用意されています。例えば、次のスクリプトでは、テキストフィールドの境界線の色とテキストフィールドの値のフォントサイズを変更します。

TextField1.border.edge.color.value = "255,0,0"; TextField1.font.typeface = "Courier New";

より複雑なフォームでは、スクリプティングを利用して実行時にデータソースの接続とデータの操作を実行できます。一般的なスクリプティングタスクの例については、「 一般的なスクリプティングタスクの例」を参照してください。

Designer で演算とスクリプトを作成する場合は、オブジェクトに演算またはスクリプトを添付するたびに一般的なプロセスに従う必要があります。演算またはスクリプトを作成するたびにプロセス全体を実行する必要があるわけではありませんが、このプロセスに従うことで、発生する可能性のあるエラーや予期しない結果を排除できます。

通常、演算またはスクリプトを作成するたびに実行するタスクは次のとおりです。

• 演算またはスクリプトを添付するオブジェクトを選択します。フォームデザイン上のほぼすべてのオブジェクトを操作する演算とスクリプトを作成できますが、フォームデザインのすべてのオブジェクトでフォームのイベントがサポートされているわけではありません。Designer のオブジェクトライブラリパレットに含まれている、スクリプティングをサポートする標準オブジェクトのリストについては、「 演算とスクリプトをサポートするオブジェクト」を参照してください。

• スクリプトエディターのスクリプト編集フィールドで演算またはスクリプトを作成します。

• 「PDF プレビュー」タブを使用するか、テスト環境で演算またはスクリプトをテストします。

4.1. フォームデザインのオブジェクトおよび変数の命名規則

演算またはスクリプトを作成してフォームを拡張するときは、フォーム上のフォームデザインのオブジェクトと変数の名前に注意が必要です。通常は、XML フォームオブジェクトモデルのプロパティ、メソッドおよびオブジェクトの名前を、フォームデザインのオブジェクトと変数に使用しないでください。XMLフォームオブジェクトモデルのプロパティ、メソッドまたはオブジェクトの名前を使用すると、演算とスクリプトが適切に実行されない可能性があります。

例えば、 Subform1というサブフォームオブジェクト内に x という新しいテキストフィールドを作成する場合は、次の構文を使用してテキストフィールドオブジェクトにアクセスします。

Subform1.x.[式]

しかし、サブフォームオブジェクトには、フォームデザイン上のサブフォームの水平位置を表す x というXML フォームオブジェクトモデルのプロパティが既に存在します。

Page 21: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

演算とスクリプトの作成

15

名前の競合を回避するには、XML フォームオブジェクトモデルの命名規則とは異なるフィールドの命名規則を選択する必要があります。例えば、上記の例では、テキストフィールドのフィールド名として次の名前を使用できます。

• horizontalValue

• x_value

• xLetter

• hValue

XML フォームオブジェクトモデルのプロパティ、メソッドおよびオブジェクトの名前の詳細およびリストについては、「 スクリプティングリファレンス」を参照してください。

関連するリンク:

変数名の設定

演算とスクリプトの作成

4.2. スクリプト言語の選択

Designer では、FormCalc と JavaScript の両方によるスクリプティングをサポートします。フォームでスクリプトを作成する前に、それぞれのスクリプト言語の利点を把握しておく必要があります。

FormCalcは、最も一般的なフォームの機能を簡略化する様々な組み込み関数を含む計算言語です。例えば、FormCalc の財務関数を使用すると、元本、金利および返済期間に基づいてローン返済額を評価できます。

JavaScriptは、さらに強力かつ多様なスクリプト言語です。これは、ユーザーに優れた柔軟性を提供し、既存のスクリプティングの知識を活用するための言語です。例えば、Designer で既存の JavaScript 関数を再利用して、作成する必要のある新しいスクリプティングの量を減らすことができます。

注:Designer では、JavaScript バージョン 1.6 以降をサポートします。

オプションダイアログボックスのワークスペースパネルでは、新しいフォームに使用するスクリプト言語を選択し、フォームのプロパティダイアログボックスの「デフォルト」タブでは、現在のフォームに使用するスクリプト言語を選択できます。

スクリプトエディターの「言語」リストに表示されるスクリプト言語は、新しいフォームのデフォルトとして選択するスクリプト言語オプションに一致します。ただし、現在のフォームのスクリプト言語の設定を変更すると、新しいイベントの新しいスクリプトの場合と同様に、「言語」リストに表示されるスクリプト言語が変更されます。フォームのプロパティダイアログボックスでスクリプト言語オプションを変更しても、既存のスクリプトで使用されたスクリプト言語は変更されません。イベントに既に含まれるスクリプトが削除された場合、Designer の現行セッション中はスクリプトエディターで引き続き同じスクリプト言語が使用されます。

注:2012 年 3 月 10 日から、アドビでは Adobe のガイド機能を非推奨とします。® LiveCycle® ES. ガイド機能は、アップグレード目的でのみ利用可能で、2 つのメジャーリリース後の製品からは削除されます。

Page 22: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

演算とスクリプトの作成 4

16

次の表は、FormCalc と JavaScript の主な違いを示しています。

関連するリンク:

FormCalc の使用

JavaScript の使用

JavaScript 関数の作成と再利用

4.3. 演算またはスクリプトを作成するには

1) イベントをサポートするフォームデザインでオブジェクトを選択します。例えば、新規空白フォームにボタンを追加します。

2) スクリプトエディターのイベントリストから、オブジェクトに適用するいずれかのイベントを選択します。選択したイベントでは、スクリプトをいつ実行するかを指定します。イベントをサポートしないオブジェクトに適用する演算またはスクリプトを作成する場合は、フォームのイベントをサポートしないフォームデザインのオブジェクトに演算またはスクリプトを追加する必要があります。例えば、新しいボタンオブジェクトを使用する場合は、イベントリストで click イベントを選択します。

3) 「言語」リストで、スクリプト言語を選択します。例えば、新しいボタンオブジェクトの場合は、JavaScript を選択します。

4) 「実行位置」リストで、スクリプトを実行させる位置を選択します。例えば、新しいボタンオブジェクトの場合は、「クライアント」を選択します。

クライアントベースのアプリケーション(Acrobat や Web ブラウザーなど)またはサーバーベースのプロセスで演算またはスクリプトを実行するよう選択できます。

「クライアント」に設定すると、演算とスクリプトの処理がフォームのレンダリング後に開始されます。「サーバー」に設定すると、演算とスクリプトの処理がフォームのレンダリングプロセス中に開始さ

FormCalc JavaScript

Designer および Forms で有効な Adobe のネイティブな計算言語

多くの一般的なソフトウェアアプリケーションで使用される標準のスクリプト言語

短いスクリプト(通常は 1 行のみ)スクリプトのループをサポート

必要に応じて長いスクリプトに対応し、ループも使用可能

フォームガイドによるサポートなし(非推奨) フォームガイドによるサポートあり(非推奨)

一般的なフォームデザインのタスクの実行に必要なスクリプティングの量を減らすために役立つ様々な組み込み関数を含む

Acrobat オブジェクトモデルおよび Acrobat の JavaScript 機能へのアクセスを提供

各国の日付、時刻、通貨および数値の形式をサポート Acrobat の JavaScript デバッガーを使用したデバッグが可能

Post、 Putおよび Get に対応する組み込みの URL 関数を使用した Web ベースのインタラクション

個々のニーズに応じたカスタム関数を作成

Designer および Forms がサポートするすべてのプラットフォームに対応

Designer および Forms がサポートするすべてのプラットフォームに対応

Page 23: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

演算とスクリプトの作成

17

れます。「PDF プレビュー」タブを使用してフォームをプレビューすると、Acrobat でフォームを開くシミュレーションが行われます。したがって、スクリプトは「クライアント」または「クライアント / サーバー」で実行するよう設定されます。

注:「実行場所」リストから「クライアント / サーバー」を選択すると、クライアントアプリケーションまたはサーバーアプリケーションのどちらかでスクリプトが実行されます。これは、フォームの処理にどちらのアプリケーションを使用するかによって異なります。

5) 「スクリプトのソース」フィールドに、FormCalc の計算または JavaScript のスクリプトを挿入します。Designer のステートメント完了機能を利用して、演算またはスクリプトの参照構文を作成することができます。例えば、次の JavaScript スクリプトを新しいボタンオブジェクトに追加します。

xfa.host.messageBox("Hello World!", "Creating a new script", 3);6) フォームデザインが完成したら、実稼働環境で使用する前に、演算とスクリプトのテストとデバッグ

を行います。例えば、新しいボタンオブジェクトの場合は、「PDF プレビュー」タブを使用してフォームの PDF をプレビューします。ボタンオブジェクトをクリックして、手順 5 で指定したメッセージボックスを表示します。

スクリプティングをサポートする Designer のオブジェクトについて詳しくは、「 演算とスクリプトをサポートするオブジェクト」を参照してください。

4.4. 演算またはスクリプトを作成するには

1) イベントをサポートするフォームデザインでオブジェクトを選択します。例えば、新規空白フォームにボタンを追加します。

2) スクリプトエディターのイベントリストから、オブジェクトに適用するいずれかのイベントを選択します。選択したイベントでは、スクリプトをいつ実行するかを指定します。イベントをサポートしないオブジェクトに適用する演算またはスクリプトを作成する場合は、フォームのイベントをサポートしないフォームデザインのオブジェクトに演算またはスクリプトを追加する必要があります。例えば、新しいボタンオブジェクトを使用する場合は、イベントリストで click イベントを選択します。

3) 「言語」リストで、スクリプト言語を選択します。例えば、新しいボタンオブジェクトの場合は、JavaScript を選択します。

4) 「実行位置」リストで、スクリプトを実行させる位置を選択します。例えば、新しいボタンオブジェクトの場合は、「クライアント」を選択します。

クライアントベースのアプリケーション(Acrobat や Web ブラウザーなど)またはサーバーベースのプロセス(Adobe Document Services など)で演算またはスクリプトを実行するよう選択できます。

「クライアント」に設定すると、演算とスクリプトの処理がフォームのレンダリング後に開始されます。「サーバー」に設定すると、演算とスクリプトの処理がフォームのレンダリングプロセス中に開始されます。「PDFプレビュー」タブを使用してフォームをプレビューすると、Acrobatでフォームを開くシミュレーションが行われます。したがって、スクリプトは「クライアント」または「クライアント /サーバー」で実行するよう設定されます。

注:「実行場所」リストから「クライアント / サーバー」を選択すると、クライアントアプリケーションまたはサーバーアプリケーションのどちらかでスクリプトが実行されます。これは、フォームの処理にどちらのアプリケーションを使用するかによって異なります。

Page 24: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

演算とスクリプトの作成 4

18

5) 「スクリプトのソース」フィールドに、FormCalc の計算または JavaScript のスクリプトを挿入します。Designer のステートメント完了機能を利用して、演算またはスクリプトの参照構文を作成することができます。例えば、次の JavaScript スクリプトを新しいボタンオブジェクトに追加します。

xfa.host.messageBox("Hello World!", "Creating a new script", 3);

6) フォームデザインが完成したら、実稼働環境で使用する前に、演算とスクリプトのテストとデバッグを行います。例えば、新しいボタンオブジェクトの場合は、「PDF プレビュー」タブを使用してフォームの PDF をプレビューします。ボタンオブジェクトをクリックして、手順 5 で指定したメッセージボックスを表示します。

スクリプティングをサポートする Designer のオブジェクトについて詳しくは、「 演算とスクリプトをサポートするオブジェクト」を参照してください。

関連するリンク:

FormCalc の使用

JavaScript の使用イベント

ステートメント完了を使用して演算とスクリプトを作成するには

演算またはスクリプトを実行するタイミングの指定

スクリプティングイベントおよびスクリプトを表示するには

演算またはスクリプトの実行場所の指定

演算とスクリプトのテストおよびデバッグ

4.5. テキストまたはその他の項目を検索するには

「XML ソース」タブまたはスクリプトエディターでは、指定した単語またはフレーズをすばやく検索できます。

1) 「XML ソース」タブまたはスクリプトエディターで、編集/検索を選択するか、右クリックしてコンテキストメニューを表示します。

2) 「検索する文字列」ボックスに、検索するテキストを入力します。

3) 必要なその他のオプションを選択します。

4) 「次を検索」をクリックします。

実行中の検索をキャンセルするには、Esc キーを押すか、「キャンセル」ボタンを選択します。

重要:「XMLソース」タブでXMLソースコードを直接編集することは可能ですが、Adobe XMLForms Architecture の使い方に慣れていない場合はコードを変更しないことをお勧めします。XMLForms Architecture について詳しくは、 デベロッパーセンターを参照してください。

Page 25: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

演算とスクリプトの作成

19

関連するリンク:

演算とスクリプトの作成

演算またはスクリプトを作成するには

テキストまたはその他の項目を置換するには

ステートメント完了を使用して演算とスクリプトを作成するには

演算またはスクリプトを実行するタイミングの指定

スクリプティングイベントおよびスクリプトを表示するには

演算またはスクリプトの実行場所の指定

演算とスクリプトのテストおよびデバッグ

4.6. テキストまたはその他の項目を置換するには

テキストを自動的に置換できます。例えば、 Corp. を Corporationに置き換えることができます。

1) スクリプトエディターで、編集/置換を選択します。

2) 「検索する文字列」ボックスに、検索するテキストを入力します。

3) 「置換する文字列」ボックスに、置換するテキストを入力します。

4) 必要なその他のオプションを選択します。

5) 「次を検索」、「置換」または「すべてを置換」をクリックします。

6) 実行中の検索をキャンセルするには、Esc キーを押すか、「キャンセル」ボタンを選択します。

フォーム上の複数のオブジェクトに添付されたスクリプト内のテキストを置換するには、フォームのルートサブフォーム(デフォルトでは form1)を選択し、「子オブジェクトのイベントを表示」を選択してから、上述の手順を実行します。

重要:「XMLソース」タブでXMLソースコードを直接編集することは可能ですが、Adobe XMLForms Architecture の使い方に慣れていない場合はコードを変更しないことをお勧めします。XMLForms Architecture について詳しくは、 デベロッパーセンターを参照してください。

関連するリンク:演算とスクリプトの作成

テキストまたはその他の項目を検索するには

Page 26: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

演算とスクリプトの作成 4

20

4.7. ステートメント完了を使用して演算とスクリプトを作成するには

スクリプトエディター内のステートメント完了機能を使用すると、演算とスクリプトをインタラクティブに作成できます。

演算またはスクリプトを作成する場合は、フォームのオブジェクトまたはプロパティの名前の直後にピリオド(.)を入力するたびに、ステートメント完了機能によって、使用可能なメソッドとプロパティのリストが表示されます。ステートメント完了のリストが表示されない場合は、オブジェクトまたはプロパティの名前が正しく入力されていること、およびオブジェクトがスクリプトを作成するオブジェクトの範囲内にあることを確認してください。演算とスクリプトでのオブジェクトの参照について詳しくは、「 演算とスクリプトでのオブジェクトの参照」を参照してください。

1) フォームデザインのオブジェクトまたはプロパティの名前、あるいは FormCalc の有効なショートカットを入力し、その後にピリオドを 1 つ入力します。

2) フォームデザインのオブジェクトに適用するメソッドまたはプロパティを選択し、スクリプトの作成を続けます。関数を選択せずにステートメント完了のリストを閉じるには、Esc キーを押します。

使用可能な XML フォームオブジェクトモデルのプロパティのリストは、ピリオドの前にあるフォームデザインのオブジェクトまたはプロパティによって異なります。

注:ステートメント完了のリストが表示されるのは、XML フォームオブジェクトモデルのオブジェクト、プロパティおよびメソッドにアクセスする場合のみです。標準の JavaScript のオブジェクトまたはメソッドを使用する場合は表示されません。

関連するリンク:オブジェクトのプロパティおよび値の参照

4.8. オブジェクト参照構文を自動的に挿入するには

ステートメント完了のリストを使用してオブジェクト参照構文を作成する代わりに、オブジェクト参照構文の挿入機能を使用して、演算またはスクリプトに参照構文を自動的に追加することができます。この機能では、キャンバスから選択するオブジェクトの省略された参照構文を、スクリプトエディターの「スクリプトのソース」フィールドに入力します。これにより、演算とスクリプトの作成に必要な時間を短縮し、正確な参照構文を使用することができます。

1) スクリプトエディターの「スクリプトのソース」フィールドにフォーカスがあり、オブジェクト参照を挿入する場所にカーソルが置かれていることを確認します。

2) フォーム上で、Ctrl キーを押しながら参照するオブジェクトをクリックします。オブジェクトを選択する際には、選択しやすいようにカーソルの形が変わります。

関連するリンク:演算とスクリプトでのオブジェクトの参照

Page 27: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

演算とスクリプトの作成

21

4.9. 演算またはスクリプトを実行するタイミングの指定

演算とスクリプトを作成する場合は、各エントリを特定のフォームのイベントに関連付ける必要があります。フォームのイベントはそれぞれ、特定の時刻に開始するフォームの状態の変更を表します。

フォームの状態の変更は、ユーザーがフォームに入力する際に、Forms によってサーバー上でフォームをレンダリングするとき、または Acrobat あるいは Adobe Reader によってクライアント上でフォームをレンダリングするときに発生する可能性があります。

フォームの状態の変更が発生すると、そのイベントに関連付けられている演算またはスクリプトが自動的に処理されます。

演算またはスクリプトの作成時に使用するイベントでは、演算またはスクリプトに含める必要のある内容をある程度まで指定します。例えば、フォームに表示する情報の量および種類は、選択するイベントのタイミングによって異なる場合があります。したがって、フォームの入力者が特定のアクションを実行した後ではなく実行する前に、フィールドから値を取得する演算またはスクリプトを実行すると、結果が異なる可能性があります。イベントについて詳しくは、「 イベント」を参照してください。

作成するフォームのタイプによっては、発生しないイベントもあります。例えば、レイアウトが固定されていて、インタラクティブなオブジェクトのないフォームを作成する場合、フォームの入力者のアクションに関連付けられているインタラクティブなイベントは発生しない可能性があります。その結果、それらのイベントに関連付けられているスクリプトは実行されません。

Designer では様々なフォームのイベントをサポートしますが、フォームの状態にメジャーな変更があると発生する、次のようないくつかのイベントだけを使用することにより、多岐にわたる一般的な演算およびスクリプティングのタスクを行うことができます。

docReadyAcrobat または Adobe Reader でフォームを開いた直後と、® フォームの入力者がフォームのオブジェクトの対話処理を開始できるようになる直前に開始します。このイベントは、フォームの制御がフォームの入力者に与えられる前に発生する最後のイベントです。

enterフォームの入力者がフォーカスを特定のフィールド、ボタンまたはサブフォームに変更すると開始します。

exitフォームの入力者がフォーカスを特定のフィールド、ボタンまたはサブフォームから別のオブジェクトに変更すると開始します。

changeフォームの入力者がフィールドの値を変更すると開始します。このイベントは、スクリプトを実行するためのコンボボックスまたはリストボックスで、フォームの入力者が現在の値を変更する場合に最もよく使用されます。

clickフォームの入力者がフィールドまたはボタンをクリックすると開始します。このイベントは、スクリプトを実行するためのボタンをフォームの入力者がクリックする場合に最もよく使用されます。

Page 28: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

演算とスクリプトの作成 4

22

関連するリンク:スクリプティングイベントおよびスクリプトを表示するには

イベント

演算またはスクリプトの実行場所の指定

4.10. スクリプティングイベントおよびスクリプトを表示するには

スクリプトエディターには、フォームでオブジェクトのスクリプティングイベントを表示する方法がいくつか用意されています。この方法は、選択するオブジェクトのタイプおよび表示するイベントの数によって異なります。

開始する前に、次の操作を行う必要があります。

• スクリプトエディターが画面に表示されない場合は、ウィンドウ/スクリプトエディターを選択します。

• スクリプトエディターの表示サイズが小さくてスクリプトの複数の行が一度に表示されない場合は、下側の行を下方にドラッグしてサイズを拡大します。

4.10.1. スクリプトエディターに1つのオブジェクトのスクリプティングイベントを表示するには

1) フォームでオブジェクトを選択します。

2) イベントリストから有効なスクリプティングイベントを選択します。

4.10.2. スクリプトエディターにコンテナオブジェクトおよびその子のスクリプティングイベントを表示するには

1) まだ複数行モードに設定していない場合は、スクリプトエディターを展開して複数行のスクリプトを表示し、「子オブジェクトのイベントを表示」オプションが選択されていることを確認します。

2) サブフォームなどのコンテナオブジェクトを選択します。

3) イベントリストから有効なスクリプティングイベントを選択します。

イベントはスクリプトエディターのスクリプト編集フィールドに表示され、各イベントの参照構文で区切られます。イベントはそれぞれ特定のタイプのオブジェクトにのみ適用されます。スクリプトイベントを選択すると、スクリプトエディターのスクリプト編集フィールドには、そのイベントの有効なインスタンスのみ表示されます。例えば、コンボボックスを含むサブフォームを選択して preOpenイベントを選択すると、スクリプトエディターにはコンボボックスを表す 1 つのエントリが表示されます。これは、 preOpen イベントがコンボボックスにのみ適用されるためです。また、 enter イベントを選択すると、2 つのエントリが表示されます。1 つはコンボボックスのエントリで、もう 1 つはサブフォームのエントリです。

注:イベントリストには、スクリプトを含むイベントが表示されます。イベント名の後ろにはアスタリスク(*)が付いています。イベントにスクリプトが含まれている場合は、イベントリストからイベントを選択すると、スクリプトエディターのスクリプト編集フィールドにソースが表示されます。

Page 29: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

演算とスクリプトの作成

23

4.10.3. スクリプトエディターに 1 つのオブジェクトのすべてのスクリプティングイベントを表示するには

1) フォームでオブジェクトを選択します。

2) イベントリストで、「すべてのイベント」を選択します。

イベントはスクリプトエディターのスクリプト編集フィールドに表示され、各イベントの参照構文で区切られます。

4.10.4. スクリプトエディターにコンテナオブジェクトおよびその子のすべてのスクリプティングイベントを表示するには

1) まだ複数行モードに設定していない場合は、スクリプトエディターを展開して複数行のスクリプトを表示し、「子オブジェクトのイベントを表示」オプションが選択されていることを確認します。

2) サブフォームなどのコンテナオブジェクトを選択します。

3) イベントリストで、「すべてのイベント」を選択します。

イベントはスクリプトエディターのスクリプト編集フィールドに表示され、各イベントの参照構文で区切られます。

4.10.5. スクリプトエディターに 1 つのオブジェクトのすべてのスクリプトを表示するには

1) スクリプトが添付されているオブジェクトを選択します。

2) イベントリストで、「スクリプトを使用するイベント」を選択します。

スクリプトはスクリプトエディターのスクリプト編集フィールドに表示され、各イベントの参照構文で区切られます。

4.10.6. スクリプトエディターにコンテナオブジェクトおよびその子のすべてのスクリプトを表示するには

1) まだ複数行モードに設定していない場合は、スクリプトエディターを展開して複数行のスクリプトを表示し、「子オブジェクトのイベントを表示」オプションが選択されていることを確認します。

2) サブフォームなどのコンテナオブジェクトを選択します。コンテナオブジェクトおよびその子オブジェクトのすべてのイベントがスクリプトエディターに表示されます。

3) イベントリストで、「すべてのイベント」を選択します。

スクリプトはスクリプトエディターのスクリプト編集フィールドに表示され、各イベントの参照構文で区切られます。

Page 30: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

演算とスクリプトの作成 4

24

4.11. 演算またはスクリプトの実行場所の指定

Designer で作成されたそれぞれの演算とスクリプトを実行する場所を指定する必要があります。

Formsなどのサーバーベースの処理を使用していない場合は、すべての演算とスクリプトをクライアントアプリケーション(Acrobatk、Webブラウザー、またはMobile Workspaceアプリケーションなど)で実行するようにしてください。

注:FormCalcの演算とスクリプトは、HTMLとしてレンダリングされたフォームでは使用できません。フォームの入力時には無視されます。

サーバーベースの処理を使用している場合は、クライアントアプリケーションとサーバーのどちらで計算を実行するかを選択できます。演算とスクリプトをサーバーで実行するように選択した場合は、フォームのレンダリングプロセスの特定のポイントでスクリプトを実行するように選択します。

詳しくは、「 演算またはスクリプトを実行するタイミングの指定」を参照してください。

「実行場所」リストから「クライアント / サーバー」を選択すると、クライアントアプリケーションとサーバーベースのアプリケーションの両方で演算またはスクリプトを使用できます。このオプションは、ユーザーがクライアントアプリケーションとサーバーアプリケーションのどちらでフォームを使用するかがわからない場合などに役立ちます。また、クライアントアプリケーションとサーバーベースのアプリケーションでフォームの特定のオブジェクトの動作方法を変更する場合にも便利です。

関連するリンク:イベント

演算またはスクリプトを実行するタイミングの指定

スクリプティングイベントおよびスクリプトを表示するには

4.12. 演算とスクリプトのテストおよびデバッグ

演算またはスクリプトを作成してフォームデザインをテストすると、スクリプティングエラーや、スクリプト構文エラーの結果として予期しないフィールドの値が見つかる可能性があります。

Designer には、演算とスクリプトのテストとデバッグの主な方法が 3 つ用意されています。

• Designer ワークスペースのパレットを使用します。詳しくは、「 ワークスペースを使用した演算とスクリプトのデバッグ 」を参照してください。

• JavaScript の場合にのみ、JavaScript デバッガーを使用してスクリプトをテストします。このデバッガーの使用について詳しくは、「 JavaScript のデバッグ」を参照してください。

• ホストモデルとイベントモデルのプロパティおよびメソッドを使用してフォームのトラブルシューティングを行います。

ホストモデルとイベントモデルには、ホストアプリケーションまたはフォームの様々なイベントの対話処理を行うための機能が用意されています。これらのモデルは、演算とスクリプトのデバッグに役立つ情報を返す場合に便利です。

Page 31: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

演算とスクリプトの作成

25

例えば、次のスクリプトは、スクリプトが配置されているイベントの名前を示すメッセージを実行時に返します。このスクリプトは特定のイベントが発生したことを示します。

xfa.host.messageBox(xfa.event.name) // FormCalc xfa.host.messageBox(xfa.event.name); // JavaScript

ホストモデルとイベントモデルのメソッドの別の使用例を次に示します。このスクリプトでは、インタラクティブフォーム上のフィールドの値を、ユーザーが手動で変更する前に取得します。このスクリプトは、ユーザーが入力したデータに対してフォームデザインのオブジェクトがどのように応答するかを確認する場合に役立ちます。

xfa.host.messageBox(xfa.event.prevText) // FormCalc xfa.host.messageBox(xfa.event.prevText); // JavaScript

関連するリンク:ワークスペースを使用した演算とスクリプトのデバッグ

ホストアプリケーションの使用

イベントモデルの使用

4.13. スクリプトの構文をチェックするには

フォームデザインで作業する場合は、JavaScript または FormCalc のすべてのスクリプトの構文エラーをチェックして、フォームが予想どおりに機能するかどうかをフォームの配布前に確認できます。フォームで見つかったスクリプトの構文エラーは、「警告」タブのレポートパレットに表示されます。「警告」タブのレポートパレットでは、番号付きの行にそれぞれのエラーがイベントまたはスクリプトのオブジェクト名およびエラーの説明と共に表示されます。複数のイベントが表示される場合、各イベントの行番号は 1 から始まります。

リスト内のスクリプトエラーをクリックすると、関連するスクリプトの表示、エラーを含む行のハイライト表示およびハイライト表示された行の先頭への挿入ポイントの配置を行うことができます。また、フォームデザインを保存するか、「PDF プレビュー」タブを使用してプレビューすると、スクリプト構文エラーが「警告」タブに報告されます。

注:行へジャンプダイアログボックスを使用して、表示するイベントを選択することもできます。ヘッダー行に示されているように、スクリプトイベントのコンボボックスには、スクリプトエディターに現在表示されている各イベントのシステムオブジェクトモデル(SOM)式が含まれます。

1) スクリプトエディターで、ツール/スクリプトの構文をチェックを選択します。

関連するリンク:FormCalc の使用

JavaScript の使用演算とスクリプトをサポートするオブジェクト

Page 32: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

演算とスクリプトの作成 4

26

4.14. セキュリティ制約への対処

sourceSet モデルまたはその子を変更するスクリプトはフォームの証明を無効にするので、フォームは信頼されなくなります。フォームは有効期間中にいつでも認証できるので、フォームの認証後にエラーが発生しないスクリプティングの手法を使用することが重要です。

sourceSet モデルまたはその子を変更するスクリプトを使用する場合は、モデルの代わりにモデルのコピーを使用する必要があります。フォームのコピーを使用すると、スクリプトでデータモデルが変更されても元のフォームでエラーが発生しません。例えば、データベース内のレコードの表示やデータベース内の特定のレコードの選択などの一般的なタスクを実行するフォームでは、sourceSet モデルに含まれるデータ接続ノードを変更する必要があります。

sourceSet モデルをコピーするには、sourceSet モデル内で変更するデータ接続について定義するスクリプトでメソッドを作成し、スクリプトでその定義の代わりにコピーを使用するように指定する必要があります。

データのコンボボックスのスクリプトを次に示します。このスクリプトでは、データソースのデータをリストに入力します。

... var oDB = xfa.sourceSet.nodes.item(nIndex); ... // Search node with the class name "command" var nDBIndex = 0; while(oDB.nodes.item(nDBIndex).className != "command") nDBIndex++;

oDB.nodes.item(nDBIndex).query.recordSet.setAttribute("stayBOF", "bofAction"); oDB.nodes.item(nDBIndex).query.recordSet.setAttribute("stayEOF", "eofAction");

sourceSet モデルをコピーするには、ステートメントの末尾に clone(1) メソッドを追加して、そのモデルにアクセスする行を変更する必要があります。

var oDB = xfa.sourceSet.nodes.item(nIndex).clone(1);

注:コピーしたデータ接続ノードは、変数またはスクリプトのオブジェクトに定義された変数に保存できます。

Page 33: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

イベント

27

5. イベント

フォームオブジェクトに添付するすべての演算またはスクリプトは、特定のイベントに関連付けられます。イベント は、フォームの状態を変更できる特定の発生(アクション)として定義されます。状態の変更が発生すると、イベントに関連付けられた演算またはスクリプトを自動的に呼び出します。イベントは様々なタイミングで発生します。例えば、データをフォームデザインと結合する際にフォームレンダリングプロセスを開始するときや、クライアントアプリケーションでフォームの入力者がフォーム上のオブジェクトを対話処理するときなどです。演算とスクリプトを特定のイベントに適用することにより、フォームオブジェクトとフォームデータを提供する方法、およびオブジェクトとデータがフォームの入力者のインタラクションに応答する方法のすべての要素を制御できます。

1回の状態の変更またはフォームの入力者のアクションによって複数のイベントがトリガーされる可能性があります。例えば、現在のフィールドから次のフィールドにTabキーを押して移動すると、 exitイベント(現在のフィールド用)と enter イベント(次のフィールド用)がトリガーされます。現在のフィールドと次のフィールドが異なるサブフォーム内にある場合は、合計 4 つのイベントがトリガーされます。つまり、現在のフィールドとサブフォーム用の exit イベントおよび次のフィールドとサブフォーム用の enter イベントです。通常、カテゴリの異なるフォームの各イベントは、予測可能な順序に従います。

5.1. イベントのタイプ

フォームのイベントは、次のいずれかのカテゴリに分類されます。

プロセスイベント

このタイプのイベントは、フォーム上のオブジェクトに関連する内部プロセスまたはアクションの結果として自動的に開始されます。例えば、フォームに新しいページを追加するボタンをフォームの入力者がクリックすると、新しいページのための initialize、 calculate、 validateおよびlayout:ready の各プロセスイベントが自動的に開始されます。

インタラクティブイベント

このタイプのイベントは、フォームの入力者のアクションの直接の結果として開始されます。例えば、フォームの入力者がフォームのフィールド上にポインターを移動すると、そのアクションに応答してmouseEnter イベントが開始されます。

アプリケーションイベント

このタイプのイベントは、クライアントアプリケーションまたはサーバーアプリケーションが実行するアクションの結果として開始されます。例えば、 postPrint イベントを使用して、フォームが保存された直後にタスクを実行する演算またはスクリプトを作成できます。

関連するリンク:

プロセスイベント

インタラクティブイベント

アプリケーションイベント

Page 34: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

イベント 5

28

5.2. プロセスイベント

プロセスイベントは、フォームやフォーム上のオブジェクトに関連する内部プロセスまたはアクションの結果として自動的に開始されます。これらのイベントが開始されるのは、フォームが大幅に変更された直後です。例えば、フォームデザインがデータと結合された後やフォームのページ編集プロセスが終了した後などです。また、プロセスイベントはインタラクティブイベントの開始直後にも開始されます。例えば、インタラクティブイベントの開始直後に calculate イベントが開始され、その後に validate イベントが開始されます。

スクリプトエディターのイベントリストで使用可能なプロセスイベントを次に示します。

• calculate

• form:ready

• indexChange

• initialize

• layout:ready

• validate

プロセスイベントは、依存関係(つまり、最終的に 1 つ以上の追加のイベントを開始する 1 つのイベントに関連付けられているアクション)の結果として複数回開始できます。フォームの入力者がボタンをクリックして、フォームで以前は非表示になっていた部分を表示する操作を例に挙げると、フォームの入力者がボタンをクリックした場合、ボタン自体のための一連のインタラクティブイベントとプロセスイベントだけでなく、新しいサブフォーム用のいくつかのプロセスイベントも開始されます。

次の図は、PDF フォームを Acrobat または Adobe Reader で開くイベントの一般的なフローを表しています。

Page 35: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

イベント

29

Acrobat または Adobe Reader でフォームを開いた後に、フォームに加えられた変更の結果として、これらのプロセスイベントが引き続き開始される場合があります。例えば、オブジェクトのcalculate、 validateおよび layout:ready の各イベントは、いくつかのインタラクティブイベントが発生した直後に開始されます。したがって、プロセスイベントに添付された演算とスクリプトは複数回実行されます。

関連するリンク:

インタラクティブイベント

アプリケーションイベント

calculate イベント

docReady イベント

form:ready イベント

indexChange イベント

initialize イベント

layout:ready イベント

validate イベント演算またはスクリプトを実行するタイミングの指定

5.3. インタラクティブイベント

インタラクティブイベントは、フォームの入力者のアクションの直接の結果として開始されます。したがって、これらのイベントは様々な演算およびスクリプティングのタスクに役立ちます。例えば、テキストフィールドに対して、フィールドの境界線の色を青に変更するスクリプトを mouseEnter イベントに追加し、境界線の色を元に戻すスクリプトを mouseExit イベントに追加できます。このアクションでは、フォームの入力者がフィールド上にポインターを移動するとハイライト表示の効果が作成されるので、フォームの入力が視覚的にわかりやすくなります。また、インタラクティブイベントはフォームの入力者の選択に応答してフォームデータを変更する際にも役立ちます。例えば、コンボボックスでフォームの入力者が選択する値に応答して複数のフィールドのデータ値を更新するスクリプトを change イベントに追加できます。

スクリプトエディターのイベントリストで使用可能なインタラクティブイベントを次に示します。

• change

• click

• enter

• exit

• mouseDown

• mouseEnter

• mouseExit

Page 36: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

イベント 5

30

• mouseUp

• postOpen

• postSign

• preOpen

• preSign

次の図は、マウスを使用してオブジェクトを選択し、その値を変更するフォームの入力者のイベントの一般的なフローを表しています。

注:この図に示すのはイベントの一般的なフローです。フォームの入力者の特定のアクションおよびフォームのオブジェクトによっては、イベントの順序が変わる可能性があります。例えば、フォームの入力者がコンボボックスから値を選択すると、 mouseExit イベントが click イベントの後(ただし、change イベントまたは full イベントの前)に発生します。 同様に、フォームの入力者がフィールドを選択してマウスのボタンを押し、ボタンを押したままフィールドを終了すると、この図に示した順序とは異なる順序で mouseUp イベントが発生します。

Page 37: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

イベント

31

次の図は、キーボードを使用してオブジェクトを選択し、その値を変更するフォームの入力者のイベントの一般的なフローを表しています。

関連するリンク:

change イベント

click イベント

enter イベント

exit イベント

full イベント

mouseDown イベント

mouseEnter イベント

mouseExit イベント

mouseUp イベント

postOpen イベント

postSign イベント

preOpen イベント

preSign イベント

Page 38: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

イベント 5

32

5.4. アプリケーションイベント

アプリケーションイベントは、フォームの入力者のアクションまたは自動化プロセスに応答してクライアントアプリケーションまたはサーバーアプリケーションが実行するアクションの結果として開始されます。イベントの一般的なフローに含まれるアプリケーションイベントは存在しません。このイベントは、クライアントアプリケーションまたはサーバーアプリケーションが実行するアクションに対応する単一のイベントです。

スクリプトエディターのイベントリストで使用可能なアプリケーションイベントを次に示します。

• docClose

• docReady

• postPrint

• postSave

• postSubmit

• prePrint

• preSave

• preSubmit

例えば、次の図は preSave イベントの一般的なフローを表しています。

フォームの入力者が Acrobat または Adobe Reader でフォームを保存すると、フォーム上のすべてのオブジェクトに対して、保存操作の直前に preSave イベントが開始され、続いて calculate、validateおよび layout:ready の順でイベントが開始されます。プログラムを使用してフォームを保存するスクリプトがそのフォームに含まれている場合は、同じイベントのシーケンスが開始されます。

上で示した他のそれぞれのアプリケーションイベントに対しても同様のイベントのシーケンスが発生します。

Page 39: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

イベント

33

関連するリンク:

docClose イベント

postPrint イベント

postSave イベント

postSubmit イベント

prePrint イベント

preSave イベント

preSubmit イベント

5.5. calculate イベント

5.5.1. 説明

このイベントは次の状況で開始されます。

• フォームデザインとデータが結合されてフォームが完成するとき。

• フォームの入力者が計算された値を手動で上書きしなかった場合に、計算が依存する値(特定のフィールドの値など)の変更が発生したとき。その結果、オブジェクトにはイベントの戻り値が表示されます。手動で上書きされたフィールドのプロパティは、オブジェクトパレットの「値」タブにあります。

• フィールドのフォーカスが失われたとき。例えば、フォームの入力者がクリックするか Tab キーを使用してフィールドを終了する場合などです。

calculate イベントを使用して演算またはスクリプトを実行する場合は、発生する可能性のある次の問題について注意が必要です。

• calculate イベントの演算とスクリプトでは、フォームフィールドとデータ値を除き、フォームの構造を変更できません。

• calculate イベントによって挿入されるコンテンツは、オブジェクトに対して関連付けられている検証に準拠する必要があります。準拠しない場合は、検証エラーが発生します。

• 演算とスクリプトに無限ループを含めることはできません。これは、フォームによって値が連続して更新されるためです。例えば、ループ式の一環としてフィールドの値を増やすスクリプト( whileループや for ループなど)では無限ループが作成される場合があります。

• calculate イベントで評価される最後の式は、現在のフォームオブジェクトの値の入力に使用されます。 calculate イベントのスクリプトでは、最初に現在のフィールドの値を 500 に設定してから、別のフィールドの値を 1000 に設定します。実行時には、両方のフィールドに値 1000 が表示されます。その結果、 calculate イベントに追加するスクリプティングを、現在のフィールドの値の設定を行うスクリプティングに制限する必要があります。

5.5.2. タイプ

プロセスイベント

Page 40: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

イベント 5

34

5.5.3. サポート

5.5.4. バージョン

XFA 2.1

5.5.5. 例

フィールドの数値を更新するには、 calculate イベントを使用します。このイベントは他のほとんどのイベントの直後に開始されるためです。例えば、発注書フォームでは、 calculate イベントをフィールドで使用して、注文のコストを基に消費税の割合を判断することができます。この計算はフォームフィールドの値が変更されるたびに開始されるので、常に正しい消費税の値が表示されます。

ただし、 calculate イベントは複数回開始できるので、イベントに追加する演算またはスクリプトによってデータ値が不要に増分されないようにする必要があります。例えば、 calculate イベントが開始されるたびに、消費税の計算によってコストの合計に消費税の値が追加されると、フォームに表示される結果のコストの合計値が非常に大きくなる可能性があります。

calculate イベントの詳しい使用例については、「 フィールドの合計の計算」を参照してください。

関連するリンク:

イベント

プロセスイベント

5.6. change イベント

5.6.1. 説明

このイベントは、フォームの入力者が次のいずれかのアクションを実行してフィールドのコンテンツを変更するときに開始されます。

• フィールドにキーボードフォーカスを与えるキーストロークを入力する

• フィールドにデータを貼り付ける

• リストボックスまたはコンボボックスからの選択を行う

• チェックボックスを選択または選択解除する

• 一連のラジオボタンの設定を変更する

演算またはスクリプトの結果としてのオブジェクトの値の変更に応答して、またはフォームデザインとデータの結合によってこのイベントが開始されることはありません。

クライアントアプリケーション 使用の可否

Acrobat および Adobe Reader ○

HTML ブラウザー ○

Page 41: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

イベント

35

5.6.2. タイプ

インタラクティブイベント

5.6.3. サポート

5.6.4. バージョン

XFA 2.1

5.6.5. 例

フォームの入力者によるフィールドの値の変更に応答して開始する必要のある演算またはスクリプトにはこのイベントを使用します。例えば、 change イベントをコンボボックスで使用して、テーブル内の特定の行をハイライト表示することができます。この方法を使用すると、フォームの入力者がコンボボックスで値を選択するたびに、対応するテーブル行がハイライト表示されます。

注:オブジェクトの 'this.rawValue' に対するスクリプティングは機能しません。オブジェクトの現在の値を取得するには、イベントモデルのプロパティ $event.fullTextを代わりに使用します。

change イベントの詳しい使用例については、「 コンボボックスの現在または以前の値の取得」を参照してください。

関連するリンク:

イベント

インタラクティブイベント

クライアントアプリケーション 使用の可否

Acrobat および Adobe Reader ○

HTML ブラウザー ○(コンボボックスの場合のみ)

Page 42: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

イベント 5

36

5.7. click イベント

5.7.1. 説明

このイベントは、領域内でマウスクリックが発生すると開始されます。テキストフィールドまたは数値フィールドに対して click イベントが開始されると、すぐに演算またはスクリプトが実行されます。ただし、フィールドのフォーカスが失われるまでは、演算とスクリプトに応答してフィールドの値が変更されることはありません。

注:演算またはスクリプトは送信アクションを上書きするので、送信ボタンの click イベントに演算またはスクリプトを配置することはできません。その代わりに、送信ボタンの preSubmit イベントに演算とスクリプトを配置してください。フォームの送信アクションについて詳しくは、Designer のヘルプを参照してください。

5.7.2. タイプ

インタラクティブイベント

5.7.3. サポート

5.7.4. バージョン

XFA 2.1

5.7.5. 例

フォーム上でのフォームの入力者によるボタンのクリック、またはラジオボタンやチェックボックスの選択に対する直接の応答としてアクションを実行するにはこのイベントを使用します。例えば、 click イベントをチェックボックスで使用すると、フォーム上のフィールドの表示と非表示を切り替えることができます。

click イベントの詳しい使用例については、「 クライアントでのオブジェクトの視覚プロパティの変更」を参照してください。

関連するリンク:

イベント

インタラクティブイベント

preSubmit イベント

クライアントアプリケーション 使用の可否

Acrobat および Adobe Reader ○

HTML ブラウザー ○

Page 43: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

イベント

37

5.8. docClose イベント

5.8.1. 説明

このイベントは、フォームの検証がすべてエラーなく完了した場合にのみ、フォームの処理の最後に開始されます。

5.8.2. タイプ

アプリケーションイベント

5.8.3. サポート

5.8.4. バージョン

XFA 2.1

5.8.5. 例

このイベントが開始されると、保存したフォームをそれ以上変更することはできません。また、このイベントは終了のステータスまたは完了のメッセージを生成する機能を提供します。例えば、 docClose イベントを使用して、フォームが完成したことを示すメッセージをフォームの入力者に対して表示できます。

関連するリンク:

イベント

アプリケーションイベント

プロセスイベント

クライアントアプリケーション 使用の可否

Acrobat および Adobe Reader ○

HTML ブラウザー ×

Page 44: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

イベント 5

38

5.9. docReady イベント

5.9.1. 説明

このイベントは、Acrobat または Adobe Reader でフォームを開いた直後に開始されます。

5.9.2. タイプ

アプリケーションイベント

5.9.3. サポート

5.9.4. バージョン

XFA 2.1

5.9.5. 例

このイベントは、Acrobat または Adobe Reader でフォームを開いた後に開始される最初のイベントです。完全なフォームを必要とする演算またはスクリプト、あるいはフォームの入力者が最初にフォームを開いたときに 1 回だけ実行する必要のある演算またはスクリプトのタスクではこのイベントを使用してください。例えば、 docReady イベントを使用して、Acrobat または Adobe Reader のバージョンを確認し、フォームの入力者がフォームに入力する前にアプリケーションをアップグレードする必要がある場合にメッセージを返すことができます。

関連するリンク:

イベント

アプリケーションイベント

クライアントアプリケーション 使用の可否

Acrobat および Adobe Reader ○

HTML ブラウザー ×

Page 45: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

イベント

39

5.10. enter イベント

5.10.1. 説明

このイベントは、フォームの入力者のアクション(Tab キーを押してフィールド内に移動、またはフィールド内をクリック)またはプログラムを使用してフォーカスを設定するスクリプトのいずれかによって、フィールドまたはサブフォームがキーボードフォーカスを取得すると開始されます。

5.10.2. タイプ

インタラクティブイベント

5.10.3. サポート

5.10.4. バージョン

XFA 2.1

5.10.5. 例

このイベントを使用すると、現在のフィールドまたはサブフォーム内でフォームの入力者にヘルプテキストやその他のメッセージを提供できます。例えば、フィールドで特定の形式の値が必要な場合や、フィールドへの入力に特別な手順が必要な場合は、このイベントを使用して、その特別な要件を示すメッセージをフォームの入力者に提供できます。

enter イベントの詳しい使用例については、「 フォームの入力者のインタラクションに応答するフィールドのハイライト表示」を参照してください。

関連するリンク:

イベント

インタラクティブイベント

クライアントアプリケーション 使用の可否

Acrobat および Adobe Reader ○

HTML ブラウザー ○

Page 46: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

イベント 5

40

5.11. exit イベント

5.11.1. 説明

このイベントは、フォームの入力者のアクション(Tab キーを押して別のフィールドに移動、またはフィールド外をクリック)またはプログラムを使用してフォーカスを削除するスクリプトのいずれかによって、フィールドまたはサブフォームのキーボードフォーカスが失われると開始されます。

注:スクリプトの目的が現在のフィールドの値の操作である場合は、 calculate イベントへのスクリプトの添付を検討する必要があります。

5.11.2. タイプ

インタラクティブイベント

5.11.3. サポート

5.11.4. バージョン

XFA 2.1

5.11.5. 例

このイベントを使用すると、フォームの入力者がフィールドからフォーカスを移したときに、フィールドデータの検証を行うことができます。例えば、フィールドに値が必要な場合は、このイベントを使用して、フィールドにデータが必要であることを示すメッセージをフォームの入力者にフォームの送信前に提供できます。

exit イベントの詳しい使用例については、「 フォームの入力者のインタラクションに応答するフィールドのハイライト表示」を参照してください。

関連するリンク:

イベント

インタラクティブイベント

クライアントアプリケーション 使用の可否

Acrobat および Adobe Reader ○

HTML ブラウザー ○

Page 47: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

イベント

41

5.12. form:ready イベント

5.12.1. 説明

このイベントは、フォームデザインとデータが結合され、完成したフォームがメモリに存在し、initialize、 calculateおよび validate の各イベントが完了した後に開始されます。

注:form:ready イベントが適用されるのは、デザインビューのオブジェクトのみです。マスターページのオブジェクトには適用されません(「 プロセスイベント」を参照)。

5.12.2. タイプ

プロセスイベント

5.12.3. サポート

5.12.4. バージョン

XFA 2.1

5.12.5. 例

このイベントを使用すると、フォームデザインとデータが結合された後(ただし、レイアウトが確立される前)にタスクを実行できます。例えば、このイベントを使用して、フォームのページ編集およびレンダリングを行う前に、フォーム上のサブフォームの順序または配置をカスタマイズできます。

関連するリンク:

イベント

クライアントアプリケーション 使用の可否

Acrobat および Adobe Reader ○

HTML ブラウザー ×

Page 48: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

イベント 5

42

5.13. full イベント

5.13.1. 説明

このイベントは、フォームの入力者が許可されている最大容量を超えたコンテンツをフィールドに入力しようとすると開始されます。例えば、フィールドの「文字数の制限」プロパティが 5に設定されている場合に、フォームの入力者が abcdefという文字列を入力しようとすると、 full イベントが fという文字を入力したときに開始されます。

注:フィールドの「文字数の制限」プロパティは、オブジェクトパレットの「フィールド」タブにあります。

5.13.2. タイプ

インタラクティブイベント

5.13.3. サポート

5.13.4. バージョン

XFA 2.1

5.13.5. 例

このイベントを使用すると、フィールドの最大容量に到達したことをフォームの入力者に示すことができます。例えば、フィールドがいっぱいであることを示すメッセージをフォームの入力者に対して出力し、問題の修正に必要な手順を提供できます。

関連するリンク:

イベント

インタラクティブイベント

クライアントアプリケーション 使用の可否

Acrobat および Adobe Reader ○

HTML ブラウザー ×

Page 49: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

イベント

43

5.14. indexChange イベント

5.14.1. 説明

このイベントは、新しいデータとフォームの結合またはスクリプトの使用によるサブフォームの挿入、移動またはフォームからの削除の結果として開始されます。

テーブルの最後の行を削除すると indexChange イベントは発生しません。

注:このイベントを受信するのは、インスタンスマネージャーによって制御されるサブフォームのインスタンスのみです。サブフォームセットではこのイベントは無視されます。

5.14.2. タイプ

プロセスイベント

5.14.3. サポート

5.14.4. バージョン

XFA 2.5

5.14.5. 例

このイベントを使用すると、特定のオブジェクトのインスタンス値を基にプロパティを設定できます。例えば、このイベントを使用して、テーブルの代替行のシェーディングを調整できます。

関連するリンク:

イベント

プロセスイベント

クライアントアプリケーション 使用の可否

Acrobat および Adobe Reader ○

HTML ブラウザー ×

Page 50: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

イベント 5

44

5.15. initialize イベント

5.15.1. 説明

フォームデザインがデータと結合された後に、すべてのオブジェクトに対して開始されます。

5.15.2. タイプ

プロセスイベント

5.15.3. サポート

5.15.4. バージョン

XFA 2.1

5.15.5. 例

このイベントを使用すると、フォームの入力者のアクションの結果として、またはフォーム作成プロセスにおいて、オブジェクトが最初に作成されたときにアクションを実行できます。例えば、このイベントを使用して、フォームの入力者がボタンを使用してフォームに追加するサブフォームオブジェクトの新しいインスタンスの設定を制御できます。

関連するリンク:

イベント

プロセスイベント

クライアントアプリケーション 使用の可否

Acrobat および Adobe Reader ○

HTML ブラウザー ○

Page 51: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

イベント

45

5.16. layout:ready イベント

5.16.1. 説明

このイベントは、フォームデザインとデータが結合され、フォームが存在し、フォームのレイアウトが適用された後に開始されます。この時点では、完成したフォームはレンダリングされていません。したがって、このイベントで実行するように設定されている演算またはスクリプトでは、フォームがレンダリングされる前にレイアウトを変更する場合があります。また、演算またはスクリプトによってデータが変更される場合や、Acrobat または Adobe Reader でフォームが変更される場合は、フォームがレンダリングされた後にもこのイベントが発生します。

注:layout:ready で発生するスクリプトによって、フォームのレイアウトを変更する処理を行うことはできません。例えば、拡大または縮小するサブフォームやテーブルに関係する処理、実行時にフラグメントを動的に追加する処理、サブフォームのインスタンスを追加または削除する処理、オブジェクトの配置の設定を表示と非表示で切り替える処理などがこれに含まれます。

layout:ready イベントを含むインタラクティブフォーム内のフィールドは、Acrobat 7.0.5 以降でサポートされます。

5.16.2. タイプ

プロセスイベント

5.16.3. サポート

5.16.4. バージョン

XFA 2.1

5.16.5. 例

このイベントを使用すると、フォームのレイアウトが確立された直後にタスクを実行できます。例えば、このイベントを使用して、フォームのページ数を判断できます。

関連するリンク:

イベント

プロセスイベント

クライアントアプリケーション 使用の可否

Acrobat および Adobe Reader ○

HTML ブラウザー ×

Page 52: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

イベント 5

46

5.17. mouseDown イベント

5.17.1. 説明

ポインターがフィールド内にある場合にフォームの入力者がマウスのボタンを押すと開始されます。

注:テキストフィールドまたは数値フィールドに対して mouseDown イベントが開始されると、すぐに演算またはスクリプトが実行されます。ただし、フィールドのフォーカスが失われるまでは、演算とスクリプトに応答してフィールドの値が変更されることはありません。署名フィールドに対して開始されるmouseDown イベントは、署名プロセスの開始前に開始されます。

5.17.2. タイプ

インタラクティブイベント

5.17.3. サポート

5.17.4. バージョン

XFA 2.1

5.17.5. 例

このイベントを使用すると、フォーム上でのフォームの入力者によるボタンのクリック、またはラジオボタンやチェックボックスの選択に対する直接の応答としてアクションを実行できます。例えば、mouseDown イベントをチェックボックスで使用して、フォーム上のフィールドの表示と非表示を切り替えることができます。このイベントは、概念的には click イベントと同様であり、目的も同じです。

関連するリンク:

イベント

インタラクティブイベント

click イベント

クライアントアプリケーション 使用の可否

Acrobat および Adobe Reader ○

HTML ブラウザー ○

Page 53: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

イベント

47

5.18. mouseEnter イベント

5.18.1. 説明

このイベントは、フォームの入力者がマウスのボタンを必ずしも押すことなくポインターをフィールドの領域に移動すると開始されます。別の理由でフィールド内にポインターを移動する場合、このイベントは開始されません。例えば、重なっているウィンドウを閉じる場合などです。

5.18.2. タイプ

インタラクティブイベント

5.18.3. サポート

5.18.4. バージョン

XFA 2.1

5.18.5. 例

このイベントを mouseExit イベントと共に使用すると、フォームの入力者に視覚的なフィードバックを提供することができます。 例えば、このイベントを使用して、オブジェクトの境界線または背景色を変更し、フォームの入力者が特定のフィールドで作業していることを視覚的に示すことができます。

mouseEnter イベントの詳しい使用例については、「 フォームの入力者のインタラクションに応答するフィールドのハイライト表示」を参照してください。

関連するリンク:

イベント

インタラクティブイベント

クライアントアプリケーション 使用の可否

Acrobat および Adobe Reader ○

HTML ブラウザー ×

Page 54: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

イベント 5

48

5.19. mouseExit イベント

5.19.1. 説明

このイベントは、フォームの入力者がポインターをフィールド外に移動すると(フォームの入力者がマウスのボタンを押している場合であっても)開始されます。別の理由でフィールド外にポインターを移動する場合、このイベントは開始されません。例えば、重なっているウィンドウを開く場合などです。

5.19.2. タイプ

インタラクティブイベント

5.19.3. サポート

5.19.4. バージョン

XFA 2.1

5.19.5. 例

このイベントを mouseEnter イベントと共に使用すると、フォームの入力者に視覚的なフィードバックを提供することができます。 例えば、このイベントを使用して、オブジェクトの境界線または背景色の値を元に戻し、フォームの入力者が特定のフィールドでは作業していないことを視覚的に示すことができます。

mouseExit イベントの詳しい使用例については、「 フォームの入力者のインタラクションに応答するフィールドのハイライト表示」を参照してください。

関連するリンク:

イベント

インタラクティブイベント

クライアントアプリケーション 使用の可否

Acrobat および Adobe Reader ○

HTML ブラウザー ×

Page 55: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

イベント

49

5.20. mouseUp イベント

5.20.1. 説明

ポインターがフィールド内にある場合にフォームの入力者がマウスのボタンを離すと開始されます。

注:テキストフィールドまたは数値フィールドに対して mouseUp イベントが発生すると、すぐに演算またはスクリプトが実行されます。ただし、フィールドのフォーカスが失われるまでは、演算とスクリプトに応答してフィールドの値が変更されることはありません。

5.20.2. タイプ

インタラクティブイベント

5.20.3. サポート

5.20.4. バージョン

XFA 2.1

5.20.5. 例

このイベントを使用すると、フォーム上でのフォームの入力者によるボタンのクリック、またはラジオボタンやチェックボックスの選択に対する直接の応答としてアクションを実行できます。例えば、 mouseUpイベントをチェックボックスで使用すると、フォーム上のフィールドの表示と非表示を切り替えることができます。このイベントは、概念的には click イベントと同様であり、目的も同じです。

関連するリンク:

イベント

インタラクティブイベント

クライアントアプリケーション 使用の可否

Acrobat および Adobe Reader ○

HTML ブラウザー ○

Page 56: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

イベント 5

50

5.21. postOpen イベント

5.21.1. 説明

このイベントは、コンボボックス内のデータを表示するアクションをフォームの入力者が実行した直後に開始されます。例えば、コンボボックスの矢印アイコンをクリックしたり、Tab キーを押してコンボボックスに移動してから下矢印を使用したりする処理です。このイベントは、コンボボックスのコンテンツが表示された後に開始されます。

注:このイベントはコンボボックスオブジェクトにのみ適用されます。

5.21.2. タイプ

インタラクティブイベント

5.21.3. サポート

5.21.4. バージョン

XFA 2.8

5.21.5. 例

このイベントを使用すると、コンボボックスを開く処理の結果として発生するエラーまたは予期しない結果に対処できます。例えば、ユーザーのインタラクションではなくスクリプティングを通じて preOpen イベントが送出される場合や、エラーの結果としてコンボボックスのデータが開かれない場合は、エラー処理のスクリプトを実行するために postOpen イベントが引き続き送出されます。

関連するリンク:

イベント

インタラクティブイベント

クライアントアプリケーション 使用の可否

Acrobat および Adobe Reader ○

HTML ブラウザー ×

Page 57: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

イベント

51

5.22. postPrint イベント

5.22.1. 説明

このイベントは、レンダリングされたフォームがプリンター、スプーラーまたは出力先に送信された直後に開始されます。

5.22.2. タイプ

アプリケーションイベント

5.22.3. サポート

5.22.4. バージョン

XFA 2.1

5.22.5. 例

このイベントを使用すると、フォームが印刷された後にフォームの入力者に対して情報メッセージを表示できます。例えば、フォームを手動で送信する手順をフォームの入力者に通知するためのスクリプトをpostPrint イベントで作成できます。

関連するリンク:

イベント

アプリケーションイベント

クライアントアプリケーション 使用の可否

Acrobat および Adobe Reader ○

HTML ブラウザー ×

Page 58: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

イベント 5

52

5.23. postSave イベント

5.23.1. 説明

このイベントは、フォームの入力者が PDF 形式または XDP 形式でフォームを保存した直後に開始されます。フォームのサブセット(例えば、フォームデータのみ)を XDP に書き出す場合、このイベントは開始されません。

5.23.2. タイプ

アプリケーションイベント

5.23.3. サポート

5.23.4. バージョン

XFA 2.1

5.23.5. 例

このイベントを使用すると、フォームデータが保存された後にフォームの入力者に対して情報メッセージを表示できます。例えば、フォームを完成させて送信するまでの残り時間をフォームの入力者に通知するためのスクリプトを postSave イベントで作成できます。

関連するリンク:

イベント

アプリケーションイベント

クライアントアプリケーション 使用の可否

Acrobat および Adobe Reader ○

HTML ブラウザー ×

Page 59: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

イベント

53

5.24. postSign イベント

5.24.1. 説明

このイベントは、フォームに電子署名を適用するアクションをフォームの入力者が実行した直後に開始されます。

注:このイベントは署名フィールドオブジェクトにのみ適用されます。

5.24.2. タイプ

インタラクティブイベント

5.24.3. サポート

5.24.4. バージョン

XFA 2.8

5.24.5. 例

このイベントを使用すると、フォームに電子署名が適用されている場合に課せられる制限についてユーザーに通知できます。

関連するリンク:

イベント

インタラクティブイベント

クライアントアプリケーション 使用の可否

Acrobat および Adobe Reader ○

HTML ブラウザー ×

Page 60: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

イベント 5

54

5.25. postSubmit イベント

5.25.1. 説明

このイベントは、HTTP プロトコル経由でフォームからホストにデータが送信された直後に開始されます。

注:このイベントでは、ボタンのクリックのインスタンスによって開始される送信または別の URL に対する送信を区別しません。このような区別を行う必要のあるスクリプトには、クリックされたボタンを判断するためのスクリプトを含める必要があります。通常、 postSubmit イベントは概念的に postSave イベントと同様であり、目的も同じです。

5.25.2. タイプ

アプリケーションイベント

5.25.3. サポート

5.25.4. バージョン

XFA 2.8

5.25.5. 例

このイベントを使用すると、フォームデータが送信された直後にアクションを実行できます。例えば、送信が正常に実行されたという確認を表示するスクリプトを postSubmit イベントで作成できます。

関連するリンク:

イベント

アプリケーションイベント

クライアントアプリケーション 使用の可否

Acrobat および Adobe Reader ○

HTML ブラウザー ○(送信ボタンの場合のみ)

Page 61: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

イベント

55

5.26. preOpen イベント

5.26.1. 説明

このイベントは、コンボボックスを表示するアクションをフォームの入力者が実行するときに開始されます。例えば、コンボボックスの矢印アイコンをクリックしたり、Tab キーを押してコンボボックスに移動してから下矢印を使用したりする処理です。このイベントは、コンボボックスのコンテンツが表示される前に開始されます。

注:このイベントはコンボボックスオブジェクトにのみ適用されます。

5.26.2. タイプ

インタラクティブイベント

5.26.3. サポート

5.26.4. バージョン

XFA 2.4

5.26.5. 例

このイベントを使用すると、多数のリスト項目の読み込みを制御できます。例えば、このイベントを使用して、固定数のレコードをデータソースからコンボボックスに読み込むことができます。これにより、実行時にフォームの入力者がフォームを使用する際のパフォーマンスが向上します。

関連するリンク:

イベント

インタラクティブイベント

クライアントアプリケーション 使用の可否

Acrobat および Adobe Reader ○

HTML ブラウザー ×

Page 62: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

イベント 5

56

5.27. prePrint イベント

5.27.1. 説明

このイベントは、印刷のためのフォームのレンダリングプロセスを開始する直前に開始されます。このイベントを使用して印刷をキャンセルすることはできません。

重要:フォームオブジェクトの表示と非表示を切り替えるためにこのイベントを使用しないでください。例えば、既にフォームの入力者がフォームに電子署名を適用している場合は、印刷前にこのイベントを使用してすべてのボタンオブジェクトを非表示にすると、署名の状態に影響を及ぼします。

5.27.2. タイプ

アプリケーションイベント

5.27.3. サポート

5.27.4. バージョン

XFA 2.1

5.27.5. 例

このイベントを使用すると、オブジェクトが印刷されないようにオブジェクトの配置を変更できます。例えば、このイベントを使用して、フォームをオンラインで入力する場合に、フォームの入力者が使用するテキストまたは手順を非表示にできます。

関連するリンク:

イベント

アプリケーションイベント

クライアントアプリケーション 使用の可否

Acrobat および Adobe Reader ○

HTML ブラウザー ○

Page 63: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

イベント

57

5.28. preSave イベント

5.28.1. 説明

このイベントは、PDF 形式または XDP 形式でフォームデータが保存される直前に開始されます。フォームデータまたはフォームの別のサブセットが XDP に書き出される場合、このイベントは開始されません。

5.28.2. タイプ

アプリケーションイベント

5.28.3. サポート

5.28.4. バージョン

XFA 2.1

5.28.5. 例

このイベントを使用すると、データが保存される直前にフォームデータを変更できます。例えば、データをスキャンして、必須フィールドが空のままの場合にリマインダーのメッセージをフォームの入力者に対して表示するスクリプトを preSave イベントで作成できます。

関連するリンク:

イベント

アプリケーションイベント

クライアントアプリケーション 使用の可否

Acrobat および Adobe Reader ○

HTML ブラウザー ○

Page 64: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

イベント 5

58

5.29. preSign イベント

5.29.1. 説明

このイベントは、フォームに電子署名を適用するアクションをフォームの入力者が実行する直前に開始されます。

注:このイベントは署名フィールドオブジェクトにのみ適用されます。

5.29.2. タイプ

インタラクティブイベント

5.29.3. サポート

5.29.4. バージョン

XFA 2.8

5.29.5. 例

このイベントを使用すると、電子署名の適用対象のデータを検証したり、ユーザーが電子署名を適用する前に情報を提供したりすることができます。

関連するリンク:

イベント

インタラクティブイベント

クライアントアプリケーション 使用の可否

Acrobat および Adobe Reader ○

HTML ブラウザー ×

Page 65: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

イベント

59

5.30. preSubmit イベント

5.30.1. 説明

このイベントは、HTTP プロトコル経由でフォームからホストにデータが送信されるときに開始されます。ここで、データはデータセットにまとめられますが、ホストには送信されていません。このイベントに関連付けられた演算とスクリプトでは、フォームの送信前にデータを調べたり変更したりできます。演算またはスクリプトがサーバーで実行するように設定されている場合、フォームでは、追加の処理を実行する前に演算またはスクリプトをサーバーで実行する必要があることを示すデータをサーバーに送信します。

注:このイベントでは、ボタンのクリックのインスタンスによって開始される送信または別の URL に対する送信を区別しません。このような区別を行う必要のあるスクリプトには、クリックされたボタンを判断するためのコードを含める必要があります。通常、 preSubmit イベントは概念的に preSave イベントと同様であり、目的も同じです。

5.30.2. タイプ

アプリケーションイベント

5.30.3. サポート

5.30.4. バージョン

XFA 2.1

5.30.5. 例

このイベントを使用すると、データが送信される直前にフォームデータを変更できます。例えば、データの量をスキャンして、データの送信にかかる時間を予測するメッセージをフォームの入力者に対して表示するスクリプトを preSubmit イベントで作成できます。

関連するリンク:

イベント

アプリケーションイベント

preSave イベント

クライアントアプリケーション 使用の可否

Acrobat および Adobe Reader ○

HTML ブラウザー ○(送信ボタンの場合のみ)

Page 66: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

イベント 5

60

5.31. validate イベント

5.31.1. 説明

このイベントは、フォームデザインとデータが結合されてフォームが作成される場合、およびフィールドのフォーカスが失われる場合に開始されます。例えば、フォームの入力者がクリックするか Tab キーを使用してフィールドを終了する場合などです。このイベントは、フィールドの値が変更されるたびに開始されます。 validate イベントに配置される演算とスクリプトでは、オブジェクトパレットの「値」タブから行う検証よりも詳細な検証を実行できます。

validate イベントの演算とスクリプトは、成功または失敗した検証に対応する true または false(スクリプト言語に適した形式で表されます)を返すために必要です。フォームの値のフォーム構造全体にこの演算とスクリプトが影響を与えることはできません。また、演算とスクリプトでは、フォームの入力者にフィードバックを提供できません。これは、フォームの入力者が Acrobat などのクライアントアプリケーションでフォームを使用していない可能性があるためです。

注:検証はフォームのコンテンツに対して実行されるので、フィールドのパターンによるプレゼンテーションの書式を検証することはできません。

5.31.2. タイプ

プロセスイベント

5.31.3. サポート

5.31.4. バージョン

XFA 2.1

5.31.5. 例

このイベントを使用すると、特にオブジェクトデータが特定のルールに準拠する必要のある状況において、オブジェクトの値を検証できます。例えば、発注書フォームのコストの合計のフィールドに負の値が含まれていないことを検証するスクリプトを validate イベントで作成できます。

validate イベントの詳しい使用例については、「 実行時の必須フィールドの設定」を参照してください。

関連するリンク:

イベント

プロセスイベント

クライアントアプリケーション 使用の可否

Acrobat および Adobe Reader ○

HTML ブラウザー ○

Page 67: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

FormCalcおよび JavaScriptによるスクリプティング

61

6. FormCalc および JavaScript によるスクリプティング

FormCalcと JavaScriptはそれぞれ別のタイプのユーザーを対象にしていますが、それぞれで使用可能な組み込み関数のタイプには共通する部分もあります。以下の表では、使用できるすべてのFormCalc関数と、それぞれと同等の機能を持つ関数が JavaScriptに存在するかどうかを一覧表示しています。

FormCalc 関数およびパラメーターの詳細については、「 組み込み関数の構文」を参照してください。

FormCalc 関数 説明 同等の JavaScript メソッド

Abs(n1) 数値または数式の絶対値を返します。 Math.abs(n1)Apr(n1, n2, n3) 年間のローン利率を百分率で返します。 なし

At(s1, s2) 別の文字列中に存在する、任意の文字列の開始文字位置を特定します。

String.search(s1)

Avg(n1 [, n2... ] ) セットの数値や数式の値を求め、そのセット内の null でない要素の平均を返します。

なし

Ceil(n1) 渡された数値以上の整数を返します。 Math.ceil(n1)Choose(n1, s1 [, s2... ] ) 渡されたパラメーターセットから値を

選択します。なし

Concat(s1 [, s2... ] ) 複数の文字列を連結して返します。 String.concat(s1, s2 [, s3 ... ])

Count(n1 [, n2...]) セットの値や数式の値を求め、そのセット内の null でない要素の数を返します。

なし

CTerm(n1, n2, n3) 将来増額する固定された複利率を補うための投資に必要な期間の値を返します。

なし

Date() 現在のシステム日付を、エポックからの日数として返します。

Date.getDate()JavaScriptのDateオブジェクトの場合、エポックは基準点として使用されません。

Date2Num(d1 [, f1 [, k1 ] ] ) 日付文字列を渡すと、エポック以降の日数を返します。

JavaScriptのDateオブジェクトの場合、エポックは基準点として使用されません。

DateFmt([ n1 [, k1 ] ] ) 日付形式スタイルが渡されると、日付形式文字列を返します。

なし

Decode(s1 [, s2 ] ) 渡された文字列をデコードして返します。

部分的なサポートJavaScriptはエスケープ文字を含まない URL でエンコードされた値だけをサポートします。

Page 68: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

FormCalcおよび JavaScriptによるスクリプティング 6

62

Encode(s1 [, s2 ] ) 渡された文字列をエンコードして返します。

部分的なサポートJavaScriptはエスケープ文字を含まないURLでエンコードされた値だけをサポートします。

Eval() 渡されたフォームの演算後の値を返します。

eval(s1)

Exists(v1) 渡されたパラメーターが既存オブジェクトへの有効な参照構文かどうかを判定します。

なし

Floor(n1) 渡された値以下の最大整数値を返します。

Math.floor(n1)

Format(s1, s2) 指定したピクチャ形式文字列に従って、渡されたデータをフォーマットします。

なし

FV(n1, n2, n3) 一定の利率で一定期間に返済されるときの将来の金額を返します。

なし

Get(s1) 渡された URL のコンテンツをダウンロードします。

なし

HasValue(v1) 渡されたパラメーターが null、空、空文字列でない値を持つ有効な参照構文かどうか判定します。

なし

IPmt(n1, n2, n3, n4, n5) 一定期間のローンに対して支払われる利子の額を返します。

なし

IsoDate2Num(d1) 有効な日付文字列が渡されると、エポック以降の日数を返します。

なし

IsoTime2Num(d1) 有効な時間文字列が渡されると、エポック以降のミリ秒数を返します。

なし

Left(s1, n1) 左側の最初の文字から指定された文字数を抽出します。

String.substring(n1, n2)

Len(s1) 渡された文字列の文字数を返します。 String.lengthLocalDateFmt( [ n1 [, k1 ] ] ) 日付形式スタイルが渡されると、ロー

カライズされた日付形式文字列を返します。

なし

LocalTimeFmt( [ n1 [, k1 ] ] ) 時間形式スタイルに対してローカライズされた時間形式文字列を返します。

なし

Lower(s1 [, k1 ] ) 指定された文字列内の大文字をすべて小文字に変換します。

String.toLowerCase(s1)

Ltrim(s1) 文字の前にある空白文字をすべて削除した文字列を返します。

なしこの操作は JavaScript の正規表現を使用して実行できます。

FormCalc 関数 説明 同等の JavaScript メソッド

Page 69: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

FormCalcおよび JavaScriptによるスクリプティング

63

Max(n1 [, n2... ] ) 渡された数値セットの null でない要素の最大値を返します。

Math.max(n1, n2)

Min(n1 [, n2... ] ) 渡された数値セットの null でない要素の最小値を返します。

Math.min(n1, n2)

Mod(n1, n2) 数値を別の数値で割り算したときの係数を返します。

剰余 (%)演算子を使用します。

NPV(n1, n2 [, ... ] ) 割引率と各支払いの将来のキャッシュフローに基づいた、投資の正味現在価値を返します。

なし

Num2Date(n1[, f1 [, k1 ] ] ) エポック以降の日数を渡すと、日付文字列を返します。

なし

Num2GMTime(n1 [,f1 [, k1 ] ] ) エポック以降のミリ秒数を渡すと、GMT 時間文字列を返します。

なし

Num2Time(n1 [,f1 [, k1 ] ] ) エポック以降のミリ秒数を渡すと、時間文字列を返します。

なし

Oneof(s1, s2 [, s3... ] ) 値が渡されたセット内にある場合はtrue(1)を返し、ない場合は false(0)を返します。

なしこの関数は、 String.search(「s1」) メソッドおよび String.match (「expression」) メソッドに似ています。

Parse(s1, s2) 指定されたピクチャ形式に従って、渡されたデータを分析します。

なし

Pmt(n1, n2, n3) 一定の返済額および一定の利率に基づき、ローン返済額を返します。

なし

Post(s1, s2 [, s3 [, s4 [, s5 ] ] ] )

渡されたデータを指定した URL にポストします。

なし

PPmt(n1, n2, n3, n4, n5) 一定期間のローンに対して返済された元本の額を返します。

なし

Put(s1, s2 [, s3 ] ) 渡されたデータを指定した URL にアップロードします。

なし

PV(n1, n2, n3) 一定の利率で定期的に定額返済される融資の現価を返します。

なし

Rate(n1, n2, n3) 渡された期間内で、現在から将来にかけて増加する融資額に対して要求される期間における複利を返します。

なし

Ref() 既存のオブジェクトの参照を返します。 なし

Replace(s1, s2 [, s3 ] ) 指定された文字列内で、任意の文字列を別の文字列ですべて置換します。

String.replace(s1, s2)

FormCalc 関数 説明 同等の JavaScript メソッド

Page 70: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

FormCalcおよび JavaScriptによるスクリプティング 6

64

Right(s1, n1) 右側の最後の文字から渡された複数の文字を抽出します。

String.substring(n1, n2)

Round(n1 [, n2 ] ) 渡された数値または数式の値を求め、渡された小数点の位で四捨五入した値を返します。正確な結果を求める場合、既存のフラグを xfa.xci として設定します。デフォルトの動作に切り替える場合は既存のフラグを削除します。

Math.round(n1)

Rtrim(s1) 文字の後にある空白文字をすべて削除した文字列を返します。

なしこの操作は JavaScript の正規表現を使用して実行できます。

Space(n1) 渡された数の空スペースで構成される文字列を返します。

なし

Str(n1 [, n2 [, n3 ] ] ) 数字を文字列へ変換します。FormCalcは変換結果を指定された幅にフォーマットし、指定された小数位に数を四捨五入します。

String(n1)またはNumber.toString(radix)

Stuff(s1, n1, n2 [, s2 ] ) 文字列を別の文字列へ挿入します。 なし

Substr(s1, n1, n2) 渡された文字列の一部を抽出します。 String.substring(n1, n2)

Sum(n1 [, n2... ] ) 渡された数値セットの null でない要素の合計を返します。

なし

Term(n1, n2, n3) 有利子負債に対して定期的に定額返済した場合、渡された将来の額に達するのに必要な期間数を返します。

なし

Time() エポック以降のミリ秒数として現在のシステム時刻を返します。

Date.getTime()JavaScript の Date オブジェクトの場合、エポックは基準点として使用されません。

Time2Num(d1 [, f1 [, k1 ] ] ) 時間文字列が渡されると、エポック以降のミリ秒数を返します。

なし

TimeFmt([n1 [, k1 ] ] ) 時間形式スタイルに対して時間形式を返します。

なし

UnitType(s1) ユニットスパンの単位を返します。 ユニットスパン は、数値とそれに続く単位名を構成する文字列です。

なし

UnitValue(s1 [, s2 ] ) オプションの単位に変換した後、測定の数値とそれに関連するユニットスパンを返します。

なし

Upper(s1 [, k1 ] ) 文字列内の小文字をすべて大文字に変換します。

String.toUpperCase()

FormCalc 関数 説明 同等の JavaScript メソッド

Page 71: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

FormCalcおよび JavaScriptによるスクリプティング

65

関連するリンク:FormCalc の使用

6.1. FormCalc の使用

FormCalc は、一般的な表計算ソフトウェアをモデルとした簡単かつ強力な演算言語です。FormCalc の目的は、従来のスクリプティングテクニックや言語の知識がなくても、すばやくかつ効果的なフォームデザインを容易にすることです。FormCalc に馴染みのないユーザーでも、複数の組み込み関数を使用して、時間のかかる演算や検証などを簡素化するフォームをすばやく作成できます。FormCalc を使用して、フォームデザインの基本的なルールのセットを作成し、入力データに柔軟に対応するフォームを実現できます。

Designer において、スクリプティングを使用する際は常に FormCalc がデフォルトのスクリプト言語ですが、JavaScript の選択も可能です。デフォルトのスクリプト言語を設定する方法について詳しくは、「 スクリプティングのための Designer の設定」を参照してください。

重要:サーバーベースの処理(Forms など)と併用できるフォームを作成し、フォームを HTML でレンダリングしようとする場合は、演算とスクリプトを JavaScript で記述する必要があります。FormCalc による演算は HTML ブラウザーに認識されず、フォームが HTML でレンダリングされる前に削除されます。

FormCalc はスクリプトエディター内の新規のラインを、値を求めるべき新しい式として扱います。

関連するリンク:JavaScript の使用

6.2. 組み込み関数の使用

FormCalc を構成する組み込み関数が扱うデータは、数学、日時、文字列、会計、論理、Web など、広範囲な領域にわたります。それぞれフォームで一般的に使用される機能です。組み込み関数を使うと、フォームデータをすばやく簡単に操作して作業効率を向上できます。

最も基本的なレベルでは、1 つの FormCalc 関数から演算を実行できます。ただし、1 つの FormCalc 関数は他の FormCalc 関数をパラメーターとして使用できます。

Uuid(n1) 識別方法として使用されるUUID(Universally Unique Identifier)文字列を返します。

なし

Within(s1, s2, s3) テスト値が渡された範囲内にある場合は true(1)を返し、ない場合は false(0)を返します。

String.search(s1)

WordNum(n1 [, n2 [, k1 ] ] ) 渡された数を表す英語テキストを返します。

なし

FormCalc 関数 説明 同等の JavaScript メソッド

Page 72: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

FormCalcおよび JavaScriptによるスクリプティング 6

66

6.2.1. FormCalc 関数をオブジェクトに追加するには

FormCalc 関数は演算やスクリプトを使用できるすべてのフォームデザインオブジェクトに追加できます。ただし、スクリプトオブジェクトは例外です。

1) Designer ワークスペース上のスクリプトエディターが複数行モードで動作していることを確認します。

2) フォーム上のフィールドを 1 つ選択します。

3) イベントリストで「calculate」イベントを選択します。

4) 関数アイコンをクリックするか F10 キーを押して、FormCalc 関数リストを表示します。

5) 該当する関数を選択し、Enter キーを押します。

6) 関数のデフォルトの構文表記を、独自の値セットで置き換えます。

7) フォームをテストするには、「PDF プレビュー」タブをクリックします。

6.2.2. 組み込み関数の構文

FormCalc 関数にはそれぞれ構文表記規則があり、関数を正しく実行させるには規則に従う必要があります。この表では一部の構文表記規則について大まかに説明しています。

関連するリンク:基本計算の作成

FormCalc の使用

構文表記 置き換える値

d 有効な日付文字列(例えば、1996/03/15)

f 有効な日付形式の文字列(例えば、YYYY/MM/DD)

k 有効なロケール識別子(例えば、fr_FR)

n 有効な数値。有効な値の範囲は関数によって異なるので注意してください。

s 有効な測定単位(例えば、インチを表す「in」)。

v 有効な参照構文。

n1, n2, n3 値は 3 つとも必須です。

[ [ n [, k ] ] ] 値はいずれも必須ではありませんが、n のみを指定することも、n と k 両方を指定することもどちらも可能です。

n1 [, n2 ... ] n1 は必須です。それ以外の値は無限個まで指定できます。

d [, f [, k ] ] d は必須ですが、それ以外は f だけを指定することも、f と k 両方を指定することも可能です。

Page 73: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

FormCalcおよび JavaScriptによるスクリプティング

67

6.3. 基本計算の作成

6.3.1. 基本的な演算について

単純式はスクリプティングの最も基本的なインスタンスです。単純式では FormCalc の組み込み関数は使用されず、また 2 行以上になることもありません。特定のフィールドまたはオブジェクトの calculate イベントに単純式を追加すると、式の値がフォームに出力されます。

6.3.2. 基本的な演算の例

以下はすべて単純式の例です。

2 "abc" 2 - 3 * 10 / 2 + 7

式の構文から計算順が明らかでない場合でも、単純式は一般的な演算の順序規則に従って 1 つの値を求めます。例えば、以下の式はいずれも同じ結果になります。

上の表から分かるように、FormCalc のすべての演算子には、式での優先順位があります。次の表に演算子の優先順位を示します。

式 等価な式 結果

"abc" "abc" abc

2 - 3 * 10 / 2 + 7 2 - (3 * 10 / 2) + 7 -6

(10 + 2) * (5 + 4) (10 + 2) * (5 + 4) 108

0 and 1 or 2 > 1 (0 and 1) or (2 >1) 1 (true)

2 < 3 not 1 == 1 (2 < 3) not (1 == 1) 0 (false)

優先順位 演算子

高 =

(単項)-、+、not

*、/

+、-

<、<=、>、>=、lt、le、gt、ge

==、<>、eq、ne

&、and

低 |、or

Page 74: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

FormCalcおよび JavaScriptによるスクリプティング 6

68

上の例はすべて有効な単純式で、フォームの演算やスクリプトに対応したフィールドやオブジェクトに追加できます。例えば、Designer で数値フィールドを 1 つ含むフォームを作成し、次の演算をスクリプトエディターで calculate イベントに追加するとします。

この場合、「PDF プレビュー」タブをクリックして完成したフォームを表示すると、単純式の値をテキストフィールドで確認できます。

プレビューで値が表示されない場合は、単純式がフォームデザインオブジェクトの calculate イベントにあることを確認してください。また、Designer および Acrobat が正しくインストールされていることを確認してください。

関連するリンク:FormCalc の使用

JavaScript の使用

Page 75: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

FormCalcおよび JavaScriptによるスクリプティング

69

6.4. JavaScript の使用

フォームデザインの作成者がより柔軟に、より多彩にスクリプトを記述できるように、Designer はスクリプトが可能なあらゆる状況での JavaScript バージョン 1.6 以前の使用をサポートしています。

フォーム開発者が JavaScript を使い慣れている場合は、既存の知識を直接 Designer に応用できます。Designer には、JavaScript を拡張して、フィールドやオブジェクトの値にアクセスできるようにするプロパティやメソッドが数多く用意されています。このようなプロパティやメソッドを Designer の参照構文と組み合わせれば、フォームの値やデータを簡単に操作できるようになります。

注:スクリプトエディターは、JavaScript を使用して作成されたスクリプトの構文エラーチェックを行いません。また、標準の JavaScript オブジェクトやメソッドに対してはステートメント完了機能のオプションが表示されません。

関連するリンク:JavaScript を使用したスクリプトの作成

6.5. JavaScript を使用したスクリプトの作成

Designer で JavaScript を使用してスクリプトを作成するのは、他のアプリケーションで JavaScript を作成するのとほとんど同じです。JavaScript の概念についての予備知識を活用することができます。Designerスクリプトオブジェクトを使用する JavaScript 関数を再利用し、JavaScript 言語の機能を活用することができます。

ただし、JavaScript についての予備知識を利用できるとはいえ、フォームデザインで JavaScript を効果的に使用するには、Designer 参照構文の構築方法を理解する必要があります。特に、フォームデザイン上のオブジェクトにアクセスするには、XML フォームオブジェクトモデルの参照構文の正しい使用方法を理解している必要があります。

次の表に、Designer 用のスクリプトを JavaScript で作成するための重要な概念をまとめます。また、Designer ヘルプ での詳細情報の参照先も示します。

Designer ヘルプ で提供されているリソースに加えて、 デベロッパーセンターには、スクリプティングに関する多数のリソースおよびドキュメントが用意されています。

重要な概念 詳細情報の参照先

resolveNode メソッドの使用など、オブジェクトのプロパティと値への参照の作成

オブジェクトのプロパティおよび値の参照resolveNodeステートメント完了を使用して演算とスクリプトを作成するには

ホストモデルおよびイベントモデルを使用したフォームのテストおよびデバッグ

演算とスクリプトのテストおよびデバッグオブジェクトのプロパティおよび値の参照

スクリプトオブジェクトを使用した既存の JavaScript関数の再利用

JavaScript 関数の作成と再利用

Page 76: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

FormCalcおよび JavaScriptによるスクリプティング 6

70

関連するリンク:JavaScript での厳密なスコープ規則の強制

JavaScript スクリプトをオブジェクトに追加するには

JavaScript の使用

6.6. JavaScript での厳密なスコープ規則の強制

フォームで JavaScript を使用する場合、対象となるスコープ内でオブジェクトと変数を宣言することが重要です。不要にオブジェクトや変数をグローバルに宣言すると、パフォーマンス上の問題が生じることがあります。

厳密なスコープは、フォームの実行時のメモリ使用量を改善するために Designer 8.1 で導入されました。厳密なスコープは、Designer では、新しいフォームに対してデフォルトで有効です。古いフォームに対しては、厳密なスコープを有効にするオプションが使用可能です。

6.6.1. JavaScript におけるスコープとは

スコープは、中括弧({})内のすべての要素が括弧の外部を参照できるように外側に機能します。ただし、中括弧の外部にある要素は中括弧内の要素にアクセスできません。

次の例では、最初の中括弧で関数のスコープを開始し、2 番目の括弧で関数のスコープを閉じています。中括弧内のすべての要素は、foo () のスコープ内にあります。

次の例のスコープは有効です。中括弧内の var nFooVar = nOutsideVar が中括弧外の varnOutsideVar = 2 を参照できます。

Page 77: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

FormCalcおよび JavaScriptによるスクリプティング

71

一方、次の例のスコープは無効です。 var nOutsideVar = 2 は中括弧内の var nFooVar = 4 にアクセスできません。

スクリプトにおけるスコープは、スクリプトの要素にアクセスできる要素を表します。スクリプトの要素には、変数または関数を使用できます。

6.6.2. スコープ XML とは

フォームデザインにおけるスコープとは階層のことです。例えば、次の XML ソースでサブフォームinside にアクセスするには、「 outside.inside」と入力する必要があります。

<subform name=“outside”> <subform name=“inside”> … </subform> </subform>

「 inside.outside 」は入力しません。最も外側のサブフォームから内側にアクセスする必要があるためです。

6.6.3. SOM 式とスコープ

Acrobat または Adobe Reader 8.1 を対象としたフォームでは、次の例に示すように SOM 式が正しくスコープされます。

<subform name="a">

<subform name="b"/>

Acrobat または Adobe Reader 8.0 を対象としたフォームでは、SOM 式 a.b.a はサブフォーム a を返します。Acrobat または Adobe Reader 8.1 を対象としたフォームでは、SOM 式 a.b.a は null を返します。これは、サブフォーム b が a という子を持たないためです。Acrobat または Adobe Reader 9.0 以降では、SOM 式はエラーを返します。これは、 a が bの有効な子ではないためです。

Acrobat または Adobe Reader 8.1 では、次の例に示すようにノードのスクリプト内の関数と変数はグローバルになりません(スクリプトオブジェクトは例外です)。

Page 78: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

FormCalcおよび JavaScriptによるスクリプティング 6

72

<field name="field1">

event activity="initialize">

<script contentType="application/x-javascript">

// Function bar() is scoped to field1.initialize; nothing outside <event activity="initialize"> scope can see inside here (in 8.1)

function bar()

{

return "bar";

}

</script>

</event>

/field>

field name="field2">

<event activity="click">

<script contentType="application/x-javascript">

field1.bar();

</script>

</event>

</field>

Acrobat または Adobe Reader 8.0 を対象としたフォームで「 field 2 」をクリックすると、関数 bar()が実行されます。

Acrobat または Adobe Reader 8.1 を対象としたフォームで「 field 2 」をクリックすると、関数 bar()は実行されません。これは、関数 bar() が、 field1の初期化されたスクリプト内からのみ使用できるためです。

Page 79: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

FormCalcおよび JavaScriptによるスクリプティング

73

6.6.4. スコープとスクリプトオブジェクト

スクリプトオブジェクトにはグローバルスコープがあるので、すべてのユーザーがどこからでもアクセスできます。 field1.initialize および field2.click の両方からアクセスするメソッドは、スクリプトオブジェクトに配置します。厳密なスコープでは、 bar() をフォーム内のどこからも呼び出ません。また、関数 bar() を解決できなかったことを示す実行時エラーが表示されます。スクリプトエンジンでは、ユーザーがアクセスできるスコープ内で bar() を探しましたが、見つかりませんでした。

6.6.5. スコープと対象バージョン

厳密なスコープを使用すると、Acrobat または Adobe Reader 8.1 以降を対象としたフォームではパフォーマンスが向上します。Acrobat または Adobe Reader の以前のバージョンを対象としたフォームでは厳密なスコープを使用しないでください。使用すると、フォーム内のスクリプトが予期しない動作をすることがあります。既存のフォームの場合は、厳密なスコープを有効にする前にフォームをバックアップして、常にスクリプトを後で確認してください。厳密なスコープを有効にした後で、対象バージョンを Acrobatまたは Adobe Reader 8.1 より前のバージョンに変更すると、警告メッセージが表示されます。

6.6.6. いつスコープを使用するか

フォームが Acrobat または Adobe Reader 8.1 を対象にしていて、厳密なスコープが有効である場合は、各スクリプトが実行された後で、宣言されている JavaScript 変数が解放されます。フォームが Acrobat または Adobe Reader 9.0 以降を対象としている場合は、厳密なスコープによりすべての JavaScript 変数が解放されるとは限りません。新しいデータの再結合または読み込みを行う場合は例外です。

厳密なスコープによるパフォーマンスの向上は、Acrobat または Adobe Reader 8.1 以降向けのフォームに適用されます。Acrobat または Adobe Reader 8 より前のバージョン向けのフォームでは、厳密なスコープを適用しないでください。使用すると、スクリプトが予期せぬ動作をしたり、動作しない場合があります。

6.6.7. 厳密なスコープを有効にするには

1) ファイル/フォームのプロパティを選択し、「実行時」タブをクリックします。

2) オプションが使用可能な場合は、「JavaScript で厳密なスコープ規則を強制」を選択し、「OK」をクリックします。

注:「実行時」タブで、厳密なスコープ規則を強制するオプションが使用できない場合は、厳密なスコープが既に有効になっています。

関連するリンク:JavaScript の使用

JavaScript スクリプトをオブジェクトに追加するには

Page 80: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

FormCalcおよび JavaScriptによるスクリプティング 6

74

6.7. JavaScript スクリプトをオブジェクトに追加するには

JavaScript スクリプトは、スクリプトオブジェクトなど演算とスクリプトを使用できるすべてのフォームデザインオブジェクトに追加できます。

1) Designer ワークスペース上のスクリプトエディターが複数行モードで動作していることを確認します。

2) フォーム上のフィールドを 1 つ選択します。ここでは例として、フォームデザインに新規テキストフィールドを追加するとします。

3) 「イベント」リストから有効なイベントを選択します。例えば、新規テキストフィールドに対してdocReady イベントを選択します。

4) 「実行位置」リストで、スクリプトを実行させる位置を選択します。ここでは、作成したテキストフィールドに対して、Client を選択します。

5) 関数アイコン をクリックします。または、F10 キーを押し、JavaScript 関数リストを表示します。

6) 目的の関数を選択し、Enter キーを押します。

7) 関数のデフォルトの構文表記を、独自の値セットで置き換えます。または、スクリプトエディターのスクリプト編集フィールドに手動でスクリプトを作成できます。例えば、作成したテキストフィールドに、次の JavaScript をスクリプト編集フィールドに入力します。

this.border.fill.color.value = "255,0,0";

8) フォームをテストするには、「PDF プレビュー」タブをクリックします。「PDF プレビュー」タブでフォームをプレビューすると、この新しいボタンオブジェクトのテキストが赤で表示されます。

関連するリンク:JavaScript の使用

Page 81: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

変数

75

7. 変数

Designer では、フォーム変数を定義することで、一元的にアクセスできる場所に特定の情報を格納して集中管理できます。 変数 は通常、将来変更する可能性のあるテキストのプレースホルダーとして使用されます。Designer のフォーム変数は、常に、「文字列」型です。例えば、メッセージボックスのタイトルになるテキストを保存できます。テキストを変更する必要が生じた場合は、関連するフォームまたはテンプレートを一旦開き、該当する変数定義によって内容が変化するテキストを更新します。これにより Designer は、その変数が使用されているすべての箇所に新しいテキストを自動的に反映します。

フォーム変数はスクリプトエディターの外で定義され、同じフォーム上にあるすべてのオブジェクトに設定されたスクリプトからアクセスできます。この点は、特定の FormCalc または JavaScript スクリプト内で作成されるスクリプト変数と異なります。

スクリプトを使用せずに、変数の作成、表示および削除が可能です。しかし、変数が保存している値にアクセスして変更を加えたり、フォームのオブジェクトに値を適用するには、スクリプトが必要です。

注:フォームの変数値は、フォームを開くたびにリセットされます。

変数を作成する場合には、まず変数の名前と、そこに入れたいテキストを決定します。変数の定義はフォームまたはテンプレートの中に保存されます。

7.1. 変数名の設定

実行時、変数の名前が XML フォームオブジェクトモデルのプロパティ、メソッドまたはフォームデザインのフィールド名として使用される名前と一致する場合に、名前の競合が発生します。名前が競合すると、スクリプトが予期せぬ値を返すことがあるので、各変数には一意の名前を割り当てるようにしてください。以下に 2 つの例を示します。

• fieldWidth および fieldHeight という変数名を、 x および yという変数名の代わりに使用します。

• clientName というフォームデザインオブジェクト名を、 nameという名前の代わりに使用します。

注:変数名では大文字と小文字が区別され、スペースは使用できません。

7.2. テキスト変数を定義するには

1) ファイル/フォームのプロパティを選択します。

2) 「変数」タブで、「新規」(挿入) をクリックします。

3) 「変数」リストから、変数に一意の名前を入力し、Enter キーを押します。変数名では大文字と小文字が区別され、スペースは使用できません。

Page 82: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

変数 7

76

4) 右のボックスをクリックし、変数に入れたいテキストを入力します。

階層パレットのフォームレベルに変数が表示されます。

A.新規フォームの変数

7.3. テキスト変数を定義するには

1) 編集/フォームのプロパティを選択します。

2) 「変数」タブで、「新規」(挿入) をクリックします。

3) 「変数」リストから、変数に一意の名前を入力し、Enter キーを押します。変数名では大文字と小文字が区別され、スペースは使用できません。

4) 右のボックスをクリックし、変数に入れたいテキストを入力します。

階層パレットのフォームレベルに変数が表示されます。

A.新規フォームの変数

Page 83: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

変数

77

7.4. テキスト変数の定義を表示するには

1) ファイル/フォームのプロパティを選択します。

2) 「変数」タブをクリックし、変数リストから目的の変数を選択します。右のボックスに、その変数に関連付けられたテキストが表示されます。

7.5. テキスト変数の定義を表示するには

1) 編集/フォームのプロパティを選択します。

2) 「変数」タブをクリックし、変数リストから目的の変数を選択します。右のボックスに、その変数に関連付けられたテキストが表示されます。

7.6. テキスト変数を削除するには

1) ファイル/フォームのプロパティを選択します。

2) 「変数」タブで変数を選択し、「削除」(削除) をクリックします。

7.7. テキスト変数を削除するには

1) 編集/フォームのプロパティを選択します。

2) 「変数」タブで変数を選択し、「削除」(削除) をクリックします。

Page 84: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

変数 7

78

7.8. 演算とスクリプトでの変数の使用

フォームの変数を作成すると、あとは変数名を演算やスクリプトで参照すれば、変数の値を取得できます。

重要:変数名を決める際には、XML フォームオブジェクトモデルのプロパティ、メソッドまたはオブジェクトと同じ名前は使用しないでください。

XML フォームオブジェクトモデルのプロパティ、メソッド、オブジェクトについて詳しくは、 「スクリプティングリファレンス」を参照してください。

例えば、フォーム内で以下の変数を定義します。

FormCalc ではフィールドやオブジェクトの値と同様に変数の値を参照できます。この例では、変数の値を次のように 3 つのフィールドに代入します。

TextField1 = firstName TextField2 = lastName NumericField1 = age

また、次の例のように FormCalc 関数でも同様に変数を使用できます。

Concat( "Dear ", firstName, lastName )

JavaScript では、変数の値の参照に .value プロパティを、フィールドやオブジェクトの値に使用する.rawValue プロパティに代わって使用します。次に例を示します。

TextField1.rawValue = firstName.value;

注:XFA フォームのスクリプティングでフォーム変数を使用または変更すると、Acrobat および AdobeReader では、署名の検証ステータスに関するドキュメントメッセージバーが表示されます。このメッセージでは、その後ドキュメントに加えられた変更が原因で、署名の有効性が不明であることが警告されます。

変数名 値

firstName Tony

lastName Blue

age 32

Page 85: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

演算とスクリプトでのオブジェクトの参照

79

8. 演算とスクリプトでのオブジェクトの参照

FormCalc の演算および JavaScript のスクリプトには、コードの構造化ルールが設定されています。両ルールは共に同じ参照構文に基づき、フォームオブジェクトのプロパティと値にアクセスします。XML フォームオブジェクトモデルは構造化手段を備え、それぞれのオブジェクト、プロパティおよびメソッドをピリオド(.)文字で区切る複合的な命名規約を使用し、オブジェクトのプロパティと値にアクセスします。

一般に参照の構文は、いずれも次のようなセクションに分かれた同様の構造を持っています。

• フォーム階層構造における親オブジェクトの名前。参照先となるフィールドやオブジェクトの場所を特定するために使用されます。階層パレットとデータ表示パレットを使用すると、フォームおよび関連データ内にある他のオブジェクトを基準とした、オブジェクトの場所が決まります。

• 参照するオブジェクトの名前。

• アクセス対象のプロパティやメソッドの名前。場合によっては、構造内において目的のプロパティやメソッドの前に存在するが階層パレット上にはオブジェクトとして表示されない XML フォームオブジェクトモデルのオブジェクトもこのセクションに含まれることがあります。

例えば、フォームデザインにあるテキストフィールドの値にアクセスする場合の参照構文を次の図に示します。ここでは、デフォルトのオブジェクト命名規約を使用しています。

A.フォーム階層オブジェクト

B.オブジェクト名

C.プロパティ名またはメソッド名

注:デフォルトでは、新しいフォームの最初のページを表すサブフォームオブジェクトの名称は未設定です。上の参照構文では、名称未設定のサブフォームを #subformで表しています。

それぞれの状況に応じて、参照構文表記の構造は少しずつ異なります。例えば、完全修飾参照構文はどのような状況にも対応します。一方、短縮参照構文や参照構文のショートカットを使用して、構文の長さを短くできる場合もあります。

Page 86: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

演算とスクリプトでのオブジェクトの参照 8

80

8.1. オブジェクトのプロパティおよび値の参照

オブジェクトのプロパティと値へのアクセスや変更に使用する参照構文は、次のいずれかの形式になります。

完全修飾

xfa ルートノードで始まるオブジェクトの完全な階層が参照構文に含まれます。完全修飾構文は、参照構文を含む演算やスクリプトの場所に関係なく、オブジェクトのプロパティや値に正しくアクセスできます。

短縮

参照構文およびオブジェクトの構文参照を含む演算やスクリプトから相対的な位置を示すか、ショートカットを使用しているので、参照構文が短縮されています。一般に、短縮参照構文の方が作成時間は短くなりますが、オブジェクトが互いを基準にして同じ場所に配置される場合以外は機能しないという欠点があります。

例えば、以下の図は発注書のサンプルフォームの階層を示しています。

Page 87: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

演算とスクリプトでのオブジェクトの参照

81

次の図は、 txtCondition フィールドの値にアクセスするための完全修飾参照構文を示しています。この構文は、FormCalc および JavaScript で使用できます。 フォームにあるオブジェクトの演算やスクリプトの中で、この参照構文を使用することも可能です。

A.ルートノード

B.モデル

C.フォームデザインのルートノード

D.ページオブジェクト

E.サブフォーム名

F.オブジェクト名

G.プロパティ名またはメソッド名

注:FormCalc および JavaScript に対して参照構文が共通であるとしても、それぞれのスクリプト言語の変換については確認が必要です。例えば、上の例の参照構文は FormCalc 用として動作します。しかし、JavaScript の場合は、末尾にセミコロン(;)を付ける必要があります。

サブフォームなど、同一コンテナに 2 つのオブジェクトが存在する場合、同じコンテキストを共有するものとして参照されます。同じコンテキストに複数のオブジェクトが存在する場合、オブジェクト名にアクセス対象のプロパティやメソッドを追記しただけの短縮参照構文を使用できます。例えば、上述の例を使用すると、次の短縮参照構文は txtCondition フィールドの値に、「 合計 」サブフォームの任意のフィールドからアクセスできます。

txtCondition.rawValue

2 つのオブジェクトが異なるコンテナに存在する場合、同じコンテキストは共有されません。この場合も短縮参照構文を使用できますが、2 つのオブジェクトに共通しない、最上位レベルのコンテナオブジェクトの名前から構文を開始します。例えば、上述の階層を使用すると、次の短縮参照構文はaddress フィールドの値に txtCondition フィールドからアクセスできます。

header.address.rawValue

Page 88: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

演算とスクリプトでのオブジェクトの参照 8

82

XML フォームオブジェクトモデルの構造化手段によって、オブジェクトのプロパティとメソッドがフォームにあるオブジェクトの子オブジェクトに存在する場合があります。こうした子オブジェクトは、XML フォームオブジェクトモデルのみに含まれ、階層パレットとデータ表示パレットには表示されません。子オブジェクトのプロパティとメソッドにアクセスするには、参照構文に子オブジェクトを含める必要があります。例えば、次の参照構文は txtCondition フィールドにツールヒントテキストを設定しています。

txtCondition.assist.toolTip.value = "Conditions of purchase." // FormCalc txtCondition.assist.toolTip.value = "Conditions of purchase."; // JavaScript

XML フォームオブジェクトモデルのオブジェクト、およびそれらの構造について詳しくは、「 スクリプティングリファレンス」を参照してください。

関連するリンク:演算とスクリプトでのオブジェクトの参照

名称未設定オブジェクトと繰り返しオブジェクトの参照

現在のオブジェクトの参照

FormCalc 参照構文のショートカット

8.2. 名称未設定オブジェクトと繰り返しオブジェクトの参照

Designer は、名称未設定オブジェクトおよび同じ名前を持つ複数のオブジェクトを作成する機能をサポートします。また、番号記号(#)表記および角括弧([ ])表記によるオブジェクトのオカレンス値を使用して、名称未設定オブジェクトのプロパティと値のアクセスおよび変更を行う演算とスクリプトを作成できます。FormCalc では、番号記号(#)文字と角括弧([ ])文字が正しく解釈されますが、JavaScriptではこれができません。JavaScript の使用中に番号記号(##)や角括弧([ ])が出現する場合、テキストフィールドの値にアクセスするには、完全修飾参照構文または短縮参照構文と共に resolveNode メソッドを使用する必要があります。

例えば、空白フォームを新しく作成する場合、デフォルトでは、フォームのページを表すサブフォームの名前は、オカレンス値が 0 の名称未設定サブフォームになります。次の図は、デフォルトのオブジェクト名称設定で作られた新規フォームのフォーム階層を示しています。

Page 89: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

演算とスクリプトでのオブジェクトの参照

83

フォームの先頭ページを表す名称未設定のサブフォームには、オカレンス値 0 が設定されます。この場合、次の参照構文は共に、上述の新規フォーム(デフォルトの命名規則を使用)のフォーム階層にあるテキストフィールドの値にアクセスできます。

xfa.form.form1.#subform.TextField1.rawValue xfa.form.form1.#subform[0].TextField1.rawValue

注:デフォルトでは、オブジェクトのオカレンス値を指定しない場合、参照構文はオブジェクトの最初のオカレンスにアクセスします。

FormCalc は上述の完全修飾参照構文を認識し、直接処理します。JavaScript を使用して同じ値にアクセスするには、以下の resolveNode スクリプティングメソッドの形式のうちいずれかを使用する必要があります。

xfa.resolveNode("xfa.form.form1.#subform.TextField1").rawValue; xfa.resolveNode("xfa.form.form1.#subform[0].TextField1").rawValue;

例えば、フォームに新しいページを追加する場合、デフォルトでは、新しいページを表すサブフォームの名前が未設定となります。なお、新規サブフォームのオカレンス値は 1 に設定されます。上述と同様の参照構文を使用し、新しい名称未設定のサブフォームを指定できます。

xfa.form.form1.#subform[1].TextField1.rawValue // FormCalc xfa.resolveNode("xfa.form.form1.#subform[1].TextField1").rawValue; // JavaScript

注:スクリプトエディターで使用できるステートメント完了オプションには、リストの先頭に名称未設定オブジェクトが表示されます。複数のオカレンス値を持つオブジェクトはリストに 1 回だけ表示されます。これはオブジェクトの最初のオカレンスです。最初のオカレンス以外のオカレンス値にアクセスする場合は、参照構文にオカレンス値を手動で追加する必要があります。

resolveNode メソッドを使用して、別の参照構文ステートメント内にあるオブジェクトを参照できます。この方法を使用すると、少ないスクリプトで特定のオブジェクト、プロパティまたはメソッドを参照できるようになります。例えば、フォームの 2 ページ目にあるテキストフィールドを指す参照構文を次のステートメントのように単純化できます。

xfa.form.form1.resolveNode("#subform[1].TextField1").rawValue; // JavaScript

resolveNode メソッドの詳細については、「 resolveNode」を参照してください。

関連するリンク:演算とスクリプトでのオブジェクトの参照

オブジェクトのプロパティおよび値の参照

現在のオブジェクトの参照

FormCalc 参照構文のショートカット

Page 90: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

演算とスクリプトでのオブジェクトの参照 8

84

8.3. 現在のオブジェクトの参照

オブジェクト本体に追加した演算やスクリプトを使用して、現在のオブジェクトのプロパティまたは値を変更する場合、参考構文を短くするために独特なショートカットが FormCalc と JavaScript で使用されます。FormCalc は番号記号($)文字を使用して現在のオブジェクトを表し、JavaScript はキーワード thisを使用します。

例えば、次の参照構文は現在のオブジェクトの値を返します。

$ // FormCalc this.rawValue // JavaScript

同様に、演算とスクリプトでオブジェクトプロパティにアクセスする場合、ドル記号($)ショートカットおよびキーワード this を使用して、現在のオブジェクトの名前を置き換えることができます。例えば、次の参照構文では現在のオブジェクトに関連付けられたツールヒントテキストが変更されます。

$.assist.toolTip.value = "This is some tool tip text." // FormCalc this.assist.toolTip.value = "This is some tool tip text."; // JavaScript

関連するリンク:演算とスクリプトでのオブジェクトの参照

オブジェクトのプロパティおよび値の参照

名称未設定オブジェクトと繰り返しオブジェクトの参照

FormCalc 参照構文のショートカット

Page 91: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

演算とスクリプトでのオブジェクトの参照

85

8.4. FormCalc 参照構文のショートカット

オブジェクトのプロパティに簡単にアクセスできるように、参照を作成する場合に煩雑さを省くためのショートカットが FormCalc に含まれています。このセクションでは、FormCalc の参照構文のショートカットを説明しています。

8.4.1. 現在のフィールドまたはオブジェクト

現在のフィールドまたはオブジェクトを参照します。

表記法

$

$ = "Tony Blue"

上の例では現在のフィールドまたはオブジェクトの値を Tony Blueに設定します。

8.4.2. データモデル xfa.datasets.data のルート

データモデル xfa.datasets.dataのルートを表します。

表記法

$data

$data.purchaseOrder.total

は、以下と等価です。

xfa.datasets.data.purchaseOrder.total

8.4.3. フォームオブジェクトのイベント

現在のフォームオブジェクトのイベントを表します。

表記法

$event

Page 92: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

演算とスクリプトでのオブジェクトの参照 8

86

$event.name

は、以下と等価です。

xfa.event.name

詳しくは、「 イベントモデルの使用」を参照してください。

8.4.4. フォームモデルのルート

フォームモデル xfa.formのルートを表します。

表記法

$form

$form.purchaseOrder.tax

は、次のステートメントと等価です。

xfa.form.purchaseOrder.tax

8.4.5. ホストのオブジェクト

ホストのオブジェクトを表します。

表記法

$host

$host.messageBox("Hello world")

は、以下と等価です。

xfa.host.messageBox("Hello world")

詳しくは、「 ホストアプリケーションの使用」を参照してください。

Page 93: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

演算とスクリプトでのオブジェクトの参照

87

8.4.6. レイアウトモデルのルート

レイアウトモデルxfa.layoutのルートを表します。

表記法

$layout

$layout.ready

は、次のステートメントと等価です。

xfa.layout.ready

8.4.7. データレコードのコレクション

XML ファイルといったデータコレクション内の現在のデータを表します。

表記法

$record

$record.header.txtOrderedByCity

は、 txtOrderedByCity ノード(現在の XML データの header ノード内)を参照します。

8.4.8. テンプレートモデルのルート

テンプレートモデル xfa.template のルートを表します。

表記法

$template

$template.purchaseOrder.item

は、以下と等価です。

xfa.template.purchaseOrder.item

Page 94: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

演算とスクリプトでのオブジェクトの参照 8

88

8.4.9. xfa.datasets.data のデータモデルのルート

データモデルxfa.datasetsのルートを表します。

表記法

!

!data

は、以下と等価です。

xfa.datasets.data

8.4.10. すべてのフォームオブジェクトを選択

名前と無関係にサブフォームなどの任意のコンテナ内にあるフォームオブジェクトをすべて選択したり、類似の名前を持つオブジェクトをすべて選択したりします。

resolveNode メソッドでは、"*"(アスタリスク)構文を JavaScript と共に使用できます。

表記法

*

以下の式はフォームの item という名前を持つすべてのオブジェクトを選択します。

xfa.form.form1.item[*]

8.4.11. サブコンテナの一部のオブジェクトの検索

参照構文の任意の場所に 2 つのピリオドを入力すると、現在のコンテナオブジェクトのサブコンテナを構成するオブジェクト(サブフォームなど)を検索できます。

".."(二重ピリオド)構文は、 resolveNode メソッドでは、JavaScript と共に使用できます。

表記法

..

Page 95: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

演算とスクリプトでのオブジェクトの参照

89

Subform_Page..Subform2という式は、(通常どおりに)ノードSubform_Pageを検索し、Subform_Pageの子孫Subform2を検出することを意味します。

上記のサンプルツリーを使用すると、

Subform_Page..TextField2

は、以下と等価です。

Subform_Page.Subform1[0].Subform3.TextField2[0]

これは、TextField2[0]が、FormCalc が検索で遭遇する最初のSubform1ノードにあるからです。2 つ目の例として、

Subform_Page..Subform3[*]

は 4 つのTextField2オブジェクトをすべて返します。

8.4.12. 名称未設定オブジェクトまたはプロパティの指定

番号記号(#)表記は、参照構文で次のいずれかの項目を表します。

• 名称未設定オブジェクト

• プロパティとオブジェクトが同じ名前の場合、参照構文でプロパティを指定します。

resolveNode メソッドでは、"#"(番号記号)構文を JavaScript と共に使用できます。

表記法

#

Page 96: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

演算とスクリプトでのオブジェクトの参照 8

90

次の参照構文は名称未設定のサブフォームにアクセスします。

xfa.form.form1.#subform

サブフォームに name という名称のフィールドも含まれている場合、次の参照構文はサブフォームの nameプロパティにアクセスします。

xfa.form.form1.#subform.#name

8.4.13. オブジェクトのオカレンス値

角括弧([ ])表記はオブジェクトのオカレンス値を表します。

アラビア語、ヘブライ語、タイ語およびベトナム語に特化したフォームでは、(右から左に表記する言語であっても)参照構文が常に右側にあります。

表記法

[ ]

オカレンス値の参照を作成するには、オブジェクト名の後ろに角括弧([ ])を置き、括弧内に以下のいずれかの値を入れます。

• [ n ]のnは、0 から始まる、オカレンスの絶対インデックス番号です。オカレンス値が範囲外の場合は何も値を返しません。以下に例を示します。

xfa.form.form1.#subform.Quantity[3]

は、Quantity オブジェクトの 4 番目のオカレンスを参照します。

• [ +/- n ]の n は、参照を作成するオブジェクトのオカレンスと相対的なオカレンスを示します。正の値を指定するとオカレンス値は大きくなり、負の値を指定するとオカレンス値は小さくなります。以下に例を示します。

xfa.form.form1.#subform.Quantity[+2]

この参照では、参照を作成するコンテナのオカレンス値よりもオカレンス値が 2 だけ大きいQuantity の値が出力されます。例えば、この参照を Quantity[2] オブジェクトに追加すると、参照は以下と同じになります。

xfa.template.Quantity[4]

計算されたインデックス番号が範囲外の場合は、エラーを返します。

この構文は、特定のオブジェクトの前または次のオカレンスを検索するときに最も一般的に使用します。例えば、Quantity オブジェクトのオカレンス(1 つ目は除く)はすべて、Quantity[-1] を利用して前の Quantity オブジェクトの値を得ます。

Page 97: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

演算とスクリプトでのオブジェクトの参照

91

• [*] はオブジェクトの複数のオカレンスを示します。名前が付いた最初のオブジェクトが検出され、そのオブジェクトの兄弟で同名のオブジェクトが返されます。この表記法を使用すると、オブジェクトのコレクションが返されます。以下に例を示します。

xfa.form.form1.#subform.Quantity[*]

• この式は、参照で検出された最初のQuantityの兄弟で、Quantityという名前を持つすべてのオブジェクトを参照します。

上記のツリーを参照した場合、以下の式が返すオブジェクトはそれぞれ次のとおりです。

• Subform_Page.Subform1[*]は両方のSubform1オブジェクトを返します。

• Subform_Page.Subform1.Subform3.TextField2[*]は 2 つの TextField2オブジェクトを返します。Subform_Page.Subform1 は左側の最初の Subform1 オブジェクトに解決され、TextField2[*]はSubform3オブジェクトを基準にして評価されます。

• Subform_Page.Subform1[*].TextField1 は両方の TextField1 インスタンスを返します。Subform_Page.Subform1[*] は両方の Subform1 オブジェクトに解決され、TextField1 はSubform1オブジェクトを基準にして評価されます。

• Subform_Page.Subform1[*].Subform3.TextField2[1]は左から 2 番目と 4 番目のTextField2オブジェクトを返します。Subform_Page.Subform1[*]は両方のSubform1オブジェクトに解決され、TextField2[1]はSubform3オブジェクトを基準にして評価されます。

• Subform_Page.Subform1[*].Subform3[*]は両方のSubform3オブジェクトのインスタンスを返します。

• Subform_Page.*はSubform1オブジェクトおよびSubform2オブジェクトを返します。

• Subform_Page.Subform2.*はNumericField2オブジェクトの 2 つのインスタンスを返します。

• 「 [ ]」(角括弧)構文は、 resolveNode メソッドでは、JavaScript と共に使用できます。

関連するリンク:演算とスクリプトでのオブジェクトの参照

Page 98: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

JavaScript 関数の作成と再利用 9

92

9. JavaScript 関数の作成と再利用

スクリプトオブジェクト とは、特定のフォームオブジェクトとは別個に JavaScript の関数と値を格納できるオブジェクトです。通常はスクリプトオブジェクトを使用して、フォーム上の様々な箇所で JavaScriptスクリプトの一部として使用したい関数やメソッドを作成します。このテクニックによって、少ないスクリプトで繰り返し型のアクションを実行できるようになります。

スクリプトオブジェクトは、JavaScript で記述されたスクリプトのみに対応します。なお、スクリプトオブジェクトを呼び出すイベントのスクリプト言語が JavaScript に設定されている場合、スクリプトの実行場所に制限はありません。

Acrobat および Forms は両者ともスクリプトオブジェクト内のスクリプトを同様の方法で処理しますが、両者の処理は区別されます。

クライアント側で実行するように設定されたスクリプトオブジェクトを利用できるのはクライアント側で実行するように設定されたスクリプトのみで、逆についても同じことが言えます。

9.1. スクリプトオブジェクトを作成するには

スクリプトオブジェクトの作成は 2 部に分かれます。一方はオブジェクトのフォームデザインへの追加で、他方はスクリプトオブジェクトに保存するスクリプトの記述です。

1) 新しいフォームを作成するか、既存のフォームを開きます。

2) 階層パレットでフォームレベルのオブジェクトかサブフォームレベルのオブジェクトを右クリックし、「スクリプトオブジェクトの挿入」を選択します。

A. フォームレベルのオブジェクト B. サブフォームレベルのオブジェクト C. サブフォームレベルのスクリプトオブジェクト D.フォームレベルのスクリプトオブジェクト

3) (オプション)スクリプトオブジェクトを右クリックして「オブジェクト名の変更」を選択します。

Page 99: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

JavaScript 関数の作成と再利用

93

9.2. スクリプトをスクリプトオブジェクトに追加するには

フォームにスクリプトオブジェクトを設定すると、スクリプトエディターを使用してスクリプトを追加できるようになります。

1) 階層パレットでスクリプトオブジェクトを選択します。

スクリプトエディターはイベントリストにスクリプトオブジェクトの値を、言語リストに「JavaScript」を表示します。どちらの値も変更することはできません。

2) スクリプト編集フィールドに目的のスクリプトを入力します。

3) フォームをテストするには、「PDF プレビュー」タブをクリックします。

9.2.1. 例

例えば、次の関数を含む feedback という名称のスクリプトオブジェクトを作成します。

function emptyCheck(oField) {

if ((oField.rawValue == null) || (oField.rawValue == "")) { xfa.host.messageBox("You must input a value for this field.", "Error Message", 3); } }

9.3. スクリプトオブジェクトに保存されたJavaScript関数を参照するには

スクリプトオブジェクトにスクリプトを追加すると、JavaScript スクリプトをサポートする任意のイベントからスクリプトオブジェクトを参照できます。

1) フォームでオブジェクトを選択し、「イベント」リストからイベントを選択します。

2) スクリプトオブジェクトおよびスクリプトオブジェクト内の関数を参照します。次の汎用構文は、スクリプトオブジェクトを参照しているオブジェクトがフォームの階層内でスクリプトオブジェクトと同じレベルに存在するか、スクリプトオブジェクトがフォームの階層の最上位に存在すると想定しています。

script_object.function_name(parameter1, ...);

3) 新規スクリプトをフォームオブジェクトに適用し、「PDF プレビュー」タブでフォームをプレビューしてテストします。

Page 100: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

JavaScript 関数の作成と再利用 9

94

フォームにある他のオブジェクトを参照するのと同様に、スクリプトオブジェクトを参照する場合は、フォームの階層内の位置を示す正しい構文を使用する必要があります。スクリプト作成時のオブジェクト参照について詳しくは、「 オブジェクトのプロパティおよび値の参照」を参照してください。

9.3.1. 例

例えば、「 スクリプトをスクリプトオブジェクトに追加するには」のスクリプトオブジェクト例を使用し、次の JavaScript スクリプトをテキストフィールドの exit イベントに挿入します。「PDF プレビュー」タブでフォームをテストします。

Page 101: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

スクリプトフラグメントの使用

95

10. スクリプトフラグメントの使用

スクリプトフラグメントにはスクリプトオブジェクトが含まれます。スクリプトオブジェクトには、日付パーサーや Web サービス呼び出しなど、特定のフォームオブジェクトから独立して保存されている再使用可能な JavaScript 関数や値が収められています。通常、フォームの多くの場所で使いたいカスタム関数およびメソッドを作成するためにスクリプトオブジェクトを使います。スクリプトオブジェクトを使用することで、少ないスクリプトで繰り返し型のアクションを実行できるようになります。

スクリプトフラグメントには、階層パレットに変数の子として表示されるスクリプトオブジェクトだけが含まれます。フラグメントには、検証、計算、初期化のようなイベントスクリプトなどの、他のフォームオブジェクトに関連付けられたスクリプトを含めることはできません。

階層パレットからスクリプトフラグメントを作成します。

スクリプトフラグメントは他のフラグメントと同じように編集します。

10.1. スクリプトフラグメントのプロパティ

スクリプトフラグメントを選択すると、オブジェクトパレットの「スクリプトオブジェクト」タブにフラグメントのプロパティが表示されます。

10.1.1. ソースファイル

フラグメント参照のソースファイルを設定します。このプロパティは、選択したオブジェクトがフラグメント参照の場合にのみ表示されます。

10.1.2. フラグメント名

フラグメントの名前を設定します。フラグメント情報ボタン をクリックするとフラグメント情報を表示できます。

このプロパティは、フラグメント参照を選択するかソースファイルに定義されているフラグメントを選択すると表示されます。選択したオブジェクトがフラグメント参照の場合、ソースファイルが指定されていないと、このプロパティは表示されません。フラグメント名リストには、指定したソースファイル内のすべてのフラグメントが表示されます。「カスタム」オプションは、フラグメント参照としての SOM 式または ID 値の設定を直接サポートします。また、XML フォームアーキテクチャでの実装をサポートします。

Page 102: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

スクリプトフラグメントの使用 10

96

10.2. スクリプトフラグメントを作成するには

複数のフォームで再利用できる一般的な関数のスクリプトフラグメントを作成できます。スクリプトフラグメントを作成するには、複数のフォームデザインで再利用する関数が含まれたスクリプトオブジェクトを作成します。スクリプトフラグメントには 1 つのスクリプトオブジェクトだけを含められます。

1) スクリプトオブジェクトを作成します。

2) 階層パレットでスクリプトオブジェクトを右クリックし、フラグメント/フラグメントを作成を選択します。

注:スクリプトオブジェクトを階層パレットからフラグメントライブラリパレットにドラッグし、スクリプトフラグメントを作成することもできます。

3) 別のフラグメント名を使用するには、「名前」ボックスにフラグメントの名前を入力します。

4) (オプション)「説明」ボックスにフラグメントの説明を入力します。

5) フラグメントを作成する方法を選択します。

• フラグメントライブラリに保存する独立した XDP ファイルにフラグメントを定義する場合は、「フラグメントライブラリに新しいフラグメントを作成」を選択します。「フラグメントライブラリ」リストで、フラグメントファイルを保存するフラグメントライブラリを選択します。別のファイル名を使用するには、「ファイル名」ボックスにフラグメントのファイル名を入力します。選択した内容を新しいフラグメントで置き換えない場合は、「選択内容を新しいフォームフラグメントへの参照と置き換える」を選択解除します。

• 現在のファイルにフラグメントを定義する場合は、「現在のドキュメントに新しいフラグメントを作成」を選択します。

6) 「OK」をクリックします。

10.3. スクリプトフラグメントを挿入するには

スクリプトフラグメントを使用して、複数のフォームで JavaScript 関数を再利用できます。フォームデザインを作成するときに、既存のスクリプトフラグメントへの参照を挿入すると、このフラグメントがフォームデザインに表示されます。

XFAF ドキュメントにはフラグメントを挿入できません。

注:フラグメントライブラリパレットでフラグメントをプレビューするには、パレットメニューで「プレビューペインを表示」を選択します。

10.3.1. フラグメントライブラリパレットからスクリプトを挿入するには

1) フラグメントライブラリで、スクリプトフラグメントを選択します。

2) フラグメントを、階層パレットのサブフォームまたは variables オブジェクトにドラッグします。

Page 103: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

スクリプトフラグメントの使用

97

10.3.2. 挿入メニューからスクリプトフラグメントを挿入するには

1) 挿入/フラグメントを選択します。

2) フラグメントを含むファイルに移動します。

3) ファイルを選択して「OK」をクリックします。フラグメントがルートサブフォームに variables オブジェクトの子として表示されます。

関連するリンク:JavaScript 関数の作成と再利用スクリプトオブジェクトを作成するには

スクリプトをスクリプトオブジェクトに追加するには

Page 104: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

演算とスクリプトのデバッグ 11

98

11. 演算とスクリプトのデバッグ

Designer には、選択したスクリプト言語に応じて演算とスクリプトをデバッグするための様々な機能と方法が用意されています。

JavaScript 言語のスクリプトをデバッグする場合は、 alert メソッドまたは messageBox メソッドを使用してデバッグのフィードバックを提供できます。この方法のデメリットの 1 つは、多数のメッセージボックスを閉じなければならない点です。別の問題として、メッセージボックスを表示すると、フォームの動作に違いが生じる可能性があります。特に、フォーム上のオブジェクトにフォーカスを設定しているスクリプトをデバッグしようとすると、この問題が発生する可能性が高くなります。Acrobat の JavaScript コンソールにテキストを出力してフォームをデバッグするには、 console.println を使用する方法が最適です。

11.1. Designerのレポートパレットの警告メッセージおよび検証メッセージ

レポートパレットには、フォームのデザイン時におけるフォームのデバッグに役立つ警告メッセージと検証メッセージが表示されます。「警告」タブを使用すると、フォームのデザイン時に Designer が生成したエラーまたはメッセージを表示できます。「ログ」タブを使用すると、次のエラーおよびメッセージを表示できます。

• 検証メッセージ

• JavaScript または FormCalc のスクリプト実行エラー

• フォームの読み込みまたは保存時、あるいは「PDF プレビュー」タブからのフォームのプレビュー時に生成されるデザイン時のフォームレンダリングエラー

レポートパレットの使用について詳しくは、「 ワークスペースを使用した演算とスクリプトのデバッグ」を参照してください。

11.2. messageBoxメソッドを使用したデバッグのフィードバックの提供

XML フォームオブジェクトモデルの messageBox メソッドを使用すると、実行時にインタラクティブフォームからダイアログボックスに情報を出力できます。実行時にメッセージまたはフィールドの値を表示するには、この messageBox メソッドを利用できます。 messageBox メソッドを開始すると、クライアントアプリケーションの新しいダイアログボックスに文字列値が表示されます。この文字列値には、デバッグ用に作成するテキストメッセージまたはフィールドや式の文字列値を指定できます。

例えば、1 つの数値フィールド(NumericField1)とボタン(Button1)を含むシンプルなフォームデザインを使用するシナリオについて考えてみましょう。この場合、次の FormCalc の計算と JavaScript のスクリプトは、テキストと数値フィールドに現在表示されている値をメッセージとして出力します。ボタンオブジェクトの click イベントに演算またはスクリプトを追加することにより、ボタンをクリックして、新しいダイアログボックスに数値フィールドの値をインタラクティブに表示できます。

Page 105: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

演算とスクリプトのデバッグ

99

11.3. FormCalc

xfa.host.messageBox(Concat("The value of NumericField1 is: ", NumericField1), "Debugging", 3)

11.4. JavaScript

xfa.host.messageBox("The value of NumericField1 is: " + NumericField1.rawValue, "Debugging", 3);

重要:messageBox メソッドは、フォームの入力者がメッセージボックスのダイアログで選択するボタンを表す整数値を返します。 messageBox メソッドを、フィールドオブジェクトの calculate イベントに追加し、 messagebox メソッドがスクリプトの最終行である場合、実行時には messageBoxメソッドの戻り値がフィールドに表示されます。

messageBoxの使用方法について詳しくは、「 messageBox」を参照してください。

11.5. テキストフィールドへの情報の出力

フィールドの値やメッセージなどの情報をフォームデザイン上のテキストフィールドに出力できます。例えば、テキストフィールドの値に新しいメッセージや値を追加して、以降の参照用のログを作成できます。

11.6. JavaScript のデバッグ

JavaScript 言語をスクリプトに使用すると、 console.println("string") 関数を使用して AcrobatProfessional の JavaScript コンソールに情報を出力できます。また、Acrobat JavaScript オブジェクトモデルの alert メソッドを使用して、JavaScript のデバッグを行うことができます。

11.6.1. Acrobat Professional の JavaScript デバッガー

Acrobat Professional の JavaScript デバッガーを使用すると、JavaScript スクリプトをテストできます。このデバッガーには、「PDF プレビュー」タブの JavaScript コードの一部をテストできる JavaScript コンソールが含まれています。JavaScript コンソールには、JavaScript コードの一部をテストし、オブジェクトのプロパティとメソッドを確認するためのインタラクティブかつ便利なインターフェイスが用意されています。インタラクティブな特性を持つ JavaScript コンソールは、コードの 1 行またはコードのブロックの実行をサポートするエディターとして動作します。

Designer で JavaScript デバッガーを有効にして、JavaScript コンソールからコードを実行するには、JavaScript と JavaScript デバッガーを Acrobat Professional で有効にします。

Page 106: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

演算とスクリプトのデバッグ 11

100

注:Acrobat Reader DC Extensions がインストールされている場合は、JavaScript デバッガーを AdobeReader で有効にすることができます。JavaScript デバッガーを Adobe Reader で有効にするには、debugger.js ファイルを入手して、Microsoft Windows のレジストリを編集する必要があります。AdobeReader での JavaScript デバッガーの有効化について詳しくは、『 Developing Acrobat Applications UsingJavaScript 』(英語のみ)を参照してください。

11.6.2. Designer で JavaScript デバッガーを有効にするには

1) Designer を起動します。

2) Acrobat Professional を起動します。

3) Acrobat Professional で、編集/環境設定を選択します。

4) 左側のリストから「JavaScript」を選択します。

5) まだ選択されていない場合は、「Acrobat JavaScript を使用」を選択します。

6) 「JavaScript デバッガー」の下にある「Acrobat を再起動した後で JavaScript デバッガーを使用」を選択します。

7) 「インタラクティブコンソールを有効にする」を選択します。このオプションを使用すると、JavaScriptコンソールで記述するコードを評価できます。

8) 「エラーとメッセージをコンソールに表示」を選択します。このオプションを使用すると、ミスをしたときに役立つ情報が JavaScript コンソールに表示されます。

9) 「OK」をクリックして環境設定ダイアログボックスを閉じます。

10) Acrobat Professional を終了します。

11) Designer で、「PDF プレビュー」タブをクリックします。

12) Ctrl + J キーを押して JavaScript デバッガーを開きます。

11.6.3. JavaScript デバッガーが Designer に表示されない状態を回避するには

Acrobat の JavaScript デバッガーがアクティブな状態で、Designer インターフェイスのコンポーネントをクリックするとデバッガーが表示されなくなる場合は、Microsoft Windows のタスクマネージャーでAcrobat.exe プロセスを停止します。Acrobat を閉じた後も Acrobat.exe プロセスは引き続き実行されるので、Acrobat を再起動する場合に起動時間が短くなります。プロセスを停止すると、JavaScript デバッガーとAcrobat Professional セッションの間の関連付けが終了するので、JavaScript デバッガーを Designer で使用できます。

1) Windows のタスクマネージャーで、「プロセス」タブをクリックします。

2) 「イメージ名」列で「Acrobat.exe」を右クリックし、「プロセスの終了」を選択します。

11.6.4. JavaScript コンソールを使用したコードの評価

Acrobat の JavaScript コンソールを使用して 1 つまたは複数のコード行を評価する方法は 3 とおりあります。

Page 107: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

演算とスクリプトのデバッグ

101

11.6.5. コード行の一部を評価するには

1) コンソールウィンドウでコードの一部をハイライト表示し、数値キーパッドの Enter キーまたは通常のキーボードの Ctrl+Enter キーを押します。

11.6.6. 1 行のコードを評価するには

1) コンソールウィンドウで適切な行にカーソルを置き、数値キーパッドの Enter キーまたは通常のキーボードの Ctrl+Enter キーを押します。

11.6.7. 複数行のコードを評価するには

1) コンソールウィンドウで対象の行をハイライト表示し、数値キーパッドの Enter キーまたは通常のキーボードの Ctrl+Enter キーを押します。

11.6.8. JavaScript コンソールに表示されるコンテンツを削除するには

1) コンソールウィンドウの「消去」をクリックします。

最近評価された JavaScript スクリプトの結果は、コンソールウィンドウに表示されます。

各 JavaScript スクリプトの評価後、コンソールウィンドウからはステートメントの戻り値であるundefinedが出力されます。ステートメントの結果は、ステートメント内の式の値とは異なります。戻り値 undefined が意味するのは、スクリプトの値が未定義であるということではなく、JavaScriptステートメントの戻り値が未定義であるということです。

11.6.9. JavaScript コンソールへのデバッグのフィードバックの提供

JavaScript を使用してスクリプトを作成する場合は、実行時に Acrobat の JavaScript コンソールにメッセージを出力できます。そのためには、Acrobat から JavaScript オブジェクトモデルに含まれるconsole.println メソッドを使用します。 console.println メソッドを開始すると、JavaScript コンソールに文字列値が表示されます。この文字列値には、デバッグ用に作成するテキストメッセージまたはフィールドや式の文字列値を指定できます。

例えば、1 つの数値フィールド(NumericField1)とボタン(Button1)を含むシンプルなフォームデザインについて考えてみましょう。この場合、次の JavaScript スクリプトは、テキストと数値フィールドに現在表示されている値をメッセージとして出力します。ボタンオブジェクトの click イベントに演算またはスクリプトを追加することにより、ボタンをクリックして、新しいダイアログボックスに数値フィールドの値をインタラクティブに表示できます。

console.println("The value is: " + NumericField1.rawValue);

console.println メソッドおよび Acrobat の JavaScript オブジェクトモデルについて詳しくは、『 Developing Acrobat Applications Using JavaScript 』(英語のみ)を参照してください。

JavaScript コンソールおよび JavaScript デバッガーについて詳しくは、『 Developing Acrobat ApplicationsUsing JavaScript』(英語のみ)を参照してください。

Page 108: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

演算とスクリプトのデバッグ 11

102

11.6.10. alert メソッドを使用したデバッグのフィードバックの提供

calculate イベントでメッセージボックスを返す場合は、Acrobat の JavaScript オブジェクトモデルのalert メソッドを利用できます。例えば、次のスクリプトはテキストフィールドの値を返します。

var oField = xfa.resolveNode("TextField1").rawValue; app.alert(oField);

alert メソッドおよび Acrobat の JavaScript オブジェクトモデルについて詳しくは、『 DevelopingAcrobat Applications Using JavaScript 』(英語のみ)を参照してください。

関連するリンク:ワークスペースを使用した演算とスクリプトのデバッグ

11.7. デバッグのヒント

演算とスクリプトをデバッグするときは、次のヒントを参考にしてください。

11.7.1. サンプルデータ

フォームのプロパティダイアログボックスでプレビューデータファイルを指定します。プレビューデータファイルを指定すると、最終的な PDF にデータが保存されません。

11.7.2. マスターページ

マスターページをデバッグするには、マスターページごとに異なるオブジェクトを設定して、どのマスターページが指定されているのかを判断します。

11.7.3. フォーム内の先頭ページ

Designer では、ルートサブフォームを調べてフォームの先頭ページを特定します。ルートサブフォームで先頭ページが特定されない場合、デフォルトでは最初のマスターページが使用されます。

11.7.4. 差分デバッグ

フォームデザインをデバッグする場合は、最初に、問題が再現されなくなるまでフォームの各部分を削除していきます。すべてのスクリプトおよびオブジェクトのプロパティを確認した後で、問題の原因を隔離してください。サブフォームをデバッグする場合は、サブフォームを囲む色付きの太い境界線を指定するか、塗りつぶしを使用できます。色や塗りつぶしは、使用されるサブフォームとその範囲の指定に役立ちます。通常、この方法はオブジェクトの範囲を特定する場合に適しています。また、この方法では、特定の位置にオブジェクトが配置されている理由を示すことができます。

Page 109: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

演算とスクリプトのデバッグ

103

11.7.5. 階層ビュー

フォームデザインは、階層ビューを使用して表示するとわかりやすくなります。階層内でのオブジェクトの順序は、ページ上にオブジェクトが配置されている順序を示します。オブジェクトが他のオブジェクトの下に配置されている場合は、そのオブジェクトをクリックできません。

11.7.6. スクリプトエラーメッセージ

Designer では、フォームをプレビューすると、レポートパレットの「ログ」タブにスクリプトエラーメッセージが表示されます。フォームデザインに FormCalc のスクリプトが含まれていて、サーバーでエラーが発生した場合は、「ログ」タブに警告が表示されます。クライアントで FormCalc のスクリプトエラーが発生した場合は、Adobe Reader または Acrobat にメッセージが表示されます。

FormCalc のスクリプトエラーは、スクリプト全体が実行されるのを防ぎます。

JavaScript のエラーは、スクリプトがエラーに到達するまで実行されます。

11.7.7. FormCalc の構文エラー

FormCalc の構文エラーは解決が困難な場合があります。「%2 行、%3 列のトークン '%1' 近くの構文エラーです。」が表示された場合、通常 %1 にはエラーに最も近いトークン(単語)が挿入されます。したがって、そのトークンは適切である可能性が高く、エラーに近いというだけでエラーには関係ありません。例えば、次のスクリプトでは、7008 エラー「x 行、y 列のトークン 'then' 近くの構文エラーです。」が生成されます。

var b = abc(1) if (b ne 1) then //comment

問題は、 endif トークンがスクリプトに見つからない点です。最後の正しいトークンは then です(コメントはトークンと見なされません)。スクリプトの末尾に endif ステートメントを追加すると、問題が修正されます。

11.7.8. スクリプトオブジェクトで定義される関数

JavaScript スクリプトでスクリプトオブジェクトに定義される関数のみ呼び出すことができます。スクリプトエディターで、スクリプト言語を JavaScript に変更してください。スクリプト言語を変更しないと、Designer でスクリプトオブジェクトを解決できないことを示すメッセージが表示される場合があります。スクリプトオブジェクトで構文の問題が発生した場合にも、同じエラーが発生する可能性があります。

11.7.9. Web サービスの呼び出し

Web サービスの呼び出しを作成する場合は、postExecute イベントを使用して、返された内容および Webサービスからエラーメッセージが発行されたかどうかを確認します。

Page 110: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

演算とスクリプトのデバッグ 11

104

11.7.10. 長い SOM 式

長いマルチレイヤーの SOM 式を入力するときは、Ctrl キーを押してキャンバス上のオブジェクトをクリックします。このコマンドにより、オブジェクトの SOM 式がスクリプトに挿入されます。SOM 式はスクリプトをホストするオブジェクトに対して相対的になります。絶対的な SOM を挿入するには、Ctrl + Shiftキーを押してオブジェクトをクリックします。これらのコマンドは、階層ビューではなくデザインビューでオブジェクトをクリックするときに有効です。

11.7.11. SOM 式のテスト

長い SOM 式が失敗した場合は、式のルートに戻って、問題に到達するまで各ドットおよび className をテストします。例えば、ルートから始めて a.b.c.d をテストします。

• console.println(a.className)

• console.println(a.b.className)

• console.println(a.b.c.className)

• console.println(a.b.c.d.className)

11.7.12. スクリプトオブジェクトを使用したフォームデザインのデバッグ

フラグメントなどのスクリプトオブジェクトを使用すると、フォームデザインのデバッグに役立ちます。

• ノードの下のノード階層をダンプアウトします。

• ノードのプロパティまたは属性の値を出力します。

• ノードにプロパティまたは属性が指定されているかどうかを出力します。

• ノードの SOM 式を出力します。

• 特定のノードの xml srcをダンプアウトします。

いくつかのデバッグ関数を含むスクリプトオブジェクトの例を次に示します。

<script contentType="application/x-javascript" name="XFADEBUG"> //This script object provides several tracing functions to help debug a form design //Dump out node hierarchy to console.println() function printNode(node) {... } //Dump out SOM expression to console.println() function printSOM(node) {... } //Dump out property or attribute value function printValue(node, attrOrPropertyName) {...} function printXMLSource(node) { ....} function printHasPropertySpecified(node, prop) {...}\\ </script>

Page 111: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

演算とスクリプトのデバッグ

105

11.7.13. フォームの構築時に回避すべき点

• xfa.layout.relayout(). を docReady イベン トで呼び出すと、レイアウトの準備が完了するたびに docReady イベントがトリガーされるので問題が発生します。

• 固定コンテナ内にフローコンテナを配置すると、改ページ、重なり合うオブジェクトおよび繰り返されるサブフォームに問題が発生します。ルートサブフォームはフローコンテナです。これを利用して、レイアウトの完了後にページのサブフォームに含めるを解除し、ルートサブフォーム内にフローコンテナを配置します。別の方法として、ページのサブフォームのフローを「フロー」に設定します。

• 空白ページの問題(Acrobat 7.1 以前)。デザイン時に、サブフォームがコンテンツ領域の境界内に収まらない場合は、空白のページが表示されます。空白のページの問題を修正するには、サブフォームのサイズを変更するか、改ページを許可します。ユーザーが Acrobat 7.1 以前を使用している場合は、2 番目のレベルのサブフォームが別のページに表示されます。

Page 112: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

ホストアプリケーションの使用 12

106

12. ホストアプリケーションの使用

ホストアプリケーションとは、所定の時期にフォームが存在するアプリケーションです。

例えば、Forms を使用し、HTML 形式でフォームをレンダリングする場合、レンダリング前の処理時のホストアプリケーションは Forms になります。

レンダリングの後、Acrobat、Adobe Reader、HTML ブラウザーなどのクライアントアプリケーションでフォームを表示すると、このクライアントアプリケーションがホストアプリケーションになります。

Designer には、ホストアプリケーションに直結するスクリプティングプロパティとスクリプティングメソッドを備えたスクリプトモデルが含まれています。例えば、ホストスクリプトモデルのプロパティとメソッドを使用して Acrobat または Adobe Reader で PDF ページの表示切り替えアクションを実行したり、importData メソッドを使用してデータをフォームに読み込んだりできます。

FormCalc および JavaScript に次の構文を使用すると、フォームデザインオブジェクトに有効なスクリプティングイベントでホストスクリプトモデル構文を参照できます。

xfa.host.property_or_method

12.1. ホストスクリプトモデルのプロパティおよびメソッド

ホストスクリプトモデルのプロパティおよびメソッドを使用すれば、演算やスクリプトでは通常アクセスできない情報を取得し、アクションを実行できるようになります。例えば、ホストアプリケーションの名前(Acrobat など)を取得したり、インタラクティブフォームの現在のページに進んだりできます。ホストスクリプトモデルに使用できるプロパティとメソッドを以下の表に示します。

ホストスクリプトモデルのプロパティおよびメソッドについて詳しくは、 デベロッパーセンターを参照してください。

プロパティ メソッド

appType beepcalculationsEnabled exportDatacurrentPage gotoURLlanguage importDataname messageBoxnumPages pageDownplatform pageUptitle printvalidationsEnabled resetDatavariation responseversion setFocus

Page 113: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

ホストアプリケーションの使用

107

12.2. ホストスクリプトモデル機能の比較

この表は、Designer ホストスクリプトモデルのプロパティとメソッドを示し、Acrobat の JavaScript オブジェクトモデルにある等価な表現と比較しています。

ホストスクリプトモデルのプロパティおよびメソッドについて詳しくは、 Designer ヘルプ または「 スクリプティングリファレンス」を参照してください。

ホストスクリプトモデルのプロパティおよびメソッド Acrobat における等価な JavaScript オブジェクトモデル

xfa.host.appType app.viewerType

xfa.host.beep( [ INTEGER param ] ) app.beep([ nType ])

xfa.host.currentPage doc.pageNum

xfa.host.exportData([ STRING param1 [, BOOLEAN param2 ] ])

doc.exportXFAData(cPath [, bXDP ])

xfa.host.gotoURL( STRING param1 ) doc.getURL(cURL, [ bAppend ])またはapp.launchURL(URL);

xfa.host.importData( [ STRING param ] ) doc.importXFAData(cPath)

xfa.host.language app.language

xfa.host.messageBox(STRING param1 [, STRING param2 [, INTEGER param3 [, INTEGER param4 ] ] ])

app.alert(cMsg [, nIcon [, nType [, cTitle ] ] ])

xfa.host.name なし

xfa.host.numPages doc.numPages

xfa.host.pageDown() doc.pageNum++

xfa.host.pageUp() doc.pageNum--

xfa.host.platform app.platform

xfa.host.print(BOOLEAN param1, INTEGER param2, INTEGER param3, BOOLEAN param4, BOOLEAN param5, BOOLEAN param6, BOOLEAN param7, BOOLEAN param8)

doc.print([ bUI [, nStart [, nEnd [, bSilent [, bShrinkToFit [, bPrintAsImage [, bReverse [, bAnnotations ] ] ] ] ] ] ] ])

xfa.host.resetData( [ STRING param ] ) doc.resetForm([ aFields ])

xfa.host.response( STRING param1 [, STRING param2 [, STRING param3 [, BOOLEAN param4] ] ])

app.response(cQuestion [, cTitle [, cDefault [, bPassword ] ] ])

Page 114: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

ホストアプリケーションの使用 12

108

関連するリンク:演算とスクリプトでのオブジェクトの参照

xfa.host.setFocus( STRING param ) field.setFocus()(非推奨 )

xfa.host.title doc.title

xfa.host.variation app.viewerVariation

xfa.host.version app.viewerVersion

ホストスクリプトモデルのプロパティおよびメソッド Acrobat における等価な JavaScript オブジェクトモデル

Page 115: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

イベントモデルの使用

109

13. イベントモデルの使用

イベントモデルには、オブジェクトイベントのプロパティが格納されます。このプロパティは、スクリプトエディター内の表示リストに示されているイベントの範囲外の値にアクセスしたいときに役に立ちます。

イベントモデルは、アクションの実行前、実行中、実行後にフォーム内で発生する変更を制御します。これらのアクションには、ダイナミックフォームイベント(データとフォームデザインの結合時、ただしページ編集が適用される前など)やインタラクティブフォームイベント(ユーザーによるフィールド値の更新時など)が含まれます。

13.1. イベントモデルのプロパティとメソッド

イベントオブジェクトのプロパティおよびメソッドを使用すれば、演算やスクリプトでは通常アクセスできない情報を取得し、アクションを実行できるようになります。例えば、データが長すぎること、または無効であることが原因で、フィールドにデータの一部が示されていない場合に、そのフィールドの完全な値を取得することができます。完全なフィールド値は、詳細なエラーチェックを行う必要がある場合に役に立ちます。

プロパティ メソッド

change emit

className reset

commitKey

fullText

keyDown

modifier

name

newContentType

newText

prevContentType

prevText

reenter

selEnd

selStart

Page 116: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

イベントモデルの使用 13

110

イベントスクリプトモデルのプロパティとメソッドについて詳しくは、 デベロッパーセンターを参照してください。

shift

soapFaultCode

soapFaultString

target

プロパティ メソッド

Page 117: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

AcrobatのスクリプティングからDesignerへの移行

111

14. Acrobatのスクリプティングから Designerへの移行

Designer には、最も普及している JavaScript オブジェクトを Acrobat から使用できるなど、幅広いスクリプト機能が含まれています。Acrobat のフォームを Designer に変換する場合、ほとんどの JavaScript スクリプトは変更の必要がなく、そのまま動作します。ただし、一部の JavaScript スクリプトについては、Acrobat フォームと同じように動作するように、Acrobat から手動で変換する必要があります。

Acrobat フォームのスクリプトを変換する場合、Designer スクリプティングは、次に示すいくつかの点でAcrobat と異なります。

Designer ワークスペースDesigner ワークスペースでは、スクリプトを作成することなく、フォーム上でオブジェクトのプロパティと動作を変更できます。

スクリプト言語

Designer では、JavaScript および単純な演算言語の FormCalc がサポートされています。FormCalcは、多くの便利な演算が可能な組み込み関数を含みます。この関数がなければ、膨大なスクリプトを作成することになります。

オブジェクト、プロパティおよびメソッドの参照

Designer のフォームは精緻な構造を備えています。したがって、特定のオブジェクト、プロパティまたはメソッドを参照するには、スクリプトに適した参照構文を記述する必要があります。スクリプトエディターのステートメント完了オプションを使用すると、参照構文の作成が容易になります。

Designer では、Acrobat から引き続き JavaScript オブジェクト、プロパティおよびメソッドを使用できます。ただし、Acrobat から移行した JavaScript は Designer の XML フォームオブジェクトモデルで実行できない処理のみに限定して使用することをお勧めします。例えば、Acrobat からJavaScript を使用し、添付ファイル、ブックマークおよび注釈の追加、フォームの検索やスペルチェック、レポートの作成、メタデータのアクセスと操作などを行うことができます。フィールド値の設定、フォームへの新規フィールド追加、フォームからのページ削除などのアクションについては、Acrobatの JavaScript を使用できません。

注:JavaScript スクリプトを Designer フォーム(Designer で変換した Acrobat フォームを含む)に追加する場合には、Acrobat を使用できません。Acrobat で Designer フォームを表示する場合、JavaScript ツールはすべて使用できません。

Acrobat スクリプティングを Designer に変換する方法について詳しくは、デベロッパーセンターの『 Converting Acrobat JavaScript for Use in Designer Forms 』を参照してください。

Page 118: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

AcrobatのスクリプティングからDesignerへの移行 14

112

14.1. スクリプトを含む Acrobat フォームの変換

Acrobat のフォームを Designer に変換する場合、初めにどの程度の Acrobat スクリプティングが Designerでサポートされているかと、変換サイズはどれぐらいかについて判断します。

一般に、Acrobat のスクリプトはすべて Designer における等価のスクリプトに変換することをお勧めします。Designer スクリプトでは、Designer フォームの高度に構造化された性質と、フォーム特有の便利な機能を最大限に活用して、フォームソリューションを高速かつ容易にデザインおよび導入できます。

添付ファイルやマルチメディアの追加、検索、レポートの作成、ドキュメントメタデータの取り扱いなど、フォームの環境と周辺操作の処理は、Acrobat スクリプティングでも引き続き使用する必要があります。

Acrobat スクリプティングを Designer に変換する方法について詳しくは、デベロッパーセンターの『 Converting Acrobat JavaScript for Use in Designer Forms 』を参照してください。

関連するリンク:Acrobat のスクリプティングから Designer への移行

Designer での Acrobat の JavaScript オブジェクトの使用

Designer でサポートされる Acrobat の JavaScript オブジェクト

14.2. Designer での Acrobat の JavaScript オブジェクトの使用

Designer では、Acrobat の一部の JavaScript オブジェクトに対して Acrobat スクリプト構文でスクリプトを作成することができます。それにより、これらのオブジェクトのプロパティとメソッドをフォームで使用できます。例えば、Acrobat から JavaScript コンソールにメッセージを表示するには、Designer でフォームデザインオブジェクトのイベントに次のようなスクリプトを追加します。

console.println("This message appears in the JavaScript Console.");

また、フォームを電子メールで送信したい場合には、ボタンの click イベントに次のスクリプトを追加できます。

var myDoc = event.target; myDoc.saveAs();

注:Designer では、実行時にスクリプトを正しく動作させるために、イベントのスクリプト言語がJavaScript に設定されていることを確認しておく必要があります。

また、Acrobat の JavaScript オブジェクトに対する参照を参照構文で使用することも可能です。例えば、次のスクリプトでは、署名フィールドの署名の状態を取得し、その状態に応じてアクションを実行します。

// Proceed if the current field is not signed. var oState = event.target.getField("form1[0].#subform[0].SignatureField1[0]") .signatureValidate(); // フ ィールドの署名状態を取得します。

if (oState == 0) { ... }

Page 119: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

AcrobatのスクリプティングからDesignerへの移行

113

注:この例では、完全修飾参照構文を使用してテキストを参照しています。フォームデザインオブジェクトの参照方法について詳しくは、「 オブジェクトのプロパティおよび値の参照」を参照してください。

Designer で Acrobat の JavaScript を使用する場合、次の点に注意してください。

• Designer では、 event.target を使用して Acrobat の JavaScript オブジェクト Doc にアクセスします。Acrobat では、 this オブジェクトを使用して Doc オブジェクトを参照します。しかし、Designerの this オブジェクトは、スクリプトが添付されているフォームデザインオブジェクトを参照します。

• スクリプトエディターには、Acrobat の JavaScript オブジェクトに対するステートメント完了機能はありません。『 JavaScript for Acrobat API Reference』を参照してください。

• Doc メソッド event.target.importTextData("file.txt") は、承認されているダイナミックXFA フォームではサポートされていません。

Acrobat スクリプティングを Designer に変換する方法について詳しくは、デベロッパーセンターの『 Converting Acrobat JavaScript for Use in Designer Forms 』を参照してください。

関連するリンク:Acrobat のスクリプティングから Designer への移行スクリプトを含む Acrobat フォームの変換

Designer でサポートされる Acrobat の JavaScript オブジェクト

14.3. Designer でサポートされる Acrobat の JavaScript オブジェクト

次の表は、Designer で最もよく使用される Acrobat オブジェクト、プロパティおよびメソッドを示し、Designer における等価機能に関する情報を記載しています。表には Acrobat の最も普及したオブジェクト、プロパティおよびメソッドを示しています。マルチメディアオブジェクトなどはフォームでほとんど使用されないので、これについての情報は記載していません。

Designer における等価機能が記載されていない場合、Designer 自身のプロパティやメソッドから Acrobatの動作を再生することはできません。しかし、Acrobat の機能を模したカスタム関数やスクリプトを作成することは可能です。

Acrobat 内の JavaScriptDesigner のサポート

Designer での JavaScript 等価機能 コメント

Annotオブジェクトのプロパティおよびメソッド

すべてのプロパティおよびメソッド 認識可 なし 固定レイアウトのフォームのみが注釈レイヤーをサポートします。

appオブジェクトプロパティcalculate 認識不可 なし Designer には、 execCalculate

メソッドが含まれています。これにより、calculateイベントが開始されます。execCalculate

Page 120: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

AcrobatのスクリプティングからDesignerへの移行 14

114

language 認識可 xfa.host.language languageプロパティを参照してください。language

monitors 認識可 なし

platform 認識可 xfa.host.platform platformプロパティを参照してください。platform

plugins 認識可 なし

toolbar 認識可 なし

viewerType 認識可 xfa.host.appType appTypeプロパティを参照してください。appType

viewerVariation 認識可 xfa.host.variation variationプロパティを参照してください。variation

viewerVersion 認識可 xfa.host.version versionプロパティを参照してください。version

appオブジェクトメソッドaddMenuItem 認識可 なし

addSubMenu 認識可 なし

addToolButton 認識可 なし

alert 認識可 xfa.host.messageBox()

messageBoxメソッドを参照してください。messageBox

beep 認識可 xfa.host.beep() beepメソッドを参照してください。beep

browseForDoc 認識可 なし

clearInterval 認識可 なし

clearTimeOut 認識可 なし

execDialog 認識可 なし

execMenuItem 認識可 なし 指定されたメニューコマンドを実行します。Designer では「ファイル」メニューコマンドに対してこのメソッドを使用します。

Acrobat 内の JavaScriptDesigner のサポート

Designer での JavaScript 等価機能 コメント

Page 121: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

AcrobatのスクリプティングからDesignerへの移行

115

getNthPluginName 認識可 なし

getPath 認識可 なし

goBack 認識可 なし

goForward 認識可 なし

hideMenuItem 認識可 なし

hideToolbarButton 認識可 なし

launchURL 認識可 なし Designer には、 gotoURLメソッドが含まれています。これにより、Acrobat や Adobe Reader などのクライアントアプリケーションに特定の URL が読み込まれます。gotoURL

listMenuItems 認識可 なし

listToolbarButtons 認識可 なし

mailGetAddrs 認識可 なし

mailMsg 認識可 なし

newDoc 認識可 なし このメソッドは、バッチ、コンソールまたはメニューイベント時のみに実行できます。

newFDF 認識不可 なし

openDoc 認識可 なし

openFDF 認識不可 なし

popUpMenuEx 認識可 なし

popUpMenu 認識可 なし

removeToolButton 認識可 なし

response 認識可 xfa.host.response() responseメソッドを参照してください。response

setInterval 認識可 なし

setTimeOut 認識可 なし

trustedFunction 認識可 なし

Acrobat 内の JavaScriptDesigner のサポート

Designer での JavaScript 等価機能 コメント

Page 122: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

AcrobatのスクリプティングからDesignerへの移行 14

116

trustPropagatorFunction 認識可 なし このメソッドは、バッチ、コンソールおよびアプリケーションの初期化時のみに使用できます。

Bookmark オブジェクトのプロパティおよびメソッド

すべてのプロパティおよびメソッド 認識可 なし

docオブジェクトプロパティauthor 認識可 なし

baseURL 認識可 なし

bookmarkRoot 認識可 なし

calculate 認識不可 なし

dataObjects 認識可 なし

delay 認識不可 なし

dirty 認識可 なし この Designer の JavaScript スクリプトは、フォームのコピーを保存し、フォームの変更の有無をテストします。var sOrigXML = xfa.data. saveXML; if (sOrigXML != xfa.data.saveXML) {...}

disclosed 認識可 なし

documentFileName 認識可 なし

dynamicXFAForm 認識可 なし

external 認識可 なし

filesize 認識可 なし

hidden 認識可 なし

icons 認識可 なし

keywords 認識可 なし

layout 認識可 なし

media 認識可 なし

metadata 認識可 xfa.form.desc descオブジェクトを参照してください。desc

Acrobat 内の JavaScriptDesigner のサポート

Designer での JavaScript 等価機能 コメント

Page 123: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

AcrobatのスクリプティングからDesignerへの移行

117

modDate 認識可 なし

mouseX mouseY 認識可 なし

noautocomplete 認識可 なし

nocache 認識可 なし

numFields 認識可 xfa.layout.pageContent()

pageContentメソッドは、特定の型を持つすべてのオブジェクトの一覧を返します。ただし、フォーム全体をスキャンするには、このメソッドをデザインビューとマスターページに対して実行する必要があります。pageContent

numPages 認識可 xfa.host.numPagesまたはxfa.layout.absPageCount() xfa.layout.pageCount()

numPagesプロパティは、レンダリングされたフォームのクライアントにおけるページ数を返します。absPageCount メソッドおよびpageCountメソッドも参照してください。numPagesabsPageCountpageCount

pageNum 認識可 xfa.host.currentPage

currentPageプロパティを参照してください。currentPage

pageNum-- 認識可 xfa.host.currentPage--またはxfa.host.pageUp()

currentPageプロパティまたはpageUpメソッドを参照してください。currentPagepageUp

pageNum++ 認識可 xfa.host.currentPage++またはxfa.host.pageDown()

currentPageプロパティまたはpageDownメソッドを参照してください。currentPagepageDown

path 認識可 なし

securityHandler 認識可 なし

Acrobat 内の JavaScriptDesigner のサポート

Designer での JavaScript 等価機能 コメント

Page 124: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

AcrobatのスクリプティングからDesignerへの移行 14

118

templates 認識不可 なし Designer のサブフォームオブジェクトを使用すると共にプロパティとメソッドを使用し、サブフォームインスタンスの追加、削除、移動、設定を行います。スクリプティングを使用したサブフォームインスタンスの追加と削除

title 認識可 xfa.host.title 「 title」を参照してください。

docオブジェクトメソッドaddAnnot 認識可 なし

addField 認識不可 なし Designer では、固定レイアウトのフ ォ ー ム を 使 用 し た 上 で、instanceManager オブジェクトを使用して特定のオブジェクトのインスタンスを追加、削除またはインスタンス数を設定する必要があります。instanceManager詳しくは、「 スクリプティングを使用したサブフォームインスタンスの追加と削除」を参照してください。

addIcon 認識可 なし

addLink 認識不可 なし

addRecipientListCryptFilter 認識可 なし

addScript 認識可 なし

addThumbnails 認識不可 なし

addWatermarkFromFile 認識可 なし

addWatermarkFromText 認識可 なし

addWeblinks 認識可 なし

appRightsSign 認識可 なし

appRightsValidate 認識可 なし

bringToFront 認識可 なし

Acrobat 内の JavaScriptDesigner のサポート

Designer での JavaScript 等価機能 コメント

Page 125: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

AcrobatのスクリプティングからDesignerへの移行

119

calculateNow 認識不可 xfa.form.recalculate(1);またはexecCalculate()

recalculaterecalculateメソッドは、calculateイベントに設定されている一連のスクリプトを強制的に起動します。B oolean 値は、True(デフォルト、すべての演算スクリプトが起動される)または False(中断している演算スクリプトのみ起動される)を示します。Designercalculate オブジェクトは、フォーム入力者がフィールドの計算値を上書きできるかどうかを制御します。execCalculateこの代わりとして、再計算を強制す る個々のオブジェクトごとにexecCalculateメソッドを使用することもできます。

closeDoc 認識可 なし

createDataObject 認識可 なし

createTemplate 認識不可 なし Designer フォームには、Acrobat テンプレートに相当する機能がありません。サブフォームオブジェクトをDesigner で使用する必要があります。

deletePages 認識不可 なし instanceManagerDesigner では、 instanceManager オブジェクトを使用することで、フォーム内のページを表すサブフォームオブジェクトを削除できます。詳しくは、「 スクリプティングを使用したサブフォームインスタンスの追加と削除」を参照してください。

embedDocAsDataObject 認識可 なし

encryptForRecipients 認識可 なし

encryptUsingPolicy 認識可 なし

exportAsText 認識可 なし このメソッドは、Acrobat の JavaScriptデバッガーの JavaScript コンソールまたはバッチ処理のみで使用できます。

exportAsFDF 認識不可 xfa.host.exportData()

exportDataexportDataメソッドは、FDF ファイルの代わりに XML ファイルや XDPファイルを書き出します。

Acrobat 内の JavaScriptDesigner のサポート

Designer での JavaScript 等価機能 コメント

Page 126: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

AcrobatのスクリプティングからDesignerへの移行 14

120

exportAsXFDF 認識不可 xfa.host.exportData()

exportDataexportDataメソッドは、FDF ファイルの代わりに XML ファイルや XDPファイルを書き出します。

exportDataObject 認識可 なし

exportXFAData 認識不可 xfa.host.exportData()

exportDataexportDataメソッドは、FDF ファイルの代わりに XML ファイルや XDPファイルを書き出します。

extractPages 認識不可 なし

flattenPages 認識不可 なし

getAnnot 認識可 なし

getAnnots 認識可 なし

getDataObjectContents 認識可 なし

getField("FieldName") 認識可 xfa.resolveNode ("FieldName")

resolveNoderesolveNodeメソッドは、フォームのソース XML に含まれる特定のオブジェクトにアクセスします。

getLegalWarnings 認識可 なし

getLinks 認識不可 なし

getNthFieldName 認識可 n番目に到達するまで、同じクラス名を持つすべてのオブジェクトでループ処理を行う必要があります。

classNameclassNameプロパティを参照してください。

getNthTemplate 認識不可 なし

getOCGs 認識可 なし

getOCGOrder 認識可 なし

getPageBox 認識可 なし

getPageLabel 認識可 なし

getPageNthWord 認識可 なし

getPageNthWordQuads 認識可 なし

getPageNumWords 認識可 なし

getPageRotation 認識可 なし

Acrobat 内の JavaScriptDesigner のサポート

Designer での JavaScript 等価機能 コメント

Page 127: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

AcrobatのスクリプティングからDesignerへの移行

121

getPrintParams 認識可 なし

getTemplate 認識不可 なし

getURL 認識可 xfa.host.gotoURL( "http://www.adobe.com");

gotoURLメソッドを参照してください。gotoURL

gotoNamedDest 認識不可 なし

importAnFDF 認識不可 なし

importAnXFDF 認識可 なし

importDataObject 認識可 なし

importIcon 認識可 なし

importTextData 認識可 なし

importXFAData 認識不可 xfa.host.importData ("filename.xdp");

importDataメソッドを参照してください。importData

insertPages 認識不可 なし

mailDoc 認識可 なし

mailForm 認識不可 なし

movePage 認識不可 なし

newPage 認識不可 なし

openDataObject 認識可 なし

print 認識可 xfa.host.print(); printメソッドを参照してください。print

removeDataObject 認識可 なし

removeField 認識不可 なし

removeIcon 認識可 なし

removeLinks 認識不可 なし

removeScript 認識可 なし

removeTemplate 認識不可 なし

removeThumbnails 認識不可 なし

removeWeblinks 認識可 なし

Acrobat 内の JavaScriptDesigner のサポート

Designer での JavaScript 等価機能 コメント

Page 128: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

AcrobatのスクリプティングからDesignerへの移行 14

122

replacePages 認識不可 なし

resetForm 認識不可 xfa.host.resetData()またはxfa.event.reset()

resetDataメソッドは、フォーム上のフィールド値すべてをデフォルト値にリセットします。 resetメソッドは、イベントモデル内のすべてのプロパティをリセットします。resetDatareset

saveAs 認識可 なし Designer では、アプリケーションレベルでファイルを保存する必要があります。以下に、アプリケーションレベルで保存するスクリプト例を示します。app.executeMenuItem ("SaveAs");またはvar myDoc = event.target; myDoc.saveAs();

spawnPageFromTemplate 認識不可 なし

setAction 認識不可 なし

setPageLabel 認識可 なし

setPageRotation 認識不可 なし

setPageTabOrder 認識不可 なし Designer では、編集/タブ順序を選択し、タブ順序を設定します。

setScript 認識不可 なし

submitForm 認識可 Designer では、いずれかの送信ボタンオブジェクトを使用します。

eventオブジェクトプロパティchange 認識可 xfa.event.change change

change プロパティを参照してください。

targetName 認識可 xfa.event.target targettarget プロパティを参照してください。

fieldオブジェクトプロパティcomb 認識不可 なし

Acrobat 内の JavaScriptDesigner のサポート

Designer での JavaScript 等価機能 コメント

Page 129: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

AcrobatのスクリプティングからDesignerへの移行

123

charLimit 認識不可 this.value.#text.maxChars

固定レイアウトを含んだフォームでは、文字数制限を Designer ワークスペースに設定できます。データ全体を収容するまでレイアウトを拡大するフォームのフィールドを設定可能です。maxChars

display = display.noView 認識不可 「 フォームデザインのオブジェクトの配置の変更」を参照してください。

presenceDesigner ワークスペースで presenceプロパティを設定することもできます。prePrintイベントを使用して印刷の前にオブジェクトの presence を変更することはできません。

display = display.noPrint 認識不可 「 フォームデザインのオブジェクトの配置の変更」を参照してください。

presenceDesigner ワークスペースで presenceプロパティを設定することもできます。prePrint イベントを使用して印刷の前にオブジェクトの presence を変更することはできません。

defaultValue 認識不可 なし Designer ワークスペースでデフォルトのフィールド値を設定できます。

exportValues 認識不可 なし Designer ワークスペースで書き出し値を設定できます。

fillColor 認識不可 xfa.form.Form1. NumericField1.fillColor

fillColorfillColorプロパティを参照してください。

hidden 認識不可 this.presence = "invisible" this. presence = "visible"

presenceDesigner ワークスペースで presenceプロパティを設定することもできます。

multiline 認識不可 this.ui.textEdit.multiLine = "1";

multiLinemultiLineプロパティを参照してください。

password 認識不可 なし Designer には、フォーム上のパスワードに使用できるパスワードフィールドがあります。

page 認識不可 なし Designer のフォームには適用されません。

Acrobat 内の JavaScriptDesigner のサポート

Designer での JavaScript 等価機能 コメント

Page 130: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

AcrobatのスクリプティングからDesignerへの移行 14

124

print 認識不可 this.relevant = "-print";

relevantrelevantプロパティを参照してください。

radiosInUnison 認識不可 なし Designer のラジオボタングループのデフォルトでは、同時に複数を選択することはできません。

rect 認識可 以下の参照構文を使用すると、Designer フォームフィールドの高さと幅を取得できます。this.h; this.w;または、以下の参照構文を使用すると、オブジェクトの XY 座標を取得できます。this.x; this.y;

h、 x、 yh、w、xおよびyの各プロパティを参照してください。

required 認識不可 this.mandatory = "error";またはthis.validate.nullTest = "error";

mandatory、 nullTestmandatory プロパティおよびnullTestプロパティを参照してください。

textColor 認識不可 this.fontColor fontColorfontColorプロパティを参照してください。

textSize 認識不可 this.font.size sizesizeプロパティを参照してください。

textFont 認識不可 this.font.typeface typefacetypefaceプロパティを参照してください。

value 認識不可 this.rawValue rawValuerawValueプロパティを参照してください。valueDesigner フィールドには valueプロパティがありますが、Acrobat のvalue プロパティとは等価ではありません。

fieldオブジェクトメソッドclearItems 認識不可 DropDownList1.clear

Items();clearItemsclearItemsメソッドは、Designerのコンボボックスおよびリストボックスオブジェクトにのみ適用されます。

deleteItemAt 認識不可 なし

Acrobat 内の JavaScriptDesigner のサポート

Designer での JavaScript 等価機能 コメント

Page 131: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

AcrobatのスクリプティングからDesignerへの移行

125

関連するリンク:イベントモデルの使用

getItemAt 認識不可 なし

insertItemAt 認識不可 DropDownList1.addItem .....)

addItemaddItemメソッドを参照してください。

isBoxChecked 認識不可 if(CheckBox1.rawValue == 1)....

rawValuerawValueプロパティを参照してください。

isDefaultChecked 認識不可 なし

setAction 認識不可 なし Designer のフォームには適用されません。

setFocus 認識可 xfa.host.setFocus ("TextField1.somExpression")

setFocussetFocusメソッドでは、指定したオブジェクトがフォーム上の他のオブジェクトとは異なる一意の名前を持っていることが必要です。

setItems 認識不可 なし

setLock 認識可 なし

signatureGetModifications 認識可 なし

signatureGetSeedValue 認識可 なし

signatureInfo 認識可 なし

signatureSetSeedValue 認識可 なし

signatureSign 認識可 なし

signatureValidate 認識可 なし

searchオブジェクトメソッドsearch.query("<your text>");

認識可 なし FormCalc の「..」(二重ピリオド)ショートカット構文を使用すると、XML フォームオブジェクトモデル内でオブジェクトを検索できます。詳しくは、「 FormCalc 参照構文のショートカット」を参照してください。

SOAP[SOAP]オブジェクトメソッド

すべてのプロパティおよびメソッド 認識可 なし

Acrobat 内の JavaScriptDesigner のサポート

Designer での JavaScript 等価機能 コメント

Page 132: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

一般的なスクリプティングタスクの例 15

126

15. 一般的なスクリプティングタスクの例

このスクリプティングの例では、独自の作業に応用できる、使いやすく簡単な手法を示します。

例とアイデアについては、 デベロッパーセンターを参照してください。

15.1. フィールド、入力可能な領域およびサブフォームの背景色の変更

この例は、実行時にフォームの入力者のインタラクションに応答して、フォーム上のサブフォーム、フィールドおよび入力可能な領域の背景色を変更する方法を示しています。

この例では、ボタンをクリックすると、関連付けられているオブジェクトの背景色が変わります。

注:実行時にオブジェクトの背景色を操作するには、Acrobat ダイナミック XML フォームファイルとしてフォームを保存する必要があります。

このスクリプティング例とその他の情報については、 デベロッパーセンターを参照してください。

Page 133: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

一般的なスクリプティングタスクの例

127

15.1.1. サブフォームおよびテキストフィールドの背景色のスクリプティング

サブフォームおよびテキストフィールドの背景色を設定するには、 fillColor メソッドを使用します。例えば、次の行はサブフォームのスクリプトです。

Subform1.fillColor = "17,136,255";

次の行は、テキストフィールドの背景色のスクリプトを構成しています。

Subform1.Name.fillColor = "102,179,255"; Subform1.Address.fillColor = "102,179,255"; Subform1.City.fillColor = "102,179,255"; Subform1.State.fillColor = "102,179,255"; Subform1.ZipCode.fillColor = "102,179,255"; Subform1.Country.fillColor = "102,179,255";

15.1.2. 入力可能な領域の背景色のスクリプティング

各テキストフィールドの背景色または入力可能な領域を設定する場合は、番号記号(#)を含む参照構文の式を必要とするプロパティにスクリプトからアクセスする必要があります。JavaScript では参照構文の式の番号記号(#)を正しく解釈しないので、スクリプトでは resolveNode メソッドを使用して式を解決します。

xfa.resolveNode("Subform1.Name.ui.#textEdit.border.fill.color").value = "153,204,255"; xfa.resolveNode("Subform1.Address.ui.#textEdit.border.fill.color").value = "153,204,255"; xfa.resolveNode("Subform1.City.ui.#textEdit.border.fill.color").value = "153,204,255"; xfa.resolveNode("Subform1.State.ui.#textEdit.border.fill.color").value = "153,204,255"; xfa.resolveNode("Subform1.ZipCode.ui.#textEdit.border.fill.color").value = "153,204,255"; xfa.resolveNode("Subform1.Country.ui.#textEdit.border.fill.color").value = "153,204,255";

15.1.3. 「すべてをクリア」ボタンのスクリプティング

「すべてをクリア」ボタンのスクリプトでは、 remerge メソッドを使用してフォームデザインとフォームデータを再結合します。この場合、このメソッドはフィールド、入力可能な領域およびサブフォームを効率的に元の状態に戻します。

xfa.form.remerge();

Page 134: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

一般的なスクリプティングタスクの例 15

128

15.2. オブジェクトの表示および非表示

この例は、フォームの印刷時にボタンを非表示にする方法、および実行時に配置の値を変更してオブジェクトの表示と非表示を切り替える方法を示しています。

注:ツールメニューのアクションビルダーダイアログボックスを使用すると、スクリプトを記述しないで、編集可能なレイアウトを含むフォームのオブジェクトの表示と非表示を切り替えることができます。詳しくは、「 フォームのアクションの作成」を参照してください。

この例では、フォームのすべてのオブジェクトがフォーム内に表示されています。

フォームの入力者は、「実際の値」領域のコンボボックスを使用してオブジェクトの表示と非表示を切り替えることができます。次のダイアグラムでは、「住所」フィールドが非表示になっており、フォームのレイアウトがそれに合わせて調整されています。また、「フォームを印刷」ボタンも表示されていません。

Page 135: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

一般的なスクリプティングタスクの例

129

注:実行時にオブジェクトの表示と非表示を切り替えるには、Acrobat ダイナミック PDF フォームファイルとしてフォームを保存する必要があります。

このスクリプティング例とその他の情報については、 デベロッパーセンターを参照してください。

15.2.1. サブフォームの配置の値のスクリプティング

サブフォームの配置の値のスクリプトでは、switch ステートメントを使用して、フォームの入力者がサブフォームオブジェクトに適用できる 3 つの配置オプションを処理します。

switch(xfa.event.newText) { case 'Invisible': Subform1.presence = "invisible"; break; case 'Hidden (Exclude from Layout)': Subform1.presence = "hidden"; break; default: Subform1.presence = "visible"; break; }

Page 136: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

一般的なスクリプティングタスクの例 15

130

15.2.2. テキストフィールドの配置の値のスクリプティング

テキストフィールドの配置の値のスクリプトには 2 つの変数が必要です。1 つ目の変数は、Subform1 に格納されるオブジェクトの数を保存します。

var nSubLength = Subform1.nodes.length;

2 つ目の変数は、フォームの入力者が「テキストフィールド」コンボボックスで選択するテキストフィールドの名前を保存します。

var sSelectField = fieldList.rawValue;

次のスクリプトでは、 replace メソッドを使用して、 sSelectField 変数に保存されているフィールドの名前からスペースをすべて削除します。これにより、コンボボックスの値を階層パレットのオブジェクトの名前に一致させることができます。

sSelectField = sSelectField.replace(' ', '');

次のスクリプトでは、 For ループを使用して、Subform1 に格納されているすべてのオブジェクトを繰り返し処理します。

for (var nCount = 0; nCount < nSubLength; nCount++) {

Subform1 の現在のオブジェクトのタイプが field で、フォームの入力者が選択したオブジェクトと現在のオブジェクトの名前が同じである場合は、次の switch の case が実行されます。

if ((Subform1.nodes.item(nCount).className == "field") & (Subform1.nodes.item(nCount).name == sSelectField)) {

次のスクリプトでは、switch ステートメントを使用して、フォームの入力者がテキストフィールドオブジェクトに適用できる 3 つの配置の値を処理します。

switch(xfa.event.newText) { case 'Invisible': Subform1.nodes.item(nCount).presence = "invisible"; break; case 'Hidden (Exclude from Layout)': Subform1.nodes.item(nCount).presence = "hidden"; break; default: Subform1.nodes.item(nCount).presence = "visible"; break; } } }

Page 137: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

一般的なスクリプティングタスクの例

131

15.2.3. ボタンの配置の値のスクリプティング

ボタンの配置の値のスクリプトには 2 つの変数が必要です。次の変数は、Subform1 に格納されるオブジェクトの数を保存します。

var nSubLength = Subform1.nodes.length;

次の変数は、フォームの入力者が「ボタン」コンボボックスで選択するボタンの名前を保存します。

var sSelectButton = buttonList.rawValue;

次のスクリプトでは、 replace メソッドを使用して、 sSelectField 変数に保存されているフィールドの名前からスペースをすべて削除します。これにより、コンボボックスの値を階層パレットのオブジェクトの名前に一致させることができます。

sSelectButton = sSelecButton.replace(/¥s/g, '');

次のスクリプトでは、 For ループを使用して、Subform1 に格納されているすべてのオブジェクトを繰り返し処理します。

for (var nCount = 0; nCount < nSubLength; nCount++) {

Subform1 の現在のオブジェクトのタイプが field で、フォームの入力者が選択したオブジェクトと現在のオブジェクトの名前が同じである場合は、次の switch の case を実行します。if ((Subform1.nodes.item(nCount).className == "field") & Subform1.nodes.item(nCount).name == sSelectButton)) {

次のスクリプトでは、 switch ステートメントを使用して、フォームの入力者がボタンオブジェクトに適用できる 5 つの配置の値を処理します。

注:relevant プロパティは、フォームの印刷時にオブジェクトを表示する必要があるかどうかを示します。switch(xfa.event.newText) { case 'Invisible': Subform1.nodes.item(nCount).presence = "invisible"; break; case 'Hidden (Exclude from Layout)': Subform1.nodes.item(nCount).presence = "hidden"; break; case 'Visible (but Don\'t Print)': Subform1.nodes.item(nCount).presence = "visible"; Subform1.nodes.item(nCount).relevant = "-print"; break; case 'Invisible (but Print Anyway)': Subform1.nodes.item(nCount).presence = "invisible"; Subform1.nodes.item(nCount).relevant = "+print"; break; default: Subform1.nodes.item(nCount).presence = "visible"; break; } } }

Page 138: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

一般的なスクリプティングタスクの例 15

132

15.2.4. コンボボックスのリセットのためのスクリプティング

すべてのコンボボックスをデフォルト値にリセットするには、 resetData メソッドを使用します。xfa.host.resetData();

フォームデザインとフォームデータを再結合するには、 remerge メソッドを使用します。この場合、このメソッドはフォームオブジェクト領域のオブジェクトを効率的に元の状態に戻します。

xfa.form.remerge();

15.3. タブ順序からのオブジェクトの除外

この例は、デフォルトのタブ順序からオブジェクトを除外する方法を示しています。この例では、ユーザーは TextField1 から開始し、Tab キーを使用して TextField2、TextField3 の順に移動します。ただし、コンボボックスオブジェクト DropDownList1 は、ユーザーがカーソルを TextField2 に置いた場合に表示するように設定されます。

この場合、デフォルトのタブ順序は次のようになります。

タブ順序から DropDownList1 を除外するには、TextField2 オブジェクトに次のスクリプトを追加します。

イベント スクリプト

enter // This conditional statement displays DropDownList3 to the user // and sets the focus of the client application to TextField2. if (DropDownList3.presence != "visible") { DropDownList3.presence = "visible"; xfa.host.setFocus(this); }

exit // This conditional statement tests to see if the user is // pressing the Shift key while pressing the Tab key. If Shift is // held down, then the client application focus returns to // TextField1, otherwise the focus is set to TextField3. The // experience for the user is that DropDownList3 is not a // part of the tabbing order. var isShiftDown = xfa.event.shift; if (isShiftDown) { xfa.host.setFocus(TextField1); } else { xfa.host.setFocus(textField3); }

Page 139: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

一般的なスクリプティングタスクの例

133

15.4. クライアントでのオブジェクトの視覚プロパティの変更

この例は、オブジェクト(ここではテキストフィールド)の視覚プロパティを操作する方法を示しています。例えば、「フィールドの幅を拡大」チェックボックスを選択すると、テキストフィールドの入力可能な領域が 4 インチ拡張されます。

注:クライアントでオブジェクトの視覚プロパティを変更するには、Acrobat ダイナミック PDF フォームファイルとしてフォームを保存する必要があります。

この例では、チェックボックスに一意のオブジェクト名が付けられていません。したがって、Designer では、オブジェクトを参照するためにインスタンス値を割り当てます。チェックボックスのスクリプトでは、if-else ステートメントを使用して、選択および選択解除の効果を指定します。

このスクリプティング例とその他の情報については、 デベロッパーセンターを参照してください。

15.4.1. 「フィールドを移動」チェックボックスのスクリプティング

このチェックボックスを選択すると、x と y の設定に従ってフィールドが移動されます。このチェックボックスの選択を解除すると、フィールドの位置が元に戻ります。

if (CheckBox1.rawValue == true) { TextField.x = "3.0in"; TextField.y = "3.5in"; } else { TextField.x = "1in"; TextField.y = "3in"; }

15.4.2. 「フィールドの幅を拡張」チェックボックスのスクリプティング

このチェックボックスを選択すると、フィールドの幅が 4 インチに変更されます。このチェックボックスの選択を解除すると、フィールドの幅が 2.5 インチに変更されます。

if (CheckBox2.rawValue == true) TextField.w = "4in"; else TextField.w = "2.5in";

Page 140: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

一般的なスクリプティングタスクの例 15

134

15.4.3. 「フィールドの高さを拡張」チェックボックスのスクリプティング

このチェックボックスを選択すると、フィールドの高さが 1.5 インチに変更されます。このチェックボックスの選択を解除すると、フィールドの高さが 0.5 インチに変更されます。

if (CheckBox3.rawValue == true) TextField.h = "1.5in"; else TextField.h = "0.5in";

15.4.4. 「オブジェクトの境界線の色を変更」チェックボックスのスクリプティング

このチェックボックスを選択すると、フィールドの境界線の色が赤に変更されます。このチェックボックスの選択を解除すると、フィールドの境界線の色が白に変更されます。

if (CheckBox4.rawValue == true) TextField.border.edge.color.value = "255,0,0"; else TextField.border.edge.color.value = "255,255,255";

15.4.5. 「入力可能な領域の色を変更」チェックボックスのスクリプティング

このチェックボックスを選択すると、テキストフィールドの入力可能な領域の色が緑に変更されます。このチェックボックスの選択を解除すると、テキストフィールドの入力可能な領域の色が白に変更されます。

if (CheckBox5.rawValue == true) { xfa.resolveNode("TextField.ui.#textEdit.border.fill.color").value = "0,255,0"; } else { xfa.resolveNode("TextField.ui.#textEdit.border.fill.color").value = "255,255,255"; }

15.4.6. 「値の幅に合わせて拡張」チェックボックスのスクリプティング

このチェックボックスを選択すると、テキストフィールドの入力可能な領域が値に合わせて調整されます。このチェックボックスの選択を解除すると、テキストフィールドの入力可能な領域は調整されません。

if (CheckBox6.rawValue == true) TextField.minW = "0.25in"; else TextField.maxW = "2.5in";

Page 141: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

一般的なスクリプティングタスクの例

135

15.4.7. 「フィールドを非表示」チェックボックスのスクリプティング

このチェックボックスを選択すると、フィールドが非表示になります。このチェックボックスの選択を解除すると、フィールドが表示されます。

if (CheckBox7.rawValue == true) TextField.presence = "hidden"; else TextField.presence = "visible";

15.4.8. 「値のフォントを変更」チェックボックスのスクリプティング

このチェックボックスを選択すると、値のフォントが Courier New に変更されます。このチェックボックスの選択を解除すると、値のフォントが Myriad Pro に変更されます。if (CheckBox8.rawValue == true) TextField.font.typeface = "Courier New"; else TextField.font.typeface = "Myriad Pro";

15.4.9. 「フォントのサイズを変更」チェックボックスのスクリプティング

このチェックボックスを選択すると、フォントサイズが 14 pt に変更されます。このチェックボックスの選択を解除すると、フォントサイズが 10 pt に変更されます。if (CheckBox9.rawValue == true) TextField.font.size = "14pt"; else TextField.font.size = "10pt";

15.4.10.「テキストフィールドの値の垂直方向配置」チェックボックスのスクリプティング

このチェックボックスを選択すると、テキストフィールドの値が上揃えになります。このチェックボックスの選択を解除すると、テキストフィールドの値が中央揃えになります。

if (CheckBox10.rawValue == true) TextField.para.vAlign = "top"; else TextField.para.vAlign = "middle";

15.4.11.「テキストフィールドの値の水平方向配置」チェックボックスのスクリプティング

このチェックボックスを選択すると、テキストフィールドの値が中央揃えになります。このチェックボックスの選択を解除すると、テキストフィールドの値が左揃えになります。

if (CheckBox11.rawValue == true)TextField.para.hAlign = "center"; else TextField.para.hAlign = "left";

Page 142: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

一般的なスクリプティングタスクの例 15

136

15.4.12.「設定値を表示」チェックボックスのスクリプティング

このチェックボックスを選択すると、スクリプトを使用して定義される値がテキストフィールドに表示されます。このチェックボックスの選択を解除すると、(スクリプトを使用して定義される)デフォルト値がテキストフィールドに表示されます。

if (CheckBox12.rawValue == true) TextField.rawValue = "This is a value set using a script."; else TextField.rawValue = "This is a default value.";

15.4.13.「キャプションテキストを変更」チェックボックスのスクリプティング

このチェックボックスを選択すると、スクリプトを使用して定義される代替キャプションテキストがキャプションとして表示されます。このチェックボックスの選択を解除すると、(スクリプトを使用して定義される)デフォルトキャプションがテキストフィールドに表示されます。

if (CheckBox13.rawValue == true) xfa.resolveNode("TextField.caption.value.#text").value = "Alternate Caption:"; else xfa.resolveNode("TextField.caption.value.#text").value = "Caption:";

15.4.14.「フィールドの境界線を 3D から実線に変更」チェックボックスのスクリプティング

このチェックボックスを選択すると、フィールドの境界線がボックス(実線)に変更されます。このチェックボックスの選択を解除すると、フィールドの境界線が 3D に変更されます。

if (CheckBox14.rawValue == true) xfa.resolveNode("TextField.ui.#textEdit.border.edge").stroke = "solid"; else xfa.resolveNode("TextField.ui.#textEdit.border.edge").stroke = "lowered";

15.4.15. チェックボックスの「すべてをクリア」ボタンのスクリプティング

すべてのチェックボックスをデフォルト値(選択解除)にリセットするには、 resetData メソッドを使用します。

xfa.host.resetData();

フォームデザインとフォームデータを再結合するには、 remerge メソッドを使用します。この場合、このメソッドはテキストフィールドを効率的に元の状態に戻します。

xfa.form.remerge();

Page 143: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

一般的なスクリプティングタスクの例

137

15.5. コンボボックスの現在または以前の値の取得

この例は、フォーム上のコンボボックスの現在の値を取得する方法、およびコンボボックスの以前の値にアクセスする様々な方法を示しています。現在および以前の値を設定する実際のスクリプトに加えて、コンボボックスの change イベントにそのスクリプトがあることに注意が必要です。

次の例では、フォームの入力者がコンボボックスから値を選択すると、選択した値が「現在の値」フィールドに表示されます。次に、フォームの入力者がコンボボックスから別の値を選択すると、新しい値が「現在の値」フィールドに表示され、以前の値は「以前の値 1」フィールドに表示されます。

注:コンボボックスの以前の値を取得する方法ごとに別のスクリプトが使用されます。「以前の値 1」テキストフィールドの値は、コンボボックスの rawValue プロパティを直接参照して設定されます。これに対して、「以前の値 2」テキストフィールドの値は、 prevText プロパティを使用して設定されます。 一貫した結果を得るために、 prevText プロパティを使用して以前の値にアクセスすることをお勧めします。

このスクリプティング例とその他の情報については、 デベロッパーセンターを参照してください。

15.5.1. 「現在の値」テキストフィールドに入力するためのスクリプティング

「現在の値」テキストフィールドの値を入力するには、 newText プロパティを使用します。

CurrentValue.rawValue = xfa.event.newText;

15.5.2. 「以前の値 1」テキストフィールドに入力するためのスクリプティング

「以前の値 1」テキストフィールドの値を入力するには、コンボボックスの rawValue プロパティを参照します。

PreviousValue1.rawValue = DropDownList.rawValue;

15.5.3. 「以前の値 2」テキストフィールドに入力するためのスクリプティング

「以前の値 2」テキストフィールドの値を入力するには、 prevText プロパティを使用します。

PreviousValue2.rawValue = xfa.event.prevText;

Page 144: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

一般的なスクリプティングタスクの例 15

138

15.6. フィールドの値のコピー時のリッチテキストの書式設定の保持

この例は、フィールド間で値をコピーするときにフィールドデータのリッチテキストの書式設定を保持する方法を示しています。

TextField1 と TextField2 は、「複数行」に設定され、リッチテキストの書式設定を表示するように設定されます。

「リッチテキストをコピー」ボタンでは、リッチテキストの書式設定を含む TextField1 の値をコピーしてTextField2 に貼り付けます。

15.6.1. 「リッチテキストをコピー」ボタンのスクリプティング

リッチテキストフィールドの値は、その値を格納するフィールドの子オブジェクト内に XML 形式で保存されます。「リッチテキストをコピー」ボタンの click イベントにある次のスクリプトでは、saveXML メソッドを使用して、リッチテキストの値の XML 定義を保存します。次に、その XML データは TextField2 の対応する子オブジェクトに読み込まれます。

var richText = TextField1.value.exData.saveXML(); TextField2.value.exData.loadXML(richText,1,1);

この例では、TextField2 の既存の値を上書きするようにリッチテキストの値が設定されます。スクリプトを次のように調整すると、TextField2 の現在の値にリッチテキストデータが追加されます。

var richText = TextField1.value.exData.saveXML(); TextField2.value.exData.loadXML(richText,1,0);

Page 145: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

一般的なスクリプティングタスクの例

139

15.7. 実行時のフィールドの高さの調整

この例は、別のフィールドのコンテンツの高さに合わせてフィールドを拡張する方法を示しています。

この例では、フォームの入力者が TextField1 に複数行を入力し、「拡大」ボタンをクリックすると、TextField2 の高さが TextField1 の高さに合わせて拡張します。

このスクリプティング例とその他の情報については、 デベロッパーセンターを参照してください。

15.7.1. 「拡大」ボタンのスクリプティング

次に示すのは「拡大」ボタンのスクリプトです。

var newHeight = xfa.layout.h(TextField1, "in"); TextField2.h = newHeight + "in";

15.8. 実行時の必須フィールドの設定

この例は、実行時にフィールドを必須フィールドとして設定する方法を示しています。

この例では、「必須に設定」ボタンをクリックし、フォームの入力者が TextField1 にテキストを入力せずにフォームを送信しようとすると、エラーメッセージが表示されます。

このスクリプティング例とその他の情報については、 デベロッパーセンターを参照してください。

15.8.1. 「必須に設定」ボタンのスクリプティング

次に示すのは「必須に設定」ボタンのスクリプトです。

TextField1.validate.nullTest = "error";

次の 2 つのうちどちらかのスクリプトを使用することもできます。

TextField1.mandatory = "error" TextField1.mandatoryMessage = "this field is mandatory!"

Page 146: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

一般的なスクリプティングタスクの例 15

140

15.9. フィールドの合計の計算

この例は、フォームの入力者がクライアントアプリケーション(Acrobat Professional、Adobe Reader、HTML クライアントなど)でフォームを開いたときに、様々なフォーム階層のレベルのフィールドの合計を計算する方法を示しています。

このスクリプティング例とその他の情報については、 デベロッパーセンターを参照してください。

15.9.1. フォーム内で繰り返されるフィールドの合計を計算するためのスクリプティング

フォーム内の繰り返しフィールドの合計を計算するには、「合計」フィールドに calculate イベントを追加します。

var fields = xfa.resolveNodes("NumericField1[*]");

var total = 0; for (var i=0; i <= fields.length-1; i++) { total = total + fields.item(i).rawValue; }

this.rawValue = total;

15.9.2. 繰り返されるフィールドの合計を計算するためのスクリプティング

同様に、繰り返されるフィールドの合計を計算するには、「合計」フィールドに calculate イベントを追加します。

var fields = xfa.resolveNodes("detail[*].NumericField1");

var total = 0; for (var i=0; i <= fields.length-1; i++) { total = total + fields.item(i).rawValue; }

this.rawValue = total;

Page 147: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

一般的なスクリプティングタスクの例

141

15.9.3. ページ上のフィールドの合計を計算するためのスクリプティング

ページ上のフィールドの合計を計算するには、「合計」フィールドに calculate イベントを追加します。

var fields = xfa.layout.pageContent(0 , "field", 0); var total = 0; for (var i=0; i <= fields.length-1; i++) { if (fields.item(i).name == "NumericField1") { total = total + fields.item(i).rawValue; }

}

this.rawValue = total;

15.10. フォームの入力者のインタラクションに応答するフィールドのハイライト表示

この例は、フォームの入力者が現在使用しているフィールドをハイライト表示する方法、フォームの入力者が入力する必要のあるフィールドをハイライト表示する方法およびメッセージボックスを使用してフォームの入力者に対するフィードバックを入力する方法を示しています。

この例では、必須フィールドの右側にアスタリスク(*)が表示されます。フィールドを選択すると、フィールドの境界線の色が青に変更されます。フォームの入力者が必須フィールドに入力せずに「データを確認」ボタンをクリックすると、メッセージが表示され、フィールドの色が赤に変更されます。フォームの入力者がすべての必須フィールドに入力し、「データを確認」ボタンをクリックすると、確認メッセージが表示されます。

このスクリプティング例とその他の情報については、 デベロッパーセンターを参照してください。

Page 148: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

一般的なスクリプティングタスクの例 15

142

15.10.1. 選択したフィールドの青色の境界線を追加するためのスクリプティング

選択したフィールドの青色の境界線を追加するには、各テキストフィールドに次のスクリプトを追加します。

例えば、「名前」フィールドに enter イベントを追加します。

Name.border.edge.color.value = "0,0,255";

例えば、「名前」フィールドに exit イベントを追加します。

Name.border.edge.color.value = "255,255,255";

例えば、「名前」フィールドに mouseEnter イベントを追加します。

Name.border.edge.color.value = "0,0,255";

例えば、「名前」フィールドに mouseExit イベントを追加します。

Name.border.edge.color.value = "255,255,255";

15.10.2.「データを確認」ボタンのスクリプティング

「データを確認」ボタン用に作成された次のスクリプトは、一連のチェックを実行して必須フィールドにデータが入力されていることを確認します。この場合は、各フィールドを個別にチェックして、フィールドの値が null 以外または空の文字列以外であることを確認します。フィールドの値が null または空の文字列の場合は、フィールドへのデータの入力が必要であることを示す警告メッセージが表示され、入力可能な領域の背景色が赤に変更されます。

フィールドにデータが入力されていないかどうかを示すには、次の変数を使用します。

var iVar = 0;

if ((Name.rawValue == null) || (Name.rawValue == "")) { xfa.host.messageBox("Please enter a value in the Name field.");

次のスクリプトでは、テキストフィールドの入力可能な領域の色を変更します。

xfa.resolveNode("Name.ui.#textEdit.border.edge").stroke = "solid"; xfa.resolveNode("Name.ui.#textEdit.border.fill.color").value = "255,100,50";

// Set the variable to indicate that this field does not contain data. iVar = 1; } else { // Reset the fillable area of the text field. xfa.resolveNode("Name.ui.#textEdit.border.edge").stroke = "lowered"; xfa.resolveNode("Name.ui.#textEdit.border.fill.color").value = "255,255,255"; }

if ((Address.rawValue == null) || (Address.rawValue == "")) { xfa.host.messageBox("Please enter a value in the Address field.");

Page 149: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

一般的なスクリプティングタスクの例

143

次のスクリプトでは、テキストフィールドの入力可能な領域の色を変更します。

xfa.resolveNode("Address.ui.#textEdit.border.edge").stroke = "solid"; xfa.resolveNode("Address.ui.#textEdit.border.fill.color").value = "255,100,50";

次のスクリプトでは、フィールドにデータが入力されていないことを示す変数を設定します。

iVar = 1; } else {

次のスクリプトでは、テキストフィールドの入力可能な領域をリセットします。

xfa.resolveNode("Address.ui.#textEdit.border.edge").stroke = "lowered"; xfa.resolveNode("Address.ui.#textEdit.border.fill.color").value = "255,255,255"; }

if ((City.rawValue == null) || (City.rawValue == "")) { xfa.host.messageBox("Please enter a value in the City field.");

次のスクリプトでは、テキストフィールドの入力可能な領域の色を変更します。

xfa.resolveNode("City.ui.#textEdit.border.edge").stroke = "solid"; xfa.resolveNode("City.ui.#textEdit.border.fill.color").value = "255,100,50";

次のスクリプトでは、フィールドにデータが入力されていないことを示す変数を設定します。

iVar = 1; } else {

次のスクリプトでは、テキストフィールドの入力可能な領域をリセットします。

xfa.resolveNode("City.ui.#textEdit.border.edge").stroke = "lowered"; xfa.resolveNode("City.ui.#textEdit.border.fill.color").value = "255,255,255"; }

if ((State.rawValue == null) || (State.rawValue == "")) { xfa.host.messageBox("Please enter a value in the State field.");

次のスクリプトでは、テキストフィールドの入力可能な領域の色を変更します。

xfa.resolveNode("State.ui.#textEdit.border.edge").stroke = "solid"; xfa.resolveNode("State.ui.#textEdit.border.fill.color").value = "255,100,50";

次のスクリプトでは、フィールドにデータが入力されていないことを示す変数を設定します。

iVar = 1; } else {

Page 150: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

一般的なスクリプティングタスクの例 15

144

次のスクリプトでは、テキストフィールドの入力可能な領域をリセットします。

xfa.resolveNode("State.ui.#textEdit.border.edge").stroke = "lowered"; xfa.resolveNode("State.ui.#textEdit.border.fill.color").value = "255,255,255"; }

if ((ZipCode.rawValue == null) || (ZipCode.rawValue == "")) { xfa.host.messageBox("Please enter a value in the Zip Code field.");

次のスクリプトでは、テキストフィールドの入力可能な領域の色を変更します。

xfa.resolveNode("ZipCode.ui.#textEdit.border.edge").stroke = "solid"; xfa.resolveNode("ZipCode.ui.#textEdit.border.fill.color").value = "255,100,50";

次のスクリプトでは、フィールドにデータが入力されていないことを示す変数を設定します。

iVar = 1; } else {

次のスクリプトでは、テキストフィールドの入力可能な領域をリセットします。

xfa.resolveNode("ZipCode.ui.#textEdit.border.edge").stroke = "lowered"; xfa.resolveNode("ZipCode.ui.#textEdit.border.fill.color").value = "255,255,255"; }

if ((Country.rawValue == null) || (Country.rawValue == "")) { xfa.host.messageBox("Please enter a value in the Country field.");

次のスクリプトでは、テキストフィールドの入力可能な領域の色を変更します。

xfa.resolveNode("Country.ui.#textEdit.border.edge").stroke = "solid"; xfa.resolveNode("Country.ui.#textEdit.border.fill.color").value = "255,100,50";

次のスクリプトでは、フィールドにデータが入力されていないことを示す変数を設定します。

iVar = 1; } else {

次のスクリプトでは、テキストフィールドの入力可能な領域をリセットします。

xfa.resolveNode("Country.ui.#textEdit.border.edge").stroke = "lowered"; xfa.resolveNode("Country.ui.#textEdit.border.fill.color").value = "255,255,255"; }

すべての必須フィールドにデータが入力されている場合は、 iVar 変数が 0 に設定され、確認メッセージが表示されます。

if (iVar == 0) { xfa.host.messageBox("Thank you for inputting your information."); }

Page 151: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

一般的なスクリプティングタスクの例

145

15.11. 現在のサブフォームの値のリセット

この例は、フォーム全体ではなく、いくつかの特定のフィールドの値をリセットする方法を示しています。そのためには、必須のサブフォームオブジェクトのフィールドのみリセットします。

この例では、フォームの入力者が「クリア」ボタンをクリックしてフィールドの値をリセットできます。

このスクリプティング例とその他の情報については、 デベロッパーセンターを参照してください。

15.11.1. 左側の列に表示される値のスクリプティング

左側の列に表示される値については、次のスクリプトを入力します。

this.rawValue = this.parent.index + 1;

デフォルト値をリセットするには、「クリア」ボタンに click イベントを追加します。動的な参照構文の式が必要です。これは、詳細が繰り返されるサブフォームであり、参照構文の式にその詳細を反映する必要があるためです。この状況では、 resetData パラメーターを個別に作成する方が簡単です。

var f1 = this.parent.somExpression + ".TextField2" + ","; var f2 = f1 + this.parent.somExpression + ".DropDownList1" + ","; var f3 = f2 + this.parent.somExpression + ".NumericField1";

// ...and pass the variable as a parameter. xfa.host.resetData(f3);

Page 152: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

一般的なスクリプティングタスクの例 15

146

15.12. フォームデザインのオブジェクトの配置の変更

Designer では、オブジェクトパレットの様々なタブを使用して、フォーム上の異なるオブジェクトについて次に示す配置の設定を行うことができます。「非表示」および「隠す(レイアウトから除外)」の設定は、グループ、コンテンツ領域、マスターページ、ページセットおよびサブフォームセットのオブジェクトには使用できません。

注:スクリプトを使用してオブジェクトの配置の設定を変更するには、基になる 2 つの XML フォームオブジェクトモデルのプロパティ( presence および relevant)の値を変更する必要があります。

次の表は、配置の設定と対応する参照構文を示しています。

配置の設定 参照構文

表示 FormCalcObjectName.presence = "visible"JavaScriptObjectName.presence = "visible";

表示(画面のみ) FormCalcObjectName.presence = "visible" ObjectName.relevant = "-print"JavaScriptObjectName.presence = "visible"; ObjectName.relevant = "-print";

表示(印刷のみ) FormCalcObjectName.presence = "visible" ObjectName.relevant = "+print"JavaScriptObjectName.presence = "visible"; ObjectName.relevant = "+print";

非表示 FormCalcObjectName.presence = "invisible"JavaScriptObjectName.presence = "invisible";

隠す(レイアウトから除外) FormCalcObjectName.presence = "hidden"JavaScriptObjectName.presence = "hidden";

片面印刷のみ FormCalcObjectName.presence = "simplex"JavaScriptObjectName.presence = "simplex";

両面印刷のみ FormCalcObjectName.presence = "duplex"JavaScriptObjectName.presence = "duplex";

Page 153: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

一般的なスクリプティングタスクの例

147

15.13. インスタンスマネージャーのプロパティを使用したサブフォームの制御

この例は、(XML フォームオブジェクトモデルに含まれる)インスタンスマネージャーのプロパティを使用して、サブフォームに関する情報を実行時に取得する方法を示しています。

次のフォームでは、インスタンスマネージャーのスクリプティングプロパティを使用することにより、Subform1 に関する情報を 4 つのボタンで提供します。例えば、フォームの入力者が「最大値」ボタンをクリックすると、サポート対象の Subform1 のインスタンスの許可されている最大数を示すメッセージが表示されます。

15.13.1. count プロパティの値を出力するメッセージボックスのスクリプティング

次のスクリプトでは、 messageBox メソッドを使用して count プロパティの値を出力します。

xfa.host.messageBox("The current number of Subform1 instances on the form is: " + properties.Subform1.instanceManager.count, "Instance Manager Properties",3);

次に示すように、アンダースコア(_)を使用してインスタンスマネージャーの count プロパティを参照することにより、このスクリプトを記述することもできます。

xfa.host.messageBox("The current number of Subform1 instances on the form is: " + properties._Subform1.count, "Instance Manager Properties", 3);

サブフォームのインスタンスがフォーム上に存在しない場合、アンダースコア(_)は特に重要です。

Page 154: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

一般的なスクリプティングタスクの例 15

148

15.13.2. max プロパティの値を出力するメッセージボックスのスクリプティング

次のスクリプトでは、 messageBox メソッドを使用して max プロパティの値を出力します。

xfa.host.messageBox("The maximum number of instances allowed for Subform1 is: " + properties.Subform1.instanceManager.max, "Instance Manager Properties", 3);

次に示すように、アンダースコア(_)を使用してインスタンスマネージャーの max プロパティを参照することにより、このスクリプトを記述することもできます。

xfa.host.messageBox("The maximum number of instances allowed for Subform1 is: " + properties._Subform1.max, "Instance Manager Properties", 3);

15.13.3. min プロパティの値を出力するメッセージボックスのスクリプティング

次のスクリプトでは、 messageBox メソッドを使用して min プロパティの値を出力します。

xfa.host.messageBox("The minimum number of instances allowed for Subform1 is: " + properties.Subform1.instanceManager.min, "Instance Manager Properties", 3);

次に示すように、アンダースコア(_)を使用してインスタンスマネージャーの min プロパティを参照することにより、このスクリプトを記述することもできます。

xfa.host.messageBox("The minimum number of instances allowed for Subform1 is: " + properties._Subform1.min, "Instance Manager Properties", 3);

15.13.4. subform プロパティの名前を出力するメッセージボックスのスクリプティング

次のスクリプトでは、 messageBox メソッドを使用して subform プロパティの名前を出力します。

xfa.host.messageBox("The name of the subform using the instance manager name property is: " + properties.Subform1.instanceManager.name + ".\n\nNote: This value is different than the value returned by the name property for the Subform1 object." , "Instance Manager Properties", 3);

次に示すように、アンダースコア(_)を使用してインスタンスマネージャーの name プロパティを参照することにより、このスクリプトを記述することもできます。

xfa.host.messageBox("The name of the subform using the instance manager name property is: " + properties._Subform1.name + ".\n\nNote: This value is different than the value returned by the name property for the Subform1 object." , "Instance Manager Properties", 3);

Page 155: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

一般的なスクリプティングタスクの例

149

15.14. インスタンスマネージャーのメソッドを使用したサブフォームの制御

この例は、(XML フォームオブジェクトモデルに含まれる)インスタンスマネージャーのメソッドを使用して、実行時にサブフォームオブジェクトで操作を行う方法を示しています。例えば、特定のサブフォーム、テーブルまたはテーブル行のインスタンスを追加および削除できます。

次のフォームには、フォームの入力者がインスタンスマネージャーの様々なスクリプティングメソッドを使用するための 4 つのボタンが用意されています。例えば、フォームの入力者が「追加」ボタンをクリックすると、新しい Subform2 のインスタンスがフォームに追加されます。

注:「移動」ボタンは Subform2 の最初の 2 つのインスタンスの順序を変更し、「設定」ボタンは Subform2のインスタンスの最大数を表示します。どちらの場合も、サブフォームを追加または削除するか、テキストフィールド内のデータを変更して、Subform2 のインスタンスに適用されたその変更を確認する必要がある可能性があります。

15.14.1. 最大数のサブフォームをフォームに追加したかどうかを判断するためのスクリプティング

次のスクリプトでは、サポートされている最大数の Subform2 のインスタンスがフォームに存在するかどうかを判断します。最大数のインスタンスが存在する場合は、スクリプトによってメッセージが表示されます。それ以外の場合は、新しい Subform2 のインスタンスがフォームに追加されます。

if (methods.Subform2.instanceManager.count == methods.Subform2.instanceManager.max) { xfa.host.messageBox("You have reached the maximum number of items allowed.", "Instance Manager Methods", 1); } else { methods.Subform2.instanceManager.addInstance(1); xfa.form.recalculate(1); }

Page 156: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

一般的なスクリプティングタスクの例 15

150

次に示すように、アンダースコア(_)を使用してインスタンスマネージャーのプロパティとメソッドを参照することにより、このスクリプトを記述することもできます。

if (methods._Subform2.count == methods._Subform1.max) { xfa.host.messageBox("You have reached the maximum number of items allowed.", "Instance Manager Methods", 1); } else { methods._Subform2.addInstance(1); xfa.form.recalculate(1); }

15.14.2. 削除するサブフォームがフォームに存在するどうかを判断するためのスクリプティング

次のスクリプトでは、Subform2 のインスタンスがフォームに存在するかどうかを判断します。インスタンスが存在しない場合は、そのことを示すメッセージがスクリプトによって表示されます。インスタンスが存在する場合は、スクリプトによって最初のインスタンスがフォームから削除されます。

if (methods.Subform2.instanceManager.count == 0) { xfa.host.messageBox("There are no subform instances to remove.", "Instance Manager Methods", 1); } else { methods.Subform2.instanceManager.removeInstance(0); xfa.form.recalculate(1); }次に示すように、アンダースコア(_)を使用してインスタンスマネージャーのプロパティとメソッドを参照することにより、このスクリプトを記述することもできます。

if (methods._Subform2.count == 0) { xfa.host.messageBox("There are no subform instances to remove.", "Instance Manager Methods", 1); } else { methods._Subform2.removeInstance(0); xfa.form.recalculate(1); }

15.14.3. 4つのサブフォームのインスタンスを強制的にフォームに表示するためのスクリプティング

次のスクリプトでは、現在のインスタンス数に関係なく、4 つの Subform2 のインスタンスを強制的にフォームに表示します。

methods.Subform2.instanceManager.setInstances(4);次に示すように、アンダースコア(_)を使用してインスタンスマネージャーのプロパティとメソッドを参照することにより、このスクリプトを記述することもできます。

methods._Subform2.setInstances(4);

Page 157: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

一般的なスクリプティングタスクの例

151

15.14.4. フォーム上の最初と 2 つ目のサブフォームの位置を強制的に切り替えるためのスクリプティング

次のスクリプトでは、フォーム上の最初と 2 つ目の Subform2 のインスタンスの位置を強制的に切り替えます。

methods.Subform2.instanceManager.moveInstance(0,1);

次に示すように、アンダースコア(_)を使用してインスタンスマネージャーのプロパティとメソッドを参照することにより、このスクリプトを記述することもできます。

methods._Subform2.moveInstance(0,1);

15.15. インスタンスマネージャーを使用した実行時のサブフォームの制御

この例は、インスタンスマネージャーのプロパティとメソッドを使用して、実行時にサブフォームに関する情報を取得し、サブフォームオブジェクトで操作を行う方法を示しています。

この例では、フォームの入力者がボタンと Subform3 のインスタンスを使用して様々なアクションを実行します。例えば、フォームの入力者が「次のインスタンスを追加」ボタンをクリックすると、新しい Subform3のインスタンスが現在のインスタンスの下に追加されます。

注:サブフォームを追加または削除するか、テキストフィールド内のデータを変更して、Subform3 のインスタンスに適用されたその変更を確認する必要がある場合があります。

注:特定のサブフォームのインスタンスがフォームに存在しない場合は、次のそれぞれの例に示すように、アンダースコア(_)を使用する必要があります。アンダースコア(_)の使用について詳しくは、Designerのヘルプを参照してください。

15.15.1.「新規サブフォームを追加」ボタンのスクリプティング

次のスクリプトでは、サポートされている最大数の Subform3 のインスタンスがフォームに存在するかどうかを判断します。最大数のインスタンスが存在する場合は、スクリプトによってメッセージが表示されます。それ以外の場合は、新しい Subform3 のインスタンスがフォームに追加されます。

Page 158: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

一般的なスクリプティングタスクの例 15

152

if (advanced.Subform3.instanceManager.count == advanced.Subform3.instanceManager.max) { xfa.host.messageBox("You have reached the maximum number of items allowed.","Combining Instance Manager Concepts", 1); } else { advanced.Subform3.instanceManager.addInstance(1); xfa.form.recalculate(1); }

次に示すように、アンダースコア(_)を使用してインスタンスマネージャーのプロパティとメソッドを参照することにより、このスクリプトを記述することもできます。

if (advanced._Subform3.count == advanced._Subform3.max) { xfa.host.messageBox("You have reached the maximum number of items allowed.", "Combining Instance Manager Concepts", 1); } else { advanced._Subform3.addInstance(1); xfa.form.recalculate(1); }

15.15.2.「サブフォームを削除」ボタンのスクリプティング

次のスクリプトでは、Subform3 のインスタンスがフォームに存在するかどうかを判断します。インスタンスが存在しない場合は、そのことを示すメッセージがスクリプトによって表示されます。インスタンスが存在する場合は、スクリプトによって最初のインスタンスがフォームから削除されます。

if (advanced.Subform3.instanceManager.count == 0) { xfa.host.messageBox("There are no subform instances to remove.", "Combining Instance Manager Concepts", 1); } else { advanced.Subform3.instanceManager.removeInstance(0); }

次に示すように、アンダースコア(_)を使用してインスタンスマネージャーのプロパティとメソッドを参照することにより、このスクリプトを記述することもできます。

if (advanced._Subform3.count == 0) { xfa.host.messageBox("There are no subform instances to remove.", "Combining Instance Manager Concepts", 1); } else { advanced._Subform3.removeInstance(0); }

Page 159: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

一般的なスクリプティングタスクの例

153

15.15.3.「次のインスタンスを追加」ボタンのスクリプティング

次の if-else ステートメントでは、最大数の Subform3 のインスタンスがフォームに含まれている場合、スクリプトを続行しないようにします。

if (Subform3.instanceManager.count < Subform3.instanceManager.occur.max) { //oNewInstance stores an instance of Subform3 created by the addInstance() method. var oNewInstance = Subform3.instanceManager.addInstance(1); //nIndexFrom and nIndexTo store the before and after index values to use with the moveInstance() method. var nIndexFrom = oNewInstance.index; var nIndexTo = Subform3.index + 1;

この場合、スクリプトが nIndexFromの値を参照すると、 moveInstance メソッドで指定されたフォーム上の位置に新しい Subform3 のインスタンスが追加されます。

Subform3.instanceManager.moveInstance(nIndexFrom, nIndexTo); } else { xfa.host.messageBox("You have reached the maximum number of items allowed.", "Combining Instance Manager Concepts", 1); }

次に示すように、アンダースコア(_)を使用してインスタンスマネージャーのプロパティとメソッドを参照することにより、このスクリプトを記述することもできます。

if (_Subform3.count < _Subform3.occur.max) { var oNewInstance = _Subform3.addInstance(1); var nIndexFrom = oNewInstance.index; var nIndexTo = Subform3.index + 1; _Subform3.moveInstance(nIndexFrom, nIndexTo); } else { xfa.host.messageBox("You have reached the maximum number of items allowed.", "Combining Instance Manager Concepts", 1); }

15.15.4.「このインスタンスを削除」ボタンのスクリプティング

次の if-else ステートメントでは、最小数の Subform3 のインスタンスがフォームに含まれている場合、スクリプトを続行しないようにします。

if (Subform3.instanceManager.count > Subform3.instanceManager.occur.min) {

次のスクリプトでは、 removeInstance メソッドを使用して Subform3 のインスタンスを削除します。

注:このスクリプトでは、値 parent.parent.index を使用して、削除する Subform3 のインスタンスを示します。 parent 参照は、この参照を使用するオブジェクトのコンテナを示します。この場合、参照parent.index を使用して、「次のインスタンスを追加」、「このインスタンスを削除」、「1 行上に」および「1 行下に」の各ボタンを含む名称未設定のサブフォームを示します。

Page 160: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

一般的なスクリプティングタスクの例 15

154

Subform3.instanceManager.removeInstance(parent.parent.index); } else { xfa.host.messageBox("You have reached the minimum number of items allowed.", "Combining Instance Manager Concepts", 1); }

次に示すように、アンダースコア(_)を使用してインスタンスマネージャーのプロパティとメソッドを参照することにより、このスクリプトを記述することもできます。

if (_Subform3.count > _Subform3.occur.min) { Subform3.removeInstance(Subform3.index); } else { xfa.host.messageBox("You have reached the minimum number of items allowed.", "Combining Instance Manager Concepts", 1); }

15.15.5.「1 行上に」ボタンのスクリプティング

次の if-else ステートメントでは、Subform3 のインスタンスが最初のインスタンスとしてリストに表示されている場合、スクリプトを続行しないようにします。

if (Subform3.index != 0) { //nIndexFrom and nIndexTo store the before and after index values to use with the moveInstance method. var nIndexFrom = Subform3.index; var nIndexTo = Subform3.index - 1; Subform3.instanceManager.moveInstance(nIndexFrom, nIndexTo); } else { xfa.host.messageBox("The current item cannot be moved because it is the first instance in the list.", "Combining Instance Manager Concepts", 1); }

次に示すように、アンダースコア(_)を使用してインスタンスマネージャーのプロパティとメソッドを参照することにより、このスクリプトを記述することもできます。

if (Subform3.index != 0) { var nIndexFrom = Subform3.index; var nIndexTo = Subform3.index - 1; Subform3.moveInstance(nIndexFrom, nIndexTo); } else { xfa.host.messageBox("The current item can't be moved since it already is the first instance in the list.", "Combining Instance Manager Concepts", 1); }

Page 161: Designer スクリプティング基礎 - Adobe Inc....i 目次 このドキュメントの内容. .1 目的と対象範囲.1 追加情報.2 Designer を使用したスクリプティング

一般的なスクリプティングタスクの例

155

15.15.6.「1 行下に」ボタンのスクリプティング

次の変数は、Subform3 のインスタンスのインデックス値を保存します。

var nIndex = Subform3.index;

次の if-else ステートメントでは、Subform3 のインスタンスが最後のインスタンスとしてリストに表示されている場合、スクリプトを続行しないようにします。

if ((nIndex + 1) < Subform3.instanceManager.count) { // nIndexFrom and nIndexTo store the before and after index values to use with the moveInstance() method. var nIndexFrom = nIndex; var nIndexTo = nIndex + 1;

Subform3.instanceManager.moveInstance(nIndexFrom, nIndexTo); } else { xfa.host.messageBox("The current item cannot be moved because it is the last instance in the list.", "Combining Instance Manager Concepts", 1); }

次に示すように、アンダースコア(_)を使用してインスタンスマネージャーのプロパティとメソッドを参照することにより、このスクリプトを記述することもできます。

var nIndex = Subform3.index; if ((nIndex + 1) < Subform3.instanceManager.count) { var nIndexFrom = nIndex; var nIndexTo = nIndex + 1; _Subform3.moveInstance(nIndexFrom, nIndexTo); } else { xfa.host.messageBox("The current item can't be moved since it already is the last instance in the list.", "Combining Instance Manager Concepts", 1); }