読み取り専用データ(最適化)
このデータの同期パターンは、アプリがオフラインの間にエンドユーザーにはデータの読み取りのみが必要で、同期すべきデータが大量にあるモバイルアプリに推奨されます。
- サーバーデータベースは、時間とともに変化する可能性のあるマスターデータを保持しています。
- 同期は、デバイスのローカルストレージで更新する必要のあるデータだけを転送するように最適化されています。
- デバイスで行われたデータの変更は、サーバーに伝達されません。
以下は、読み取り専用データ(最適化)パターンのロジックの概要です。
-
データを取得するために、サーバーを起動します。
-
データベースのデータを返します。
-
ローカルストレージのデータを削除し、サーバーから取得したデータで作成し直します。
読み取り専用データ(最適化)パターンのサンプルモジュールをダウンロードします。このサンプルモジュールでは、データの同期の例として複数の企業が使用されています。以下のセクションでは、サンプルモジュールで使用されているデータモデルおよびロジックについて詳細に説明しています。
データモデル
このサンプルでは、Company
データベースエンティティとそれに対応するLocalCompany
ローカルストレージエンティティを定義します。さらに、SyncProperties
ローカルストレージエンティティで最後の同期の日時を保持します。
- レコードが最後に更新または作成されたときにタイムスタンプを保存することにより、変更されたレコードを追跡します。
- 削除されたレコードを追跡します。
- 最後の同期のタイムスタンプ。このタイムスタンプは、クライアントとサーバーと間の時刻の相違による問題を避けるために、サーバー側で設定されることにご注意ください。
アプリケーションのロジックは、ModifiedOn
およびIsActive
エンティティアトリビュートを最新の状態に保つ必要があります。
OfflineDataSyncロジック
以下は、OfflineDataSync
クライアントアクションのロジックの説明です。
- 最後の同期のタイムスタンプを取得します。
ServerDataSync
サーバーアクションを呼び出し、最後の同期以降に変更されたデータをデータベースから取得します。サーバーは、変更または追加されたCompanyレコードのリスト、削除された(非アクティブ)Companyレコードのリストおよびこの同期のタイムスタンプを返します。- サーバーから返された変更または追加されたレコードのリストを使用し、ローカルストレージのCompanyレコードを更新します。
- サーバーから返された削除された(非アクティブ)Companyレコードのリストを繰り返し、ローカルストレージにある対応レコードを削除します。
- サーバーから返されたこの同期のタイムスタンプで
SyncProperties.LastSync
エンティティアトリビュートを更新します。
ServerDataSyncロジック
以下は、ServerDataSync
サーバーアクションのロジックの説明です。
-
この同期のタイムスタンプを出力パラメータに割り当てます。
-
最後の同期以降に変更または追加されたCompanyレコードのリストを取得します。Aggregateでは、以下のフィルタを使用します。
Company.IsActive = True and (Company.ModifiedOn = NullDate() or Company.ModifiedOn >= LastSync)
-
最後の同期以降に削除された(非アクティブ)Companyレコードすべてのリストを取得します。Aggregateでは、以下のフィルタを使用します。
Company.IsActive = False and (Company.ModifiedOn = NullDate() or Company.ModifiedOn >= LastSync)
-
タイムスタンプおよびCompanyレコードの2つのリストを、アクションの出力パラメータに割り当てます。