最近のアクセス:
例: データプロバイダーのブレーク

Data Provider グループの中には、情報を取得するためにデータベースにアクセスし、出力にいくつかのエントリーを生成するものがあります。GeneXus はこれを For Each で行うのと同様の方法で推測します。
一般的なブレークの例を見てみましょう。システム内の顧客 (Customer) を国 (Country) 別にレポートする必要があるとします。たとえば、次の構造を持つ Country と Customer トランザクションがあるとします:
Country                     Customer

CountryId*                  CustomerId*
CountryName                 CustomerName
                            CountryId
                            CountryName
                            CustomerAddress
                            ...
出力に関わらず、構造化されていないと仮定した場合、国別にグループ化された顧客をすべて取り出すために使用するプロシージャーのソースは次のようになります:
for each order CountryName
         defined by CustomerName
    Id = CountryId
    Name = CountryName
    for each
        CustomerId = CustomerId
        CustomerName = CustomerName
    endfor
endfor
これがブレークです。
次に出力が構造化されている場合を考えます。このとき、出力として SDT が必要となり、構造は次のようになります:
イメージ:6045.jpg
SDT 内に情報を挿入するには、Countries の SDT の &countries 変数、Countries.Country の SDT の &country 変数、および Countries.Country.Customer の SDT の &customer を宣言して前のプロシージャーのソースを変更する必要があります。
for each order CountryName
         defined by CustomerName
    &country.Id = CountryId
    &country.Name = CountryName
    for each
        &customer.Id = CustomerId
        &customer.CustomerName = CustomerName
        &country.Customers.Add( &customer )
        &customer = new Countries.Country.Customer()
    endfor
    &countries.Add( &country )
    &country = new Countries.Country()
endfor
次のデータプロバイダーのソースを宣言した場合を見てみましょう。
イメージ:6046.jpg
最も深いグループを省略した場合はどうでしょうか (結果はまったく同じです)。
イメージ:6047.jpg
より簡単になりました。
Country グループは、CUSTOMER ベーステーブルの For Each とよく似ており (Defined by があります)、Customers グループは CUSTOMER ベーステーブルの For Each によく似ている、つまりブレークが実装されていることに注意してください。ナビゲーションレポートは、プロシージャーのコードのものとまったく同じになります。また、CustomerName エレメントが割り当てられていないことにも注意してください。これは、項目属性名が正確に同じだからです。詳しくは次を参照してください: データプロバイダーの言語: エレメント







サブページ
Created: 14/09/18 03:18 by Admin Last update: 21/05/20 06:19 by Admin
カテゴリ
Powered by GXwiki 3.0