Skip to main content

 

アプリケーションの開発

 

モバイルアプリが対象
OutSystems

オフライン同期チェックリスト

OutSystemsでモバイルデバイスの同期を実装する際のチェックリストです。このチェックリストに従うと、モバイルデバイスとサーバーとの間の同期を格段に改善し、総合的なエクスペリエンスとしてパフォーマンス上の問題が起こらないことを保証できます。

パフォーマンス

以下の項目に従い、モバイルアプリが、エンドユーザーエクスペリエンスに悪影響を及ぼすようなパフォーマンスおよび使いやすさの問題を起こさないことを検証します。

ローカルエンティティがサーバーエンティティの軽量版として設計されているか。エンティティ関係が非正規化されているか
モバイルデバイスは、ネットワークリソースもサーバー並みの計算能力も持っておらず、効率的に扱うことができるのは少量のデータのみです。ローカルエンティティが、オフラインのビジネスロジックで必要なアトリビュートのみを保持していることを確認します。サーバーエンティティのアトリビュートのすべてを追加してはいけません。さらに、モバイルアプリケーションの現在のユーザーに関係あるレコードだけを更新します。
サーバーロジックにおいて、ロジックを単純にすると同時に返すデータセットが最小化されているか
アプリケーションは、同期を成功させるために最小限のデータ量を転送する必要があります。また、アプリケーションを動かすユーザーや条件を把握します。これは、タイムアウトのような最適設定を決定するうえで有効です。
TriggerOfflineDataSyncを呼び出して同期を開始しているか
手動で同期を開始する際に使用されるすべての要素が、同期をバックグラウンドで起動するTriggerOfflineDataSyncを呼び出すことが必要不可欠です。TriggerOfflineDataSyncは、非同期の同期、バックグラウンドタスクおよび同期イベントのトリガーのために最適化されています。フローの実行をブロックして同期イベントをトリガーする必要がない場合を除いて、同期を開始する際にOfflineDataSyncを呼び出してはいけません。また、定義した可能性のあるSync<LocalEntity>アクションも呼び出してはいけません。
同期プロセスを遅くするロジックはないか
Common/OfflineDataSyncEventsのようなブロックは編集する必要はありません。外部サービス、未処理の例外またはサーバーコールの不要な呼び出しを追加してはいけません。これにより、アプリが遅くなり、完全にフリーズすることもあります。
ネットワーク状態の変化に対応する必要がある場合、NetworkStatusChangedブロックを使用しているか
ネットワークの変化やオンライン状態を検出する際に、重くて複雑なJavaScriptを使用してはいけません。MobilePatterns/PrivateにあるNetworkStatusChangedブロックを使用します。また、アクションフローでネットワークをクエリするGetNetworkStatus()およびGetNetworkType()関数もあります。
更新を必要とするエンティティのみを同期する場合、OfflineDataSyncのSyncUnitを使用しているか
実行フローが分岐して必要なエンティティだけを同期できるように、文字列パラメータSyncUnitをOfflineDataSyncに渡す必要があります。

アプリケーション設計

保守しやすいモバイルアプリケーションを作成し、長期にわたって改善をもたらすうえで、以下の項目が有用です。

アプリ設計において、同期時に衝突を避けるような考慮がされているか
ローカルデータとサーバーデータとの間で絶対に衝突が起こらないように、アプリを改善できる場合があります。ユースケースにとって衝突が避けられないものかどうかを検討します。たとえば、ほとんどのニーズで「最後の書き込み優先」の原則が当てはまるかもしれませんし、あるいは、デバイスがオフラインのときには編集をロックするということも考えられます。
ビジネスロジックがデータ衝突を処理する必要がある場合、UXが衝突管理をサポートしているか
データ衝突がビジネスケースの一部である場合、UXの低下のためにユーザーデータが決して失われることがないように徹底すべきです。エンドユーザーは、選択したアクションの結果起こり得ることを十分に理解し、同期状態について通知を受ける必要があります。
同期されるすべてのローカルエンティティのアクションがOfflineDataSyncフォルダにあるか
同期されたローカルエンティティのロジックすべてをデフォルトのOfflineDataSyncアクションに配置する代わりに、各ローカルエンティティを同期するように個別のアクションを同一フォルダに作成する必要があります。これにより、同期ロジックが整理され、きめ細かく管理された方法で同期が実行できるようになります。
アプリが保留中の同期リクエストを必要に応じて消去しているか
TriggerOfflineDataSyncによって開始された同期は、実行されるまで待ち行列に入ります。高い優先順位で同期を実行する必要がある場合や、現在待ち行列に入っている同期を実行する必要がなくなったという場合もあります。同期待ち行列を空にするには、DiscardPendingSyncUnits入力を[True]に設定してTriggerOfflineDataSyncを呼び出します。

エンドユーザーエクスペリエンス

以下の項目に従い、ベストプラクティスに沿って強固なエンドユーザーエクスペリエンスを提供していることを検証します。

自動同期を設定しているか
ユーザーがログインしたとき、またはアプリがオンラインに戻ったときのような特定の条件での自動的なデータの同期をOfflineDataSyncConfigurationクライアントアクションに設定することが考えられます。
アプリがエンドユーザーに同期状態についてフィードバックしているか
エンドユーザーは、データの同期状態について把握している必要があります。ネットワークおよび同期状態の変化に対応するには、Screenイベントを使用し、UIを更新して現状についての視覚的フィードバックを提供します。たとえば、「同期しています...」、「同期が失敗しました...」、「オフラインです」などのメッセージを表示します。さらに、LayoutBlankブロックを使用して、エラーメッセージおよび再試行のオプションを表示することもできます。