テスト結果の入力を可能にするアプリケーションがあります。アプリケーションは、ユーザーがオフライン時にデータを入力し、後でリモートデータベースに同期できるようにする必要があります。これを実現するために、MicrosoftSyncフレームワークが使用されます。
ただし、実行されるテストは、テストケースのリストやデバイスのリストなど、他の多くのデータベースに保存されているデータに依存しています。これらのリストは、アプリケーションを介して入力され、データベースに保存されます。これも同期フレームワークを使用して実行されます。
知っておく必要があるのは、必要なリストのデータがローカルにキャッシュされたデータベースに永続的に残り、アプリケーションがオフラインのときに取得できるようにすることです。うまくいけば、実行時に接続文字列を変更して、クエリがローカルデータベースに送信され、テストケースやデバイスなどを取得できるようにすることができます。
1つの解決策は、ユーザーがサイトを離れる前に同期して最新のデータを確実に取得することですが、これが常に可能であるとは限りません。
編集
同期が完了すると、ローカルデータベースがクリアされ、行われたすべての変更がリモートデータベースにプッシュされ、ローカルのキャッシュバージョンから削除/削除されたように見えます。アプリケーションをオフラインで開いた場合、ローカルバージョンはリモートデータベースから最新のデータをダウンロードできないため、最新のデータにアクセスする方法はありません。
Microsoft.Synchronization.Data.ChangesSelectedEventArgs
変更があるたびにイベントを使用してデータをローカルに保存しようとしましたが、持続しないようです。
Private Sub LocalDeviceCacheServerSyncProvider_ChangesSelected(ByVal sender As Object, ByVal e As Microsoft.Synchronization.Data.ChangesSelectedEventArgs)
If e.Context.DataSet.Tables.Contains("DeviceListTable") Then
Dim dataTable = e.Context.DataSet.Tables("DeviceListTable")
For j As Integer = 0 To dataTable.Rows.Count - 1
Dim row As DataRow = dataTable.Rows(j)
If row.RowState = DataRowState.Added Then
dataTable.Rows.Add(dataTable.Rows(j))
End If
Next
End If
End Sub
編集 問題は、リモートサーバー接続が利用できない場合、エラーがスローされず、datagridviewを埋めるコード行が実行されないことでした。これを回避するために、try catchが使用され、データグリッドを埋めるためのコードがtry/ctachステートメントの外部で実行されます。
Try
Dim syncAgent As LocalCacheSyncAgent = New LocalCacheSyncAgent()
Dim syncStats As Microsoft.Synchronization.Data.SyncStatistics = syncAgent.Synchronize()
Catch ex As Exception
MsgBox(ex.Message)
End Try
Me.ReferenceListTableTableAdapter.Fill(Me.EMSCalResourcesDataSet.ReferenceListTable)