注文書を作成するときは、ユーザーの請求先および発送先の情報を収集する必要があります。ユーザーが請求先の住所に商品を発送するように希望する場合は、発送先と請求先の住所は同じになります。それ以外に、商品を別の住所に発送するように希望する場合もあります。他の人へのプレゼントを購入するときなどがこれにあたります。
このタスクでは、注文書フォームの発送先/請求先セクションを作成し、ユーザーが請求先情報を発送先情報として使用するかどうかを確実に指定できるようにします。まず、新しい空白のフォームを作成しておきます。
スキーマの作成
- [Data source] 作業ウィンドウを開きます。
- [MyFields] をダブルクリックし、名前を「Order」に変更します。
- 「Billing」という名前のグループを追加します。
- 「Shipping」という名前のグループを追加します。
- [Billing] グループをクリックし、テキスト フィールドを 8 つ追加します。名前はそれぞれ「Name」、「Street1」、「Street2」、「City」、「State」、「PostalCode」、「Phone」、「Email」とします。
- [Name] テキスト フィールドを右クリックし、[Reference] をクリックし、[Shipping] グループをクリックしてから、[OK] をクリックします。
- 同じ操作を、[Billing] グループの残りの 7 つのフィールドに対しても行います。このとき、フィールドの順序は変更しないでください。
- [Shipping] グループをクリックし、「sameAsBilling」という名前で、既定値が「False」 (いいえ) のはい/いいえ (boolean) 属性フィールドを追加します。
これで、注文書の請求先および発送先の情報を収集できるスキーマを作成できました。図 1 は、作成済みのスキーマが表示された [Data Source] 作業ウィンドウです。発送先情報には、請求先情報と同じフィールドが含まれており、さらに商品を請求先住所とそれ以外の住所のどちらに発送するかをユーザーが指定できるようにするブール値が追加されています。次に、ビューの作成を行います。

図 1 注文書のデータ ソース
ビューのレイアウトのデザイン
- [Format] メニューの [Font] をクリックします。
- [Font] 作業ウィンドウで、[Heading 2] をクリックします。
- ビューの一番上に、「PURCHASE ORDER」と入力し、Enter キーを押します。
- レイアウト用の 2 列の表をビューに挿入します。
- レイアウトの左のセルに「Billing Information:」と入力し、Enter キーを押します。
- [Data Source] 作業ウィンドウの [Billing] グループを右クリックし、[Controls In Layout Table] をクリックします。挿入された請求先のレイアウト用の表の右端をドラッグして、外側のレイアウト用の表のセルの大きさに合わせます。
- レイアウトの右のセルに「Shipping Information ():」と入力し、Enter キーを押します。
- [Data Source] 作業ウィンドウの [Shipping] グループを右クリックし、[Controls In Layout Table] をクリックします。挿入された発送先のレイアウト用の表の右端をドラッグして、外側のレイアウト用の表のセルの大きさに合わせます。
- テキスト「Same As Billing」とそれに関連付けられているチェック ボックスを選択してドラッグし、その上の行のかっこの間にドロップします。次に、ドロップ時に挿入された余計な改行を削除します。
- テキストおよびチェック ボックスを移動した後に残った 2 つの空のセルを選択し、Del キーを押します。
これでビューのレイアウトができました。これを 図 2 に示します。この時点では、ユーザーは請求先および発送先の情報を入力することはできますが、[
Same As Billing] チェック ボックスは機能しません。そこで、チェック ボックスがオンのときに請求先のフィールドが発送先のフィールドにコピーされ、オフのときに発送先のフィールドがクリアされるという 2 つの動作規則を追加します。

図 2 完成した注文書のレイアウト
請求先のフィールドをコピーするための動作規則をチェック ボックスに追加する
- [Same As Billing] チェック ボックスをダブルクリックします。
- [Check Box Properties] ダイアログ ボックスの [Rules] をクリックし、[Add] をクリックします。
- 動作規則の名前を「Copy Billing Fields」とし、[Set Condition] をクリックします。
- 図 3 のように [Condition] ダイアログ ボックスの 3 つ目のボックスの一覧の [True] をクリックし、[OK] をクリックします。
- [Add Action] をクリックします。
- [Action] ダイアログ ボックスの [Action] ボックスの一覧の [Set A Field's Value] をクリックします。
- [Field] ボックスの右にある [Select XPath] ボタンをクリックし、[Shipping/Name] をクリックし、[OK] をクリックします。
- [Value] ボックスの右にある [Insert Formula] ボタンをクリックし、[Insert Field Or Group] をクリックし、[Billing/Name] をクリックします。次に、[OK] を 3 回クリックします。
- この動作規則に、さらに 7 つの動作を追加して、Billing グループの残りのフィールドを Shipping グループにコピーします。
- [OK] をクリックして、この動作規則の作成を終了します。 .

図 3 動作規則の条件の設定
発送先のフィールドをクリアするための動作規則をチェック ボックスに追加する
- [Rules] ダイアログ ボックスの [Add] をクリックします。
- 動作規則の名前を「Clear Shipping Fields」とし、[Set Condition] をクリックします。
- [Condition] ダイアログ ボックスの 3 つ目のボックスの一覧の [False] をクリックし、[OK] をクリックします。
- [Add Action] をクリックします。
- [Action] ダイアログ ボックスの [Action] のボックスの一覧の [Set A Field's Value] をクリックします。
- [Field] ボックスの右にある [Select XPath] ボタンをクリックし、[Shipping/Name] をクリックし、[OK] を 2 回クリックします。[Value] ボックスは空のままです。
- Shipping グループ内の残りのフィールドをクリアするために、この動作規則にさらに 7 つの動作を追加します。
- [OK] を 3 回クリックして、開いているダイアログ ボックスをすべて閉じます。
この時点でフォームをプレビューし、[Same As Billing] チェック ボックスをオンにすると、請求先のフィールドに入力されている値がすべて発送先のフィールドにコピーされます。また、チェック ボックスをオフにすると、発送先のフィールドがすべてクリアされます。しかし、解決が必要な問題が 2 つあります。
1 つ目は、[Same As Billing] チェックボックスをオンにした状態でも発送先のフィールドを変更できるので、実質的にチェック ボックスが正しくなくなる問題です。2 つ目は、チェックボックスをオンにした状態で請求先のフィールドを変更しても、発送先のフィールドに反映されない問題です。これを解決するためには、次の変更が必要です。
ユーザーが発送先のフィールドを変更できないようにする
- 発送先カラムの [Name] フィールドをダブルクリックします。
- [Text Box Properties] ダイアログ ボックスの [Display] タブで、[Conditional Formatting] をクリックし、 [Add] をクリックします。
- 1 つ目のボックスの一覧の [sameAsBilling] をクリックし、3 つ目のボックスの一覧の [True] をクリックします。
- [Read-Only formatting] チェック ボックスをオンにし、[OK] を 3 回クリックして開いているダイアログ ボックスをすべて閉じます。
- これと同じ条件付き書式を、ビュー内の発送先の残りの 7 つのフィールドに追加します。
請求先フィールドの変更を発送先フィールドに反映する
- 請求先カラムの [Name] フィールドをダブルクリックします。
- [Text Box Properties] ダイアログ ボックスの [Data] タブで、[Rules] をクリックし、 [Add] をクリックします。
- 動作規則の名前を「Copy Changes to Shipping Name」とし、[Set Condition] をクリックします。
- 1 つ目の条件ボックスの一覧の [Select A Field Or Group] をクリックします。
- [Select A Field Or Group] ダイアログ ボックスの [Shipping/sameAsBilling] フィールドをクリックし、[OK] をクリックします。
- 3 つ目の条件ボックスの一覧の [True] をクリックし、[OK] をクリックします。
- [Add Action] をクリックします。
- [Action] ダイアログ ボックスの [Action] ボックスの一覧の [Set A Field's Value] をクリックします。
- [Field] ボックスの右にある [Select XPath] ボタンをクリックし、[Shipping/Name] をクリックし、[OK] をクリックします。
- [Value] ボックスの右にある [Insert Formula] ボタンをクリックし、[Insert Field Or Group] をクリックし、[Billing/Name] フィールドをクリックします。[OK] を 6 回クリックして開いているダイアログ ボックスをすべて閉じます。
- ビュー内の請求先の残りの 7 つのフィールドに、同様の規則を適切な名前を付けて追加します。
この最後の 2 つの変更により、請求先/発送先セクションが完成します。ユーザーは、請求先および発送先情報を個別に入力するか、[Same As Billing] チェックボックスをオンにして発送先情報を請求先情報と同じにすることを選択できます。ユーザーが後者のオプションを選択した場合、発送先データは、請求先情報が変更された場合でも常に最新の請求先情報を正確に反映します。
確認
フォームをプレビューし、新しい請求先/発送先セクションを [
Same As Billing] チェック ボックスをオンまたはオフにしてテストします。完成したフォームを図 4 に示します。

図 4 完成した注文書の請求先/発送先セクション
©2005 Greg Collins. All rights reserved. Licensed to Autonomy Systems, LLC for display on InfoPathDev.com.