メインページには次の 3 つのページソースがあります: $XML1、 $DB1、 と $DB2。 これらは [ページ ソース] ペイン (下のスクリーンショット参照)で表示され管理されます。
ページの XPath コンテキストはルートノード $XML1 です。これは、このページのすべての XPath 式が、をコンテキストノードとして持っていることを意味します。他のツリー (これらのツリーのルートノードである $DB1 と $DB2) で、ノードをみつけるには、 各ルートノードの XPath ロケーター パスを開始します。
このページソースは編集可能な空白の XML として作成されています。ルート ノード $XML1 は、2 つの属性 (DesiredOffice と DesiredYear) を持つルート要素 (ルート) を含んでいます。このルート ノード $XML1 は(コンテキスト メニューを介して)ページ 2 の XPath コンテキスト ノードとして設定されています。デフォルトのファイルは設定されていないため、ツリーにデータはインポートされません。
このページソース ($XML1) はユーザーのコンボ ボックスの選択 を保つために作成されています:
•DesiredOffice 属性はエンドユーザーの Office の選択を保ちます。
•DesiredYear 属性はエンドユーザーの Year の選択を保ちます。
コンボ ボックスで選択されたデータを保つために、 2 つの属性ノードがコンボ ボックスにページ ソース リンクとして関連づけられています。 2 つのページ ソース リンクは各自、属性ノードを各コンボ ボックスにドラッグすることで作成されます (下部のシミュレーターのスクリーンショット参照)。
各ノードは、(コンテキスト メニュー コマンドにより [ページロード時に存在することを確認 (XPath 値)])ページロード時に初期の値を与えられています。これは、ノードの値が関連したコンボボックスに表示されるため、コンボボックスに初期の値が必要だからです(上のスクリーンショット参照)。XPath 式に与えられる初期の値は次の通りです:
•@DesiredOffice: if (count($DB1/DB/rowset/Row) > 0) then $DB1/DB/RowSet/Row[1]/@id else ""
$DB1, に1つ以上の記録がある場合、最初の記録の @id の値を @DesiredOffice の値にセットします。記録がない場合、@DesiredOffice の値を空白の文字列に設定します。
•@DesiredYear: min(distinct-values($DB2/DB/RowSet/Row[@Office=$XML1/root/@DesiredOffice]/@Year))
$DB2 では、 @DesiredOffice で選択されたすべての記録を選択して、記録から一意の年度を集め、最低限の数値を持つ年度を選択します。
更に、メインページがロードされる都度、@DesiredOffice ノードが正確にフィルされるように指定します。これは、メインページの ページのロード時 イベントのノードの更新アクション [ページ | ページ アクション] により行われます。
アクションは @DesiredOffice ノードをアップデートします。これが、ページの最初のロードである場合、最初のオフィスの ID は @DesiredOffice のコンテンツとしてパスされます。それ以外の場合、値は @DesiredOffice 内の既存の値となります。結果は、実行中、 @DesiredOffice の値は変更されず、ページが最初にロードされる都度、値は初期化されます。
第 2 のページソース($DB1)は、MS Access データベース OfficeSales_DB.mdb 内の Offices テーブルです。このページソースのデータは、DB の Office テーブルから得られます。
Offices のテーブルには、自身は、 DB テーブル内の行と関連している要素の Row 属性のツリーとして表示されている列が 2 つあります (id と City)。 id 列は、主キーで値は変更できないため、この列は編集できません。しかし、新しい行のために、 id 値を作成する必要があります。これを、 XQuery 式を作成し、作成されたすべての新しい行のために id 値を生成し自動化します。 XQuery 式をコンテキスト メニュー コマンド [ページロード時に存在することを確認 (XPath 値)] を使用して挿入します:
let $all := $DB1/DB/RowSet/Row/@id
let $ids := remove($all, index-of($all, ""))
let $id := if (empty($ids)) then 1 else max($ids) + 1
return $id
id 値は、オフィスの一意の ID 番号ですが、 City 値は、オフィスがある都市の名前です。($XML1/root/@DesiredOffice ノードを介して) id はオフィスを一意的に識別するために使用されますが、エンドユーザーのオフィスを識別するために都市の名前を使用するため重要です。
ページソース内のノーが編集される必要がある場合、(コンテキストメニューを介して) OriginalRowSet ノードを作成する必要があります。これは、 OriginalRowSet がオリジナルのデータを保ち、 RowSet が現在の(編集された)データを保つために必須です。
2つのデータのセット(オリジナルおよび編集された)は必須です。これは、 MobileTogether Designer は、何が新しく、アップデートされているか、または削除されたかを識別し、正しいタイミングで必要な変更を加えるために確認します。また、 XQuery let ステートメントを使用して新しい主キーを作成するためにも必要です。 データベースが更新されると、更新されたデータは、新しいオリジナルデータとなり、 OriginalRowSet ノードに入力されます。
第 3 のページソース ($DB1) は、MS Accessデータベース OfficeSales_DB.mdb 内の Sales テーブルです。このデータツリーのデータは、 DB の Sales テーブルから得られます。
Sales テーブルの各行には5つの列 (id 、Licenses、Month、Year、 および Office) があります。テーブルの列は、 Row 要素の属性に対応します。 id 属性は XQuery 式を持ち、すべての作成された行に id 値を生成します。XQuery 式をコンテキスト メニュー コマンド [ページロード時に存在することを確認 (XPath 値)] を使用して挿入します:
let $all := $DB1/DB/RowSet/Row/@id
let $ids := remove($all, index-of($all, ""))
let $id := if (empty($ids)) then 1 else max($ids) + 1
return $id
ページソース内のノードが編集される必要がある場合、(コンテキストメニューを介して) OriginalRowSet ノードを作成する必要があります。これは、 OriginalRowSet がオリジナルのデータを保ち、 RowSet が現在の(編集された) データを保つために必須です。