スマートデバイス用オフラインアプリケーションでは、Synchronization.Send() 操作がある場合、デバイスはローカルで実行されるいくつかのビジネスコンポーネント (BC) の操作のリストをサーバーに送信します。サーバーは、後でこれらの操作を主要なデータベースに適用します。
BC の操作が結果としてエラーになる場合には、いくつかの理由があります: たとえば、デバイスではビジネスルールは成功しているが、サーバーデータベースでは失敗する、参照整合性の問題などです。
デバイスから送信される操作のリストを処理する "OfflineEventReplicator" という名前のプロシージャーがあります。
このプロシージャーの記述は次のとおりです:
parm(in:&GxPendingEvents, in:&GxSyncroInfo, out:&EventResults);
入力値の説明
- &GxPendingEvents は、デバイスから送られるイベントです。
- &GxSyncroInfo は、同期処理に必要な追加情報が含まれています。
- &EventResults は、サーバーによって処理された各保留中のイベントの結果の集合です。
送信操作でエラーが発生するたびに、GeneXus 開発者はアプリケーションの動作を制御する必要があります。
すべてのアプリケーションのエラーを通知し、必要な操作をプログラマーに許可する OfflineEventReplicator プロシージャーから自動的に呼び出される 2 つのプロシージャーがあります。
これらのプロシージャーは、ナレッジベースのルートモジュール配下の GeneXus\SD\Synchronization フォルダ内にあります。KB でローカルに変更される可能性があるため、GeneXus モジュール内に存在しないことに注意してください。
このプロシージャーは BC 操作がエラーで終了するたびに呼び出されます。
このプロシージャーの記述は次のとおりです:
parm(in:&PendingEvent, in:&BCName, in:&BCJson, in:&EventResult, in:&GxSyncroInfo, out:&Continue);
入力値の説明
- &PendingEvent は GxSynchroEventSDT.GxSynchroEventSDTItem に基づいており、失敗したイベントに関する情報を含んでいます。
- &BCName は VarChar(128) であり、ビジネスコンポーネントの名前を含んでいます。
- &BCJSon は EventData に基づいており、失敗したイベントに関連するビジネスコンポーネントの JSON 表現を含んでいます。
- &EventResult は GxSynchroEventResultSDT.GxSynchroEventResultSDTItem に基づいており、失敗したイベントに関する本質を含んでいます (フィールド: EventStatus および EventErrors)。
- &GxSynchroInfo は OfflineEventReplicator プロシージャーから渡されます。
- &Continue は、OfflineEventReplicator プロシージャーが次の項目の処理を続けるべきか (True を返します) どうか、または同期を中止する必要があるかどうか (False を返します) を示すブール値です。
既定では、GeneXus の開発者がそれぞれの環境下で実行する操作を表示できるように、このプロシージャーは (&Continue が True に設定されている場合を除き) 空に設定されています。
このプロシージャーは、BC 操作を処理する前に OfflineEventReplicator によって呼び出されます。
記述は OfflineEventReplicator のものと同じです。
プロシージャーを変更するには、ログ情報を追加します。処理するイベントのリストを変更することもできますが、その場合は注意して行ってください。
警告: 以前のバージョンの GeneXus から移行した既存のナレッジベースの場合、このプロシージャーは <genexus_installation_directory>\Packages\Patterns\WorkWithDevices\Resources\SDApi.xml からインポートする必要があります。
このプロシージャーはすべてのビジネスコンポーネントの操作を処理した後で、すべての操作が問題なく完了したか、問題が発生したかを表示するために呼び出されます。&Continue が False で終了した GxOnPendingEventFailed プロシージャーを呼び出す場合であっても、このプロシージャーが呼び出されます。
このプロシージャーの記述は次のとおりです:
parm(in:&EventResults, in:&GxSyncroInfo);
入力値の説明
|