GX25 インターナショナルミーティングレポート - Dynamic Transaction : Salto

今回はサポートチームのGraciela Liston(グラシエラ・リストン)によるDynamic Transactionに関するセッションです。

トランザクションオブジェクトの進化形としてダイナミックトランザクションというものが追加されます。

GeneXusにおいてはトランザクションを定義するという事は、for eachコマンドやGridコントロール上で項目属性名の指定だけでデータベースにアクセス可能になりますが(GeneXusが項目属性から推論してテーブルやJOINを特定)、それを拡張してデータベーステーブルだけではない他のリソース(View、サービス、NoSQL、etc)もGeneXus開発者にとっては透過的にアクセスできるようにする。というコンセプトです。

全てのリソースにアクセス出来るような実装には時間が必要です、ダイナミックトランザクションというコンセプトはミドルタームの話、個別の実装はショートターム(例えば次期バージョン)での話。となります。





今回のセッションでは次期バージョンであるSaltoで実装予定のダイナミックトランザクションの機能紹介です。


[固定値]
 トランザクションオブジェクトのプロパティを
Data Provider = True
Execution Time = Creation Time
Update Policy = Read Only
と設定すると保存時にデータプロバイダーがトランザクションの配下に作成されます。データプロバイダーのソースとして(トランザクションのストラクチャーがそのままディフォルトで記述されていますので、データプロバイダーの書式でアウトプットデータを定義していくと、 データベース再編成時にデータプロバイダーに定義したデータがテーブルにロードされます。

Update PolicyがRead Onlyになっているため、トランザクションオブジェクトからは更新は出来ません。(リードオンリー)
但し、プロシージャーオブジェクトでnewコマンドやfor eachコマンドを使っての更新処理は可能です。(テーブルの定義としてガードが掛かっているわけではありません)




[初期データロード]
トランザクションオブジェクトのプロパティを
Data Provider = True
Execution Time = Creation Time
Update Policy = Updatable
と設定します。作り方は先の固定値と同じで、違いはトランザクションの実行時にデータの変更が行えます。従って、機能的には従来のトランザクションと同等で、DB再編成時の挙動が違うだけです。

DB再編成時のインパクトアナリシスレポート。テーブルデータの初期化プログラムが実行される旨がレポートされています。



[アクティブ]
トランザクションオブジェクトのプロパティを
Data Provider = True
Execution Time = On Demand
Update Policy = ReadOnly
と設定します。 この場合、リードオンリーのオンデマンドですので、物理的にはVIEWが作成されます。この機能によりGeneXus単体でもVIEWが作成・管理できるようになります。この例では既に定義済みのパーソントランザクションと体重記録トランザクションを使って、新たにアクティブパーソントランザクションを作成しています。

データプロバイダーではアウトプットデータをハードコードするのではなく、パーソントランザクションの項目属性を参照しています。抽出条件としては直近1ヶ月間で体重ログに記録がある人のみを対象としています。
DB再編成時のレポート。SQLステートメントが「Create View」になっています。


[ユニオン]
GeneXusでも遂にUNION SELECTが使えるようになります。まず最初に全くリレーションのない2つのトランザクションが定義してあります。ここではReceipt(領収書)とInvoice(請求書)があります。
それに対し、新たなトランザクションDocument(帳簿) を作成し、先ほどと同様にプロパティはリードオンリーでオンデマンドの設定をします。
違いはデータプロバイダーの記述。ソースの部分にReceiptとInvoiceの項目属性をそれぞれに定義します。これによりDB再編成時にUNION SELECTしたVIEWが作成されます。



[テンポラリー]
こちらもVIEWを作成します。例では指定日付を基準に価格履歴から該当する価格表を抽出するモデルです。
まず元となる(データを保持する) Product Change Priceトランザクションを定義します。


続いてProductPriceトランザクション(価格表ダイナミックトランザクション)を定義します。Parmルールで価格適用日付を受け取ります。





データプロバイダー側で価格履歴から指定日付に該当するレコードを抽出するMAX式による条件を記述します。
従来のMAXグローバル式は単項目の集約化抽出でしたが、こちらはレコードセットとして取り出せます。


[アグリゲーション(集約)]
先ほどの体重記録トランザクションから有効統計トランザクション(日ごとに体重を計測した人数を抽出)を作成します。

 データプロバイダーでは計測日でグルーピングし(Unique指定)、件数をカウントします。
利用例としてはPDFプロシージャーで、指定した期間での日ごとの体重記録者数を印刷します。



[イベント]
アップデート可能なモデルです。
ここではMeasureLogトランザクションが測定した全ての種類の記録を保持します。(例えば、身長、体重、BWH、など・・BodyMeasureIDがその区分です)



次にWeightLogトランザクションを
Data Provider = True
Execution Time = On Demand
Update Policy = Updatable
と設定します。
この場合、DB再編成ではWeightLog VIEWが作成され、これを参照するとMeasureLog に保存されているデータの中から体重に関するもののみが抽出されます

更新に関してはWeightLogトランザクションのイベントにMeasureLog BCを使った更新処理を記述する事により、WeightLogトランザクションから体重データの更新処理が行えます。(このイベントコードは自動生成されるのか、手動で記述する必要があるのかは、判りませんでした)






[注意]当レポートはウルグアイでのイベントの模様を報告するものです。情報としてはベータ版や将来予測も含まれており、リリース時と異なる事もあります。あらかじめご了承ください。

コメント

このブログの人気の投稿

データプロバイダーを使いこなそう - 応用編その4 スケジューラー 補足編

HTMLヘッダーにあれこれ直接追加したいとき

GeneXusにおけるWebアプリケーションセキュリティ対策 - OWASP 2010 Top10 Security Risks in GeneXus Applications