2013年10月18日金曜日

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

Mascosのオフラインに関するプレゼンテーションの続きです。



高度なシナリオ
オフラインのユースケースの説明です。






完全オフラインアプリケーション
・サーバー接続無し
・プリロード:データ又はユーザー作成
 →同期ではなく予めアプリケーションにデータを含ませる
・例:個人向け金融アプリケーション










サービスベースのアプリケーション
・バックエンドなし(管理用Webアプリなし)
・外部サービスを利用
・ローカルデータを持つ又は持たない
・例) Find My Plane







同期のメカニズム



ここでは
・サーバー→デバイスへのデータの転送をReceive(受信)
・デバイス→サーバーへのデータの転送をSend(送信)
と定義しています。




オフラインデータベースオブジェクトに同期に関するプロパティがあります。
・Data Synchronization criteria
・Minimum time between synchronizations
・Data Synchronization Granularity
・Local changes processing



Receive(受信)
・Data Synchronization Criteria(データ同期の条件)プロパティ
 →Automatic(自動) / Manual(手動)
・Minimum time between synchronizations(自動時の同期間隔)プロパティ
・同期用API(手動用) : Synchronization.Receive()

・Data Synchronization Granularity(同期の粒度)プロパティ
 →By Row(レコード単位) / By Table(テーブル)

 By Table=テーブル単位はローカルテーブルを全レコード削除後、全レコードをサーバーからコピー


By Row=レコード単位はレコード単位で差をチェック、差分のみ同期する
・テーブルレベルでHashチェック
・もし違いがあればRowレベルでHashチェック
・もし違いがあればデータ同期


受信 : データのフィルタリング
・オフラインデータベースオブジェクトにコンディション定義
・ハッシュ計算の前にコンディションを適用(抽出されたデータのみ差違チェック)
・パラメーターに含められるもの
 ・デバイス情報
 ・GAMユーザー


送信:
・BCを使用
・SQLiteにて送信バッファ用テーブルを持つ



送信:タイミング
サーバーへの同期タイミングは2種類指定可能
・when connected (通信回線が接続された時 : auto)
・ユーザー定義 ( Synchronization.Send() : manual)



送信:キーマッピング
・自動生成キー(auto number)
・外部キーとして使用されていた場合
・サーバー側で値の変更
・レスポンスで更新




auto numberを使ったクライアント側プライマリーキーの同期の仕方(コンフリクトの避け方)
・クライアント側は仮の主キー(auto number)を発行
・サーバー側に送信された時(connectした時)、サーバー側でオリジナルのauto numberを発行
・外部キーとして使用されていた場合は、外部キー項目も更新
・正常更新後、クライアント側に発行されたキー値が戻されクライアント側のキーが更新される

・ローカルDBには即反映→サーバーへの操作(BCの操作)はキューイング
・サーバー側でキューの順序に従い、BCの操作を再現
・もし、ルールやRIでエラーが発生した場合は、クライアントへエラーが返る














送信:エラーハンドリング
・エラーレスポンス
・Synchronization Events API






0 件のコメント:

コメントを投稿