スクリプティングを使用して、1 つ目のフィールドにデータを埋め込んだ後に 2 つ目のフィールドにデータをダイナミックに埋め込むことができます。例えば、まず、1 つ目のコンボボックスに国名リストが表示されるようにします。ユーザーがそのコンボボックスから国名を選択したら、その国の州または県のリストが表示されるようにすることができます。
例えば、接続したサンプル XML ファイルで次のように定義されているとします。
<MyData>
<country/>
<countries>
<item uiname="United States" token="US"/>
<item uiname="Vietnam" token="SRV"/>
</countries>
<state/>
<US>
<item>California</item>
<item>New York</item>
<item>Texas</item>
</US>
<SRV>
<item>An Giang</item>
<item>Bac Giang</item>
<item>Bac Kan</item>
</SRV>
</MyData>
例えば、1 つ目のコンボボックスから「Vietnam」を選択すると、States / Provinces リストにはベトナムに該当する項目のみが表示されます。
この作業を行う前に、次の条件を満たしていることを確認する必要があります。
1 つ目のフィールドを設定するには
-
オブジェクトライブラリパレットで標準カテゴリをクリックし、コンボボックスまたはリストボックスをフォームデザインにドラッグします。
ここでは、コンボボックスオブジェクトを挿入します。
-
(オプション)オブジェクトパレットで「フィールド」タブをクリックし、「キャプション」ボックスにオブジェクトのキャプションを入力します。
ここでは、「
Country
」と入力します。
-
次のいずれかの操作を行います。
-
データ接続を選択します。
注意:
データソースにまだ接続していない場合、データ接続リストで選択できるのは「デフォルトのデータ連結」のみです。
-
「アイテム」ボックスの横にある三角形をクリックして連結を選択します。
コンボボックスまたはリストボックスに複数の項目が表示されるよう、繰り返しデータ値または繰り返しデータグループを選択します。
ここでは、countries/item を選択します。
「アイテム」ボックスに次の文字列が表示されます。
$record.countries.item[*]
この文字列を選択する代わりに、「アイテム」ボックスにこの文字列を入力することもできます。
注意:
OLEDB データ接続を使用する場合、「アイテム」ボックスは使用できません。「項目テキスト」ボックスと「項目の値」ボックスを使用して、リストへのデータの埋め込みに使用するデータベースの列を選択します。
-
実行時にユーザーにわかりやすい項目名を表示するには、「項目テキスト」ボックスの横にある三角形をクリックして、連結を選択します。
例えば、@uiname を選択して「
United States
」と表示させます。
-
(オプション)「項目テキスト」ボックスの値と異なる値をデータソースに保存するには、「項目の値」ボックスの横にある三角形をクリックして、連結を選択します。
例えば、@token を選択して「
US
」をデータファイルに保存します。
-
「OK」をクリックします。
連結が設定されると、アクティブなラベルに小さなリンクアイコンが表示されます。
1 つ目のフィールドにデータが埋め込まれた後に 2 つ目のフィールドにデータをダイナミックに埋め込むスクリプトを設定するには
-
選択した最初のコンボボックストに、スクリプトエディターのイベントリストから「change」を選択します。
-
「言語」ボックスから「JavaScript」を選択します。
-
次のスクリプトを入力します。
var tempString = "xfa.record." + this.boundItem(xfa.event.newText);
var oItems = xfa.resolveNode(tempString);
var nItemsLength = oItems.nodes.length;
DropDownList2.clearItems();
for (var nItemCount = 0; nItemCount < nItemsLength; nItemCount++) {
DropDownList2.addItem(oItems.nodes.item(nItemCount).value);
}
スクリプト
|
説明
|
tempString
|
xfa.record の文字列を指定します。例えば、「United States」が選択されると、xfa.record は xfa.record.US になります。
|
this.boundItem
|
ユーザーにわかりやすい名前から値またはトークン文字列に変換するリストオブジェクトメソッドです。例えば、「United States」が選択されると、「US」が送信されます。
|
xfa.event.newText
|
リストの Change イベントの新しいテキストコンテンツを返します。例えば、「United States」が選択されると、「United States」が送信されます。
|
var nItemsLength = oItems.nodes.length;
|
<US>(または <SRV>)の子要素の数(<item> の子の数)をクエリします。
|
DropDownList1.clearItems();
|
2 つ目のコンボボックスの既存の項目を削除します。
|
for (var nItemCount = 0; nItemCount < nItemsLength; nItemCount++)
|
<US>(または <SRV>)の各 <item> の子をクエリします。
|
DropDownList1.addItem(oItems.nodes.item(nItemCount).value);
|
nItemCount インデックスにより示される <item> の子のテキスト値を取得し、その値を新しい項目として 2 つ目のコンボボックスに追加します。
|
2 つ目のフィールドを設定するには
-
オブジェクトライブラリパレットで標準カテゴリをクリックし、コンボボックスまたはリストボックスをフォームデザインにドラッグします。
ここでは、コンボボックスオブジェクトを挿入します。
-
(オプション)オブジェクトパレットで「フィールド」タブをクリックし、「キャプション」ボックスにオブジェクトのキャプションを入力します。
ここでは、「
States/Provinces
」と入力します。
-
フィールドをデータソースに連結します。
例えば、state ノードを「States/Provinces」コンボボックスに連結します。
-
「PDF プレビュー」タブでフォームを表示します。
|
|
|