2013年10月17日木曜日

GeneXusミーティングレポート 2日目その3:オフライン - GX23

オフラインのセッションが続きます。

スピーカーは開発チームのMarcos Crispino です。ブログも書いていますが、技術的には結構ディープな奴です。








オフラインデータベースオブジェクト。メインオブジェクトのをOfflineに設定すると生成されます。データ同期に関する定義を行います。






オフラインデータベースオブジェクトに記述できるものとして、まずはコンディション。
グローバルコンディションで同期時の条件指定ができます(サーバーデータベース→ローカルデータベース)


スタートイベント。
この例では、For eachコマンドでDeviceIdからSalesAreaIdを取得しています。ここで取得したSalesAreaIdがコンディション側で参照されます。


ナビゲーション結果。この例ではベーステーブルが3つ。
・PurchaseOrderDetail
・Product
・SalesArea
それぞれグローバルコンディションでの指定が適用されています。(Productは該当する項目属性がないので条件なし)




ローカルデータベースの作成
・(データベース作成)プログラムの生成
・デバイス上で実行
・最初にアプリを実行したタイミングで作成
・データのプリロードオプション
ローカルデータベースに関しては、GeneXusのビルド時にはDB作成ができないので、アプリケーションに付属する形でDB作成プログラムが生成され、デバイス上で実行される


















ローカルデータベース
・SQLiteを使用
・トランザクションの整合性サポート
→複数テーブルへの(=複数画面での)更新を1トランザクションとして処理する
・トランザクションのブロッキング
→サーバーへの更新は一旦デバイス上でBCをブロッキング(キューイング)し、その後サーバーへ送信され順次BCが実行される。送信のタイミングはLoad changes proccessingプロパティで指定( When connected / User defined )





コード生成
Evolution2で生成されるオンラインスマートデバイスアプリケーションは生成されたコード(ネイティブなソースコード)は無く、生成されたメタデータをフレームワークがインタプリタ実行していた。しかし、ローカルデータベースを持つことによりネイティブコード生成が必要になってくる。













オンライン vs オフライン(の違い)
・Startイベント、Refresh、Load
→オンラインではサーバー側での実行だったが、オフラインではデバイス側での実行
・ユーザーイベント
→サーバー側のオブジェクトを呼び出す必要がなければデバイス側で実行
・プロシージャとデータプロバイダ
・ビジネスコンポーネント
→ローカルデータベースにアクセスするプロシージャ、データプロバイダ、ビジネスコンポーネントはデバイス側で実行(ローカル用のオブジェクトが生成される)




デバイス上で実行
・データアクセス(for each、new)
・制御構造(if、while、etc..)
・操作
・関数


GAM(セキュリティ)
・サーバーでの資格
・オンラインのみのログインオプション
・オフラインでの認証
・オフラインでのユーザー検索
・認証のみ











0 件のコメント:

コメントを投稿