最近のアクセス:
データベースから情報を取得するコマンド

アプリケーションはすべて、プロシージャーを使用してデータベースから情報を取得する必要があり、プロシージャー (プロシージャーソース)、Web PanelWork PanelPanel for Smart DevicesイベントWork With for Smart Devices オブジェクトイベント、またはサブルーチン (プロシージャーコードが必要なすべての場所) を使用します。  
このため、GeneXus には For each コマンドが用意されています。このコマンドはデータベースからデータセットを取得するために使用します。プロシージャーで使用される場合には、データベースを読み込むだけでなく、更新することもできます。
For each コマンド内では、情報の取得元のトランザクションレベルおよび使用する項目属性の名前を指定して、読み取る情報 (Procedure オブジェクト内では書き込む情報も) を定義します。トランザクションレベルは、ベーストランザクションとも呼ばれます。 

顧客 (Customer) に関する情報の一部を表示するために、次のプロシージャーを設計します:
For each Customer
    Print Customers
Endfor
「Customer」は、トランザクションの名前です (トランザクションの第 1 レベルはトランザクション自体の名前になります)。「Customers」は、プロシージャーレイアウトで定義される次の printblock の名前です:
イメージ:6022.jpg
上図から、前述の For each コマンド (顧客データを表示する Print コマンド文を含む) では、データベースにある各顧客 (Customer) のコード、名前、および国 (Country) を表示することが目的であると推測できます。
For each コマンドを記述した場合は必ず、データベースから何らかの情報を取得することが目的となります。そのため GeneXus では、For each コマンドがあれば、1 つのテーブル内をナビゲートし、そのテーブルの各レコードに関連する情報に対して何らかの処理を行う (印刷など) ことが目的であると既定で判断します。

ベーステーブル

このため、すべての For each コマンドに対し、既定で物理テーブルが 1 つナビゲートされます。このテーブルは「For each ベーステーブル」と呼ばれます。このテーブルはベーストランザクションに関連付けられます。複数のベーストランザクションを使用する場合は特に注意が必要です。これについては後述します。
前述の例で、GeneXus によりナビゲート対象として判定される For each ベーステーブルは、CUSTOMER (Customer トランザクションに関連付けられているテーブル) です。各顧客の国は、COUNTRY テーブルから取得されます。
イメージ:24768.jpg
For each を定義する場合に、理解し考慮する必要がある重要な関連概念として、ベーステーブルの拡張テーブルがあります。

拡張テーブル

拡張テーブルの概念を理解すると、For each コマンドでベーステーブルがナビゲートされる一方で、そのベーステーブルの拡張テーブルに属するすべてのテーブルにアクセスして、必要な情報を取得できるということも分かります。上記の例でベーステーブルが CUSTOMER なのに、各顧客に関連する国を取得できるのは、このためです。COUNTRY テーブルが CUSTOMER の拡張テーブルに含まれているからです。
検索の開始ポイント (ベーストランザクション) を指定することができます。必須ではありませんが、指定することをお勧めします:
  • ベーストランザクションを指定すると、ベーステーブルが直接決定されます。For each コマンドコード内に記述されているすべての項目属性 (呼び出される printblock 内に記述されている項目属性を含む) は、対応する拡張テーブルに属している必要があります。項目属性が拡張テーブルに属していない場合は、ベーステーブルから拡張テーブル経由でアクセスできない項目属性ごとにインスタンスが生成されなかったことを示す警告が表示されます。
  • ベーストランザクションを指定しない場合、For each 内で定義されている項目属性 (呼び出される printblock 内に記述されている項目属性を含む) を考慮して、自動的に取得方法が決定されます。これは、すべての項目属性を含む最も拡張されていないテーブルを検出し、その拡張テーブルのベーステーブルが For each ベーステーブルに選択されるためです。取得先のテーブルやアクセスに使用するインデックスを定義する必要はありません。必要な項目属性を定義すると、自動的に取得方法が決定されます。
ベーストランザクションを指定すると、ユーザーが必要とする情報を GeneXus で簡単に把握し、迅速に処理を実行できます。ユーザーも処理の内容を把握し、管理を簡単に行うことができます。 







サブページ
Created: 15/01/07 22:49 by Admin Last update: 21/05/21 03:33 by Admin
カテゴリ
Powered by GXwiki 3.0