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

Altova MobileTogether Designer

ランタイムシチュエーションに従いコントロールテンプレートを使用するパワフルな利点はテンプレートを動的に選択できるようになることです。例えば、異なるテンプレートをユーザー入力またはデバイスの環境または設定に従い選択することができます。

 

サンプルファイル Cities4-DynamicSelection.mtd 内では横長または縦長のテンプレートがモバイルデバイスの向き (横向きまたは立て向き)に従い選択されています。デバイスが横向きの場合、水平ラジオボタンが自動的に表示されます。デバイスの向きを縦長に変更すると、ラジオボタンの表示は自動的に 垂直の表示に変更されます。このデザイン機能は 前のサンプルCities3-DynamicUpdates.mtdに追加されています。

 

メモ:ソリューションが作動中、またはデバイスの向きの変更をシミュレート中、このサンプルをデバイスを (横長と縦長の向き間で)調整してトライすることができます。 向きの変更をシミュレーションが作動中に行う場合 向きの変更 ツールバーボタンをクリックします (下のスクリーンショットを参照)
MTDCTExS4Sim1

上のスクリーンショットは Cities4-DynamicSelection.mtd のシミュレーションを横向きに表示しています。(横長の向きのための) ラジオボタンのセットのためにコントロールテンプレート動的なラジオボタン (横長) は自動的に選択されます。この結果デバイスは自動的にラジオボタンを水平方向に表示します。

 

メモ:デバイスの向きは MobileTogether 変数$MT_Landscape$MT_Portrait 内に含まれており既知です(それぞれの変数は true() または false() の値を持ちます)。

 

しくみ

テンプレートを動的に選択するために、それぞれのプレースホルダコントロール内で2つの設定を定義する必要があります:

 

どの代替テンプレートが対応して選択されるかを指定する Xpath 式 (下のスクリーンショット内で 「スタイル & プロパティ」ペイン 内で対応するプロパティがハイライトされています)

Xpath 式パラメーターはパラメーター値を選択されたコントロールテンプレートにパスします。

MTDCTExS4DesPlaceholder1

 

コントロールテンプレートの選択方法

各国のためにラジオボタンをインスタンス化するプレースホルダのための Xpath は以下のとおりです:

 

if ($MT_Landscape

then 'Dynamic Radio Buttons (Horizontal)' 

else 'Dynamic Radio Buttons (Vertical)'

 

この式は $MT_Landscape グローバル値が true() の値を持つ場合 動的なラジオボタン (横長) という名前のコントロールテンプレートが使用されるように指定し、それ以外の場合は ( $MT_Landscape=false() の場合) 動的なラジオボタン (縦長) という名前のコントロールテンプレートが使用されます。この式は各向き (横長および縦長)のために呼び出される コントロールテンプレートの名前 を評価する必要があります。

 

各都市ためにラジオボタンをインスタンス化するプレースホルダのための Xpath は若干異なります: 国の一部は複数の都市名を表示しています (イタリア 9 個、米国12個)。このような国のすべては横向き表示で単一のスクリーンの幅で全ての都市を表示できない場合があります。(横向きの) 横向きのテンプレートの選択を9個の年を持つ国のみに制限しました。黄色でハイライトされている選択された国の年の数量を数える Xpath 式は下にリストされています。

 

if ($MT_Landscape and 

count($COUNTRIES-AND-CITIES/Cities/Continent[@name=$PERSISTENT/Root/@Continent ]/Country[@name = $PERSISTENT/Root/@Country]/City/@name) lt 9) 

then 'Dynamic Radio Buttons (Horizontal)' 

else 'Dynamic Radio Buttons (Vertical)'

 

上にリストされる定義の効果は以下の通りです: (I) 横向きでは、全ての国のリストは横長で表示されていますが縦長では全ての国のリストが縦長で表示されています (ii) 横向きでは1から8個の都市が横向きに表示されていますが、リストは8個以上の都市名が含まれています。縦長では全ての都市名が縦長に表示されています。

 

 

テンプレートにパスするパラメーターの値

選択されたコントロールテンプレートのパラメーターに値をパスする Xpath 式 (下のスクリーンショット参照)配列式またはマップ式である必要があります。ランタイムで実際呼び出されるテンプレートがどれであるか既知です。しかしながら、2つのテンプレート間の違いが既知であり、両方のテンプレートには同じ名前を持つ2つのパラメーターが存在します。両方のパラメーターは同じ名前を持つため割り当てる Xpath 式は簡素化されています。

MTDCTExS4TemplateParamDefs

最初のプレースホルダのために(下にリストされている)配列式が使用されています。(2つのパラメーターのために)配列は2つのシーケンスから構成される必要があります。(下で黄色でハイライトされている) 最初のシーケンスは最初のパラメーターの値を提供し、 (青色でハイライトされている) 2番目のシーケンスは2番目のパラメーターの値を提供します。最初のシーケンスは $values パラメーターの値を生成し、選択された大陸の国のリストを評価します。2番目のシーケンスは $sort パラメーターの値を生成し、 true() または false() を評価します。配列内のシーケンスの順序はプロジェクト内のパラメーター定義の順序に対応する必要があり、値が必要ない場合は空のシーケンス () iであることができる任意のパラメーターの値を含む必要があることに注意してください。

 

[

($COUNTRIES-AND-CITIES/Cities/Continent[@name=$PERSISTENT/Root/@Continent]/Country/@name) ,

(if ($PERSISTENT/Root/@SortCountries=1) then true() else false())

]

 

2番目のプレースホルダのために(下にリストされている)マップ式が使用されています。マップはキーがパラメーターの名前である必要がある キー:値 ペアにより構成されています。key:value ペアを他の順序で提供することもできます。

 

map{

"values":($COUNTRIES-AND-CITIES/Cities/Continent[@name=$PERSISTENT/Root/@Continent ]/Country[@name = $PERSISTENT/Root/@Country]/City/@name),

"sort":if ($PERSISTENT/Root/@SortCities=1) then true() else false()

}

 

(C) 2020 Altova GmbH