オフライン同期を実装する
OutSystemsには、モバイルアプリケーションとサーバーとの間でデータを同期するフレームワークが用意されています。このフレームワークは、OutSystemsのモバイルUIフレームワークアプリのテンプレートに用意されている一連のアクションおよびブロックから構成されています。これにより、ビジネスロジックを作成したり、同期をトリガーしたり、同期の結果やネットワーク状態の変化に対応したりできます。同期フレームワークは、サーバーデータモデルが、軽量ローカルエンティティデータモデルであることを前提としています。
この概要では、例として読み取り専用の同期の仕組みを使用していますが、このプロセスは他の同期パターンにも適用可能です。以下の例では、製品カタログがサーバーにあり、同期中にアプリがローカルの製品リストを更新します。
Add Entity from Databaseコマンドにより作成されたローカルエンティティについては、アクセラレータを使用できます。ロジックの一部は、そのようなローカルエンティティを右クリックし、Create Action to Sync Dataコマンドの1つを選択することにより、自動的に生成できます。
1. クライアントとサーバー両方のロジックを作成する
個々のエンティティのレコードを更新するためのビジネスロジックは、クライアントのOfflineDataSyncフォルダに実装されます。データの同期のためのクライアントとサーバーのロジックの複雑さは、ビジネスニーズおよび実装によって異なります。以下に、共通する実装の手順を示します。
- 同期中にローカルエンティティを更新するアクションを_Logic > Client Actions > OfflineDataSync_フォルダに作成します。
- サーバーからデータを取得し、サーバー上で更新を行うアクションを_Logic > Server Actions > OfflineDataSync_フォルダに作成します。
- サーバーとクライアントのアクションの間で同期データをやりとりします。
この例では、クライアントのSyncProductsアクションのロジックは、サーバーから受け取った新しいデータを持つローカルエンティティを介してローカルデータを更新します。ここで、このロジックをフレームワークに組み込み、バックグラウンドで実行させる準備をします。
2. ローカルエンティティアクションをOfflineDataSyncアクションに配置します。
ローカルストレージと遠隔ストレージを更新するアクションは、_Logic > Client Actions > OfflineDataSync_フォルダにあるOfflineDataSyncアクションのフローの中に配置する必要があります。これにより、他のアプリのプロセスの実行に影響を与えることなく、バックグラウンドで同期を実行させることが可能になります。
この例では、アクションはSyncProductsのみであり、要求されているように、OfflineDataSyncフローの中に配置されています。これで、同期の手動スタートを設定する準備ができました。
3. 同期の手動スタートを設定する
手動による同期は、_Logic > Client Actions > OfflineDataSync_フォルダにあるTriggerOfflineDataSyncで開始する必要があります。フローの同期を開始すべき場所に、TriggerOfflineDataSyncを配置します。OfflineDataSyncを直接フローに配置して同期を開始してはいけません。これは、同期がバックグラウンドで実行されず、UIがフリーズする原因になることがあるためです。
SyncOnClickという名前のアクションを呼び出すボタンを作成し、このアクションのフローに、TriggerOfflineDataSyncをドラッグ&ドロップしました。更新ロジックが期待どおりに機能することを確認したため、ここで同期の自動スタートを設定します。
4. 同期の自動スタートを設定する
[Logic > Client Actions > OfflineDataSync]からOfflineDataSyncConfigurationアクションを開き、同期が自動的に行われるべき条件すべてについて、フローの変数を「True」に設定します。
この例では、条件に関係なく同期を自動的に開始しないことに決めたため、すべての値を「False」に設定します。
同期ロジックのフロー
以下に、同期の実行段階のフローを示します。実際の同期ロジックを作成した手順とは対応していないことにご注意ください。
- 第1段階
- OfflineDataSyncがバックグラウンドで、ローカルストレージを更新するアクションを実行します。このアクションは、TriggerOfflineDataSyncアクションによって手動で開始したり、またはOfflineDataSyncConfigurationアクションに設定されたイベントによって自動的に開始したりできます。
- 第2段階
- OfflineDataSyncによって開始されたアクションは、ローカルで変更されたレコードを集めてサーバーに送ります。
- 第3段階
- サーバーが、リクエストを処理して更新済みデータを返します。
- 第4段階
- OfflineDataSyncのアクションが、サーバーから受け取ったデータでローカルストレージを更新します。