【GeneXus】データプロバイダー

たまたま使ってマジで忘れてた

参考リンク


参考
データプロバイダーのグループステートメントwiki.genexus.jp

概要

とりあえずDBからデータとってきてくれるオブジェクト。

嫌いなところ

ErrorHandler が書けない。(もしかしたら書き方がある?)

良いところ

別にテーブルをSELECTするだけじゃなくて、固定値をデータプロバイダーから取得するのもあり。

DBとかSDTとかとか

プロパティ

プロシージャと違って、Outはプロパティで設定します。

Attと同じ名前

セットする構造体(SDTやBC)の項目がAttと同じ名前の場合イコールを使わないで
Att名を書くだけでOK。

複数件返却(outをコレクションにする)

検索条件(Where)

SDT_Transaction1
Where Transaction1_Id = 2
{	Transaction1_Id	Transaction1_Name
}

ベーストランザクション(From)

SDT_Transaction1
From Transaction1
Where Transaction1_Id = 2
{	Transaction1_Id	Transaction1_Name
}

並び(Order)

SDT_Transaction1
Order Transaction1_Id
Where Transaction1_Id = 2
{	Transaction1_Id	Transaction1_Name
}

レコードが無い場合(Default)

SDT_Transaction1
Where Transaction1_Id = 999
{	Transaction1_Id	Transaction1_Name
}
SDT_Transaction1[Default]
{	Transaction1_Id = 0	Transaction1_Name = "NONE"
}

出力件数(Count)

SDT_Transaction1 [Count = 20]
Order Transaction1_Id
{	Transaction1_Id	Transaction1_Name
}

スキップ(Skip)

SDT_Transaction1 [Skip = 50]
Order Transaction1_Id
{	Transaction1_Id	Transaction1_Name
}

最初のレコード(One)

SDT_Transaction1 [One]
Order Transaction1_Id
{	Transaction1_Id	Transaction1_Name
}

NoOutput

子テーブルのレコードを取得し、階層を付けないで取得したい場合に便利。
SDTを編集

SDT_Transaction1
Order Transaction1_Id
{	Transaction1_Id	Transaction1_Name	SDT_Transaction2 [NoOutput]	Where Transaction2_Id = Transaction1_Id	{	Transaction2_Id	Transaction2_Name	}
}

OutputIfDetail

明細レコードがある場合だけ、返却値(SDT)に追加します。
SDTを編集

SDT_Transaction1 [OutputIfDetail]
Order (Transaction1_Name)
{	Transaction1_Id	Transaction1_Name	Level1	Where Transaction2_Id = Transaction1_Id	{	Transaction2_Id	Transaction2_Name	}
}

この場合Transaction1のデータに対応するTransaction2のデータが存在する場合だけSDTにレコードが追加されます。

まとめ

書いたら意外と長くてアップするのが夜になったわw
まだいろいろあるから追記していく予定。

以上です。

1 COMMENT

上戸

いつもありがとうございます、とても勉強になりました。データプロバイダーについては、私のプロジェクトではとりあえず利用禁止にしています(笑)。文法が特殊(ちょっと変では?)のと、ErrorHandlerとSubが使えない、多重IFやCase Whenが使えない、少しでも仕様変更が発生されると大きく書き換えるなど、プロシージャと比べるとデメリットが多すぎです。唯一のメリッドと言えば、コーディング量が少ないことですが、プロシージャと比べて数分間程度しか削減できないので無視できる程度だと思いますね。

返信する

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください