前回、Postgresのストアドプロシージャを外部オブジェクトを使用して呼ぶ方法を記載しました。(前回の記事はこちら)
今回はユーザーコントロールを使用してストアドを呼ぶ方法を書こうと思います。
※ただし実装できるのはJava環境のみです。
こちらの方法は外部オブジェクトを使用して呼ぶ方法とは異なり、レコードセットの戻り値を受け取ることができます。
ただユーザーコントロールを使用するとはいえ、直接SQLを記述しますのでGeneXusのバージョンアップ等で動かなくなったり、動作が異なる場合もありますで実装は自己責任でお願いいたします。
ストアドの作成
まずは今回の検証用にレコードセットを返すストアドを作成します。
今回は簡単に1テーブルのデータをSelectして返すストアドを作りました。
内容は下記のような感じ。
shotrというテーブルにあるshoidとshonmを全件返すだけです。
CREATE OR REPLACE FUNCTION get_shotr()
RETURNS TABLE (
shoid smallint
,shonm varchar
)
AS
$$
BEGIN
RETURN QUERY
SELECT shotr.shoid, shotr.shonm FROM shotr;
END;
$$
LANGUAGE plpgsql;
ストアドの動作確認をします。
特に問題なく動作しました。
GeneXusではユーザーコントロールを使用してストアドを呼び、上記3件をSDTに格納して画面に表示しようと思います。
ユーザーコントロールのダウンロードとインポート
今回使用するユーザーコントロールは「EBQuery」というものになります
下記サイトからダウンロードが可能です(要GXアカウント)
EBQuery
ダウンロードしたファイルはxpz形式ですので、GeneXusでインポートを行います。
これで使用する準備ができました。
ユーザーコントロールの実装
インポートしたオブジェクトの一つ、「EBQueryTest」というWebPanelにEBQueryの実装サンプルがあります。
今回はこちらを改良して下記のようにしました。
(下記Eventsに加えWebLayoutにSDTを置きました)
これで実装完了です。
ポイントは11行目でストアドを呼ぶSQLを記載しているところと、18行目で実行結果をループさせているところです。
ループの中では各項目毎、項目名を記載し数値型項目は「getInt」、文字型は「getString」で値を取得します。
動作確認
実際に画面を動かしてみます。
SQLを実行した時と同様の値が取れてSDTに格納できてますね。
これでユーザーコントロールを使用してのストアド呼び出しは以上となります。
まとめ
2回に渡ってストアドプロシージャの呼び出しを書きましたが、ストアドを呼ぶというのはあくまでも最終手段であって、出来ることならGeneXus内で完結させるのが好ましいです。
またEBQueryはGeneXusユーザーの方が作られたもので、おそらく動作保証もないため自己責任でお願いいたします。