最近のアクセス:
SDT コレクションの実装

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

1. SDT をコレクションとして定義する

イメージ:32667.png
ClientsItem はコレクションの各アイテムを表す構造化データですが、独立した SDT としては存在しません。定義された SDT は Clients コレクションです。
Structured Data Type (SDT) オブジェクトを定義した後、(特定のオブジェクト内で) その SDT コレクションに基づく変数 (名前は &myClients) と、SDT コレクションの 1 つのアイテムに基づく変数 (名前は &eachClient) を定義する必要があります:
イメージ:32669.png イメージ:32670.png
これにより、たとえば以下のようにコレクションを反復処理することができます:
For &eachClient in &myClients 
     ...  //&eachClient を処理するコード
EndFor
[ Collection ] プロパティは、上の例の両方の変数で 'False' に設定されます。

2. コレクションでない SDT を定義する

イメージ:32671.png
この例では、SDT 構造は前の例とまったく同じように定義されていますが、 [ IsCollection ] チェックボックスは選択されていません。これは、SDT 定義がコレクションではなく、1 つのアイテムで構成されていることを意味します。では、このデータタイプのコレクションを定義するにはどうすればよいでしょうか。
それには、SDT データタイプに基づく変数 &myClients を定義し、それがコレクションであることを示します:
イメージ:32673.png 
そして、SDT に基づいて変数 &eachClient を定義します: 
イメージ:32672.png
コレクションを反復処理するために同じコードを定義できます:
For &eachClient in &myClients     
    ...  // &eachClient を処理するコード
EndFor
アイテム自体を定義しておく必要があるかどうかによって、コレクションを操作する方法は異なります。たとえば、Data Provider オブジェクトに返させる必要がある場合、[ Output ] プロパティでは Clients.Client を指定できないため、未定義の SDT となります。その場合、2 つ目のオプションを選択する必要があります。

両方の SDT を定義する場合

ここでは、前に説明した状況と同じく、同じナレッジベース内で Clients SDT および Client SDT を定義します。GeneXus は Clients.Client と Client を同じものと認識しない点に注意してください。

参考情報

再帰 SDT
構造化データ タイプ エディター
New 演算子 (SDT)

動画

イメージ:20668.png Loading Compound Data Types (SDT) using Data Providers
イメージ:20668.png Two ways of returning a collection using a Data Provider




サブページ
Created: 14/09/18 03:18 by Admin Last update: 24/11/04 20:38 by Admin
カテゴリ
Powered by GXwiki 3.0