辞書 (キーと値のペアのコレクションから構成され、キーがコレクション内で重複しないデータタイプ) を実装します。
このデータタイプに関連する操作には、コレクションへのペアの追加、コレクションからのペアの削除、既存のペアの変更、特定のキーに関連付けられた値の検索があります。
この実装は外部リソースを使用して行い、やり取りは外部オブジェクトを使用して GeneXus で解決します。
この例のもっとも興味深い点は、サーバー側で .NET または Java のコードを実行し、クライアント側で JavaScript コードを実行することです。詳細については、「GeneXus X Evolution 3 におけるクライアント側でのイベント実行」を参照してください。
このため、コードがサーバー側で生成されている場合は、.NET または Java のコードが実行されます (実行されているプラットフォームによる)。これに対して、コードがクライアント側で生成されている場合は、JavaScript コードが実行されます。
JavaScript 用の外部オブジェクトについて学ぶ。
外部オブジェクトを実行する際の、コードの生成場所に応じた 2 つのオプション (サーバー側またはクライアント側) について理解する。
ここに示すのは、ネイティブ外部オブジェクトを使用する例であり、ソリューションを実装することがメインの課題ではありません。
始めに検討する点:
この例では、サーバー側のコードがプラットフォームのデータタイプ定義の一部になります。.NET Framework では Dictionary データタイプです (名前空間は System.Collections.Generic)。Java では、Hashtable データタイプを使用します。これは、外部オブジェクト定義の [ .Net External Name ] プロパティと [ Java External Name ] プロパティに反映します。下の図を参照してください。
この例では、JavaScript コードは外部ソース (Dictionary.js) として定義し、外部オブジェクトの [ Javascript External Name ] プロパティで参照します。JavaScript と同様に、オブジェクトは、キーと値のペアを格納する連想配列 (一部の言語ではハッシュと呼ぶ) です。このため、JavaScript のソースは JavaScript オブジェクト キー リストを使用してソリューションを実装します。
下の図は、外部オブジェクトのプロパティ定義を示しています。
ここでは、外部オブジェクトのクライアント側定義に注目します。Dictionary オブジェクトを定義する JavaScript ソースは次のようになります (プロパティとメソッドの定義は、後で外部オブジェクトのプロパティとメソッドの定義にマップするときのためにメモします)。
これらのプロパティとメソッドを公開するには、外部オブジェクトで定義する必要があります。
たとえば、 [ Keys ] プロパティを非静的と定義し、 [ Javascript External Name ] プロパティを Keys に設定します。
Dictionary.js ソース内で "Keys" を次のように定義します。
get keys () {
return Object.keys(dictionary);
},
これは一例であり、Javascript コードはさまざまな方法でプログラミングできます。
同様に、公開するメソッドを外部オブジェクトで定義します。たとえば、GetItem は非静的メソッドであり、JavaScript の getItem メソッドにマップします ( [ Javascript External Name ] プロパティを使用)。
getItem: function (key) {
return dictionary [ key ] ;
},
外部 JavaScript リソースを使用するには、最初に、次のコードに示すように、HTML ヘッダーに参照を追加する必要があります。
Event Start
Form.HeaderRawHTML += '<script type="text/javascript" src="Dictionary.js"></script>'
EndEvent
次のコードはクライアント側で実行されるため、実行時に JavaScript が呼び出されます。
Event "X"
&Dictionary.SetItem("Evolution3CodeName", "Tilo") //&Dictionary は Dictionary EO データタイプに基づく変数です。
&Dictionary.SetItem("GeneXus15CodeName", "Salto")
EndEvent
次のコードはサーバー側で実行されるため、プラットフォームに応じて Java または .NET が実行されます。
Event "X"
For each Versions
//ここにコード
Endfor
&Dictionary.SetItem("Evolution3CodeName", "Tilo")
&Dictionary.SetItem("GeneXus15CodeName", "Salto")
EndEvent
サンプルは「File:Dictionary Sample」からダウンロードできます。
|