Structured Data Type (SDT) オブジェクトの構造は、どこでどのように定義するのでしょうか。
これには構造化データ タイプ エディターを使用します。
Structured Data Type (SDT) オブジェクトの作成時に、トランザクション構造に極めて近いマルチレベル構造を定義できます。各レベルには 1 つ以上のメンバーを持つことができます。これらのメンバーは次のように分類されます:
- 単純なエレメント
- 複合エレメント (ほかのエレメントによっても構成されています)。
この記事では次の項目を説明します。
メンバーを Structured Data Type (SDT) オブジェクトの設計で定義する際には、次を指定する必要があります:
- [ Name ] プロパティ: メンバーを識別します。同じ名前で 2 つのエレメントを定義することはできません。
- [ Data Type ] プロパティ: GeneXus の基本タイプ (数値、文字など)、ドメイン、定義済み SDT のうちから選択できます。
- [ Is Collection ] プロパティ: エレメントに複数のインスタンスがあるかどうか (繰り返し可能かどうか) を指定します。次のいずれかの値を指定します: True または False
次の図を参照してください:
SDT での作業中には、SDT のほかのフォーマット (XML など) へのシリアル化を制御するために、各種のエレメントに関連するプロパティを定義できます。単純なエレメント (メンバー) については、次の XML プロパティが表示されます:
これらのプロパティを使用して、生成される XML を制御できます。
[ XmlType ] プロパティ
この関数は次のいずれかの値になります:
- Element: これが既定値です。エレメント (メンバー) は XML エレメントとしてシリアル化されます。
- Attribute: メンバーは XML 項目属性として、親エレメントの最終レベルで表示されます。
- CData: メンバーは CData を持つエレメントとしてシリアル化されます。通常、これは XML が含まれる値で使用されます。
- Value: メンバーは親エレメントの値になります。
[ XML Namespace ] プロパティ
新しいエレメントグループ、新しいコレクション、または単純なエレメントのグループを定義するエレメントです。
エディターでは、ビュレット (黒丸) の種類によって複合エレメントが識別されます。これを次に示します。
SDT 内のメンバーを示します。
コレクションを示します。
構造 (単純なエレメントのグループ) を示します。
複合エレメントには単純なエレメントと同じプロパティがありますが、 [ Data Type ] プロパティが無効になっています。
次の例は、いくつかの単純なエレメントと複雑なイベントを含む、Customers という名前の構造化データタイプを示します。
次に、対応する [ プロパティ ] ウィンドウを確認します。
SDT の名前で作成されたデータタイプ以外のコレクションがサブ構造で定義されている場合、Name.SubstructureName という名前で別のデータタイプが作成され、任意の変数定義のデータタイプとして選択可能になります。つまり、2 つのデータタイプが作成されます。上記の例の後、プロシージャー内で変数を定義する際には次のように表示されます:
ここで、もう一度 [ Collection ] プロパティウィンドウの画像を確認してみましょう。 [ Collection Serialization ] プロパティが表示されています。
このプロパティの目的は、コレクションをどのようにシリアル化するかという問題の解決を支援することです。有効な値は次のとおりです:
- Wrapped: 既定値です。コレクションの開始/終了タグが含まれます。
- Sequence: コレクションエレメントの単純なシーケンスとしてシリアル化されます。
ほかのすべてのエディターと同様、SDT エディターでは、次のものを右クリックした際の、各種のエレメントに対するアクションを定義できます。
ドラッグ アンド ドロップ: [ フォルダ表示 ] からトランザクションを選択し、SDT 構造にドロップできます。トランザクション構造が SDT 構造に追加されます。
構造化データタイプを右クリックすると、次のセカンダリーメニューが表示されます。
注: 構造に新しいメンバーを挿入する必要がある場合、上記のセカンダリーメニューの対応するオプションを使用することも、項目属性を構造にドラッグすることもできます。次の図を参照してください:
SDT の構造にメンバーを挿入するもう 1 つの方法は、GeneXus のメイン メニュー バーにある [ 挿入 ] メニューを使用することです。
次のオプションがあります:
- 項目属性: 選択した項目属性と同じ名前とタイプのメンバーを挿入します。
- ドメイン: 選択したドメインと同じ名前とタイプのメンバーを挿入します。
- オブジェクト (トランザクションのみを選択可): トランザクション構造にある各項目属性と同じ名前とタイプのメンバーを挿入します。注: トランザクションの項目属性の説明を変更した場合、SDT 構造も変更されます (GeneXus 15 Upgrade 3 以降)。
SDT 構造のルートを選択して [ 挿入 ] メニューを使用した場合は、新しいメンバーが構造の一番下に追加されます。既存のメンバーを選択した場合は、新しいメンバーがそのメンバーのすぐ後ろに追加されます。
コレクションを右クリックすると、次のセカンダリーメニューが表示されます。
- 削除: コレクションを削除します。
- アイテムを上へ移動: SDT 構造内で、コレクションを上に移動します。
- アイテムを下へ移動: SDT 構造内で、コレクションを下に移動します。
- インデント: 選択したコレクションを、新しいコレクションの下に追加します。
- インデント解除: 選択したコレクションを、コンテナコレクションから削除します。
- メンバーを挿入: コレクションに新しいメンバーを挿入します。
- 並行サブ構造を挿入: SDT 構造の下にサブ構造を定義できます (上記の例では Customers の下)。
- プロパティ: [ プロパティ ] ウィンドウを表示します。
サブ構造を右クリックすると、コレクションメニューに非常に近いセカンダリーメニューが表示されます。
メンバーを右クリックすると、コレクションメニューに非常に近いセカンダリーメニューが表示されます。
1) 次の SDT があるとします:
次の XML を生成します:
Richard Smith
この場合、対応するプロパティに次の値を設定する必要があります:
- [ Id ] メンバーの [ XmlType ] プロパティ: attribute
- [ Name ] メンバーの [ XmlType ] プロパティ: value
2) 以下のような SDT を定義したとします:
このコレクションは、次のようにシリアル化できます:
<Country>
<Cities>
<CityName>Montevideo</CityName>
<CityName>Rocha</CityName>
...
</Cities>
</Country>
この場合、 [ Collection Serialization ] プロパティを Wrapped と指定する必要があります。
または:
<Country>
<CityName>Montevideo</CityName>
<CityName>Rocha</CityName>
...
</Country>
この場合、 [ Collection Serialization ] プロパティを Sequence と指定する必要があります。
SDT エディターで作業することで、次の画像に示すようにコレクションを定義することができます:
しかし、任意のデータタイプ (数値、文字、別の SDT データタイプ、BC など) に基づいてコレクションを定義することはできません。この状況を解決するには、コレクションドメインで作業する必要があります。あるいは次に示すように、対応するデータタイプに基づいて Collection 変数を定義することも可能です。
再帰 SDT SDT コレクションの実装
Compound data types
Loading Compound Data Types (SDT) using Data Providers
|