このサイトをビューするために JavaScript を有効化してください。

Altova MobileTogether Designer

メインページには次の 3 つのページソースがあります: $XML1、 $DB1、$DB2。 これらは [ページ ソース] ペイン (下のスクリーンショット参照)で表示され管理されます。

MTDDBCDataSrcMain01

ページの XPath コンテキストはルートノード $XML1 です。これは、このページのすべての XPath 式が、をコンテキストノードとして持っていることを意味します。他のツリー (これらのツリーのルートノードである $DB1$DB2) で、ノードをみつけるには、 各ルートノードの XPath ロケーター パスを開始します。

 

 

第 1 のページソース: $XML1

このページソースは編集可能な空白の XML として作成されています。ルート ノード $XML1 は、2 つの属性 (DesiredOfficeDesiredYear) を持つルート要素 (ルート) を含んでいます。このルート ノード $XML1 は(コンテキスト メニューを介して)ページ 2 の XPath コンテキスト ノードとして設定されています。デフォルトのファイルは設定されていないため、ツリーにデータはインポートされません。

MTDDBCDataSrcXML1

このページソース ($XML1) はユーザーのコンボ ボックスの選択 を保つために作成されています:

 

DesiredOffice 属性はエンドユーザーの Office の選択を保ちます。

DesiredYear 属性はエンドユーザーの Year の選択を保ちます。

 

コンボ ボックスで選択されたデータを保つために、 2 つの属性ノードがコンボ ボックスにページ ソース リンクとして関連づけられています。 2 つのページ ソース リンクは各自、属性ノードを各コンボ ボックスにドラッグすることで作成されます (下部のシミュレーターのスクリーンショット参照)。

MTDDBCSimulatorComboBoxes01

各ノードは、(コンテキスト メニュー コマンドにより [ページロード時に存在することを確認 (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 ノードが正確にフィルされるように指定します。これは、メインページの ページのロード時 イベントのノードの更新アクション [ページ | ページ アクション] により行われます。

MTDDBCOnPageLoad

アクションは @DesiredOffice ノードをアップデートします。これが、ページの最初のロードである場合、最初のオフィスの ID は @DesiredOffice のコンテンツとしてパスされます。それ以外の場合、値は @DesiredOffice 内の既存の値となります。結果は、実行中、 @DesiredOffice の値は変更されず、ページが最初にロードされる都度、値は初期化されます。

 

 

第 2 のページソース: $DB1

第 2 のページソース($DB1)は、MS Access データベース OfficeSales_DB.mdb 内の Offices テーブルです。このページソースのデータは、DB の Office テーブルから得られます。

MTDDBCDataSrcDB1

Offices のテーブルには、自身は、 DB テーブル内の行と関連している要素の Row 属性のツリーとして表示されている列が 2 つあります (idCity)。 id 列は、主キーで値は変更できないため、この列は編集できません。しかし、新しい行のために、 id 値を作成する必要があります。これを、 XQuery 式を作成し、作成されたすべての新しい行のために id 値を生成し自動化します。 XQuery 式をコンテキスト メニュー コマンド [ページロード時に存在することを確認 (XPath 値)] を使用して挿入します:

 

let $all := $DB1/DB/RowSet/Row/@id

let $ids := remove($allindex-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 のページソース: $DB2

第 3 のページソース ($DB1) は、MS Accessデータベース OfficeSales_DB.mdb 内の Sales テーブルです。このデータツリーのデータは、 DB の Sales  テーブルから得られます。

MTDDBCDataSrcDB2

Sales テーブルの各行には5つの列 (idLicenses、Month、Year、 および Office) があります。テーブルの列は、 Row 要素の属性に対応します。 id 属性は XQuery 式を持ち、すべての作成された行に id 値を生成します。XQuery 式をコンテキスト メニュー コマンド [ページロード時に存在することを確認 (XPath 値)] を使用して挿入します:

 

let $all := $DB1/DB/RowSet/Row/@id

let $ids := remove($allindex-of($all""))

let $id := if (empty($ids)) then 1 else max($ids) + 1

return $id

 

ページソース内のノードが編集される必要がある場合、(コンテキストメニューを介して) OriginalRowSet ノードを作成する必要があります。これは、 OriginalRowSet がオリジナルのデータを保ち、 RowSet が現在の(編集された) データを保つために必須です。

 

(C) 2020 Altova GmbH