構造化データタイプ (SDT) のコレクションを取り扱う方法には、少なくとも次の 2 つがあります:
- SDT オブジェクトをコレクションとして定義し、その SDT に基づいて (特定のオブジェクト内で) 変数を定義する。
- コレクションでない SDT オブジェクトを定義し、その SDT に基づいて (特定のオブジェクト内で) 変数を定義し、変数をコレクションとして設定する。

ClientsItem はコレクションの各アイテムを表す構造化データですが、独立した SDT としては存在しません。定義された SDT は Clients コレクションです。
Structured Data Type (SDT) オブジェクトを定義した後、(特定のオブジェクト内で) その SDT コレクションに基づく変数 (名前は &myClients) と、SDT コレクションの 1 つのアイテムに基づく変数 (名前は &eachClient) を定義する必要があります:

これにより、たとえば以下のようにコレクションを反復処理することができます:
For &eachClient in &myClients
... //&eachClient を処理するコード
EndFor
[ Collection ] プロパティは、上の例の両方の変数で 'False' に設定されます。

この例では、SDT 構造は前の例とまったく同じように定義されていますが、 [ IsCollection ] チェックボックスは選択されていません。これは、SDT 定義がコレクションではなく、1 つのアイテムで構成されていることを意味します。では、このデータタイプのコレクションを定義するにはどうすればよいでしょうか。
それには、SDT データタイプに基づく変数 &myClients を定義し、それがコレクションであることを示します:
そして、SDT に基づいて変数 &eachClient を定義します:

コレクションを反復処理するために同じコードを定義できます:
For &eachClient in &myClients
... // &eachClient を処理するコード
EndFor
アイテム自体を定義しておく必要があるかどうかによって、コレクションを操作する方法は異なります。たとえば、
Data Provider オブジェクトに返させる必要がある場合、
[ Output ] プロパティでは
Clients.Client を指定できないため、未定義の SDT となります。その場合、2 つ目のオプションを選択する必要があります。
ここでは、前に説明した状況と同じく、同じナレッジベース内で Clients SDT および Client SDT を定義します。GeneXus は Clients.Client と Client を同じものと認識しない点に注意してください。
再帰 SDT
構造化データ タイプ エディター
New 演算子 (SDT)
Loading Compound Data Types (SDT) using Data Providers
Two ways of returning a collection using a Data Provider