Ultra Light.NET を使用した同期プログレス・バーの実装
アプリケーションを同期する際には、ステータス・プログレス・バーの表示が役立ちます。このドキュメントでは、VB.NET を使用して Ultra Light.NET アプリケーションにプログレス・バーを実装する方法について説明します。
事前要件
このドキュメントは、ユーザが以下について理解していることを前提としています。
- Visual Studio 2005
- .NET Framework 1.1 および 2.0
- Ultra Light および Mobile Link
目標
このドキュメントでは、既存の CustDB Sync ダイアログを修正して、プログレス・バーを追加する方法について説明します。このプログレス・バーによって、ユーザは同期の進捗状況に関するより詳細な情報を確認できます。以下の手順に従って、プログレス・バーを追加します。
- CustDB プロジェクトを Visual Studio 2005 にロード
- プログレス・バーをプロジェクトに追加
- プログレス・バーを実装するためのコードを追加
- Mobile Link を実行
- アプリケーションを導入
- 同期を実行
手順 1: CustDB ソリューションを Visual Studio 2005 にロード
- SQL Anywhere 10 サンプル・ディレクトリ内の CustDB サンプルへ移動します。デフォルトでは、このサンプルは ‘C:\Documents and Settings\All Users\Documents\SQL Anywhere 10\Samples\UltraLite.NET\CustDB\ce\vs8’ にインストールされています。
- ustDB.sln ファイルをロードします。
手順 2:プログレス・バーをプロジェクトに追加
- [ソリューションエクスプローラー] で、SyncProgressDialog.vb ファイルをダブルクリックします。
- ToolBox からステータス・バーをドラッグして、[status sync] ダイアログの下に配置します。以下のスクリーンショットを参照してください。
例:
手順 3:プログレス・バーを実装するためのコードを追加
- ProgressBar に以下のプロパティを設定します。
a. Name: progress
b. Maximum: 100
c. Minimum: 1
d. Value: 1 - SyncProgressDialog.vb のコードを開き、以下の関数まで移動します。
Public Overridable Function SyncProgressed(_)
- Select Case の順序が以下のように設定されていることを確認してください。プログレス・バーを正しく動作させるためには、この順序が非常に重要となります。
Select Case data.State
Case ULSyncProgressState.STATE_STARTING
:
:
CaseULSyncProgressState.STATE_CANCELLED
:
:
Case ULSyncProgressState.STATE_CONNECTING
:
:
Case ULSyncProgressState.STATE_SENDING_HEADER
:
Case ULSyncProgressState.STATE_SENDING_TABLE
:
:
Case ULSyncProgressState.STATE_SENDING_DATA
:
:
Case ULSyncProgressState.STATE_FINISHING_UPLOAD
:
:
Case ULSyncProgressState.STATE_RECEIVING_UPLOAD_ACK
:
:
Case ULSyncProgressState.STATE_RECEIVING_TABLE
:
:
Case ULSyncProgressState.STATE_RECEIVING_DATA
:
:
Case ULSyncProgressState.STATE_COMMITTING_DOWNLOAD
:
:
Case ULSyncProgressState.STATE_SENDING_DOWNLOAD_ACK
:
:
Case ULSyncProgressState.STATE_DISCONNECTING
:
:
Case ULSyncProgressState.STATE_DONE
:
:
Case ULSyncProgressState.STATE_ERROR
:
:
End Select - コードを追加します。アルゴリズムは、以下のとおりです。
a. プログレス・バーを進める必要のあるケース数を判断します。この例では、バーを進める必要があるケースが 11 ケース、バーを動かさないケースが 3 ケースあります。最初のケースから開始して、1 ずつ増分させ、ケース総数で割ります。たとえば、Case Case ULSyncProgressState.STATE_STARTING では 1/11 であり、2 番目のケース Case
ULSyncProgressState.STATE_CANCELLED ではプログレス・バーは進まず、Case
ULSyncProgressState.STATE_CONNECTING では 2/11 となり、以降も同様に続きます。b. グローバル変数 (この例では、_percentage) を作成します。たとえば、Private _percentage As Double です。
この変数は、変数を宣言する以下のセクションで作成できます。Private _allowClose As Boolean ‘ Tells OnClosing to proceed
Private _doDialog As Boolean ‘ Tells ShowDialog to process events
Private _inSync As Boolean ‘ Used to interpret the Close buttonPrivate _syncCancelled As Boolean
Private _dismiss As Boolean
Private _conn As ULConnection
Private _resources As ResourceManager
Private _syncSQLCode As ULSQLCode
Private _cancelString As String
Private _dismissString As String
Private WithEvents _cancelAs System.Windows.Forms.Button
Private _sentLabel As System.Windows.Forms.Label
Private _recLabel As System.Windows.Forms.Label
Private _insertLabel As System.Windows.Forms.Label
Private _updateLabel As System.Windows.Forms.Label
Private _deleteLabel As System.Windows.Forms.Label
Private _bytesLabel As System.Windows.Forms.Label
Private _insertsSent As System.Windows.Forms.Label
Private _updatesSent As System.Windows.Forms.Label
Private _deletesSent As System.Windows.Forms.Label
Private _bytesSent As System.Windows.Forms.Label
Private _insertsRec As System.Windows.Forms.Label
Private _updatesRec As System.Windows.Forms.Label
Private _deletesRec As System.Windows.Forms.Label
Private _bytesRec As System.Windows.Forms.Label
Private _message As System.Windows.Forms.TextBoxFriend WithEvents progress As System.Windows.Forms.ProgressBar
Private WithEvents _timer As System.Windows.Forms.Timer
Private _percentage As Double ‘to support progressbar
- グローバル変数が作成された後、以下の太字の行を既存の select case コードに追加します。
Select Case data.State
Case ULSyncProgressState.STATE_STARTING
_percentage = (1 / 11)
Case ULSyncProgressState.STATE_CANCELLED
msg = GetMessage(data)
Case ULSyncProgressState.STATE_CONNECTING
msg = GetMessage(data)
_percentage = (2 / 11)
Case ULSyncProgressState.STATE_SENDING_HEADER
msg = GetMessage(data)
_percentage = (3 / 11)
Case ULSyncProgressState.STATE_SENDING_TABLE
msg = GetMessage(data)
_percentage = (4 / 11)
Case ULSyncProgressState.STATE_SENDING_DATA
_insertsSent.Text = data.SentInserts.ToString()
_updatesSent.Text = data.SentUpdates.ToString()
_deletesSent.Text = data.SentDeletes.ToString()
Case ULSyncProgressState.STATE_FINISHING_UPLOAD
_insertsSent.Text = data.SentInserts.ToString()
_updatesSent.Text = data.SentUpdates.ToString()
_deletesSent.Text = data.SentDeletes.ToString()
_percentage = (5 / 11)
Case ULSyncProgressState.STATE_RECEIVING_UPLOAD_ACK
msg = GetMessage(data)
_percentage = (6 / 11)
Case ULSyncProgressState.STATE_RECEIVING_TABLE
msg = GetMessage(data)
_percentage = (7 / 11)
Case ULSyncProgressState.STATE_RECEIVING_DATA
_insertsRec.Text = data.ReceivedInserts.ToString()
_updatesRec.Text = data.ReceivedUpdates.ToString()
_deletesRec.Text = data.ReceivedDeletes.ToString()
Case ULSyncProgressState.STATE_COMMITTING_DOWNLOAD
_insertsRec.Text = data.ReceivedInserts.ToString()
_updatesRec.Text = data.ReceivedUpdates.ToString()
_deletesRec.Text = data.ReceivedDeletes.ToString()
_percentage = (8 / 11)
Case ULSyncProgressState.STATE_SENDING_DOWNLOAD_ACK
msg = GetMessage(data)
_percentage = (9 / 11)
Case ULSyncProgressState.STATE_DISCONNECTING
msg = GetMessage(data)
_percentage = (10 / 11)
Case ULSyncProgressState.STATE_DONE
msg = GetMessage(data)
_percentage = (11 / 11)
Case ULSyncProgressState.STATE_ERROR
msg = GetErrorMessage(data.SQLCode, data.ErrorMessage, data.SyncResult.UploadOK)
‘ Change Cancel button to dismiss
_cancel.Text = _dismissString
_dismiss = True
End Select
If Not msg Is Nothing Then
_message.Text = msg
End If
If data.State <> ULSyncProgressState.STATE_LAST Then
_bytesSent.Text = data.SentBytes.ToString()
_bytesRec.Text = data.ReceivedBytes.ToString()
End If
Application.DoEvents()‘ Update the progress bar value
progress.Value = CInt(100 * (_percentage))
Return _syncCancelled
- プロジェクトを保存します。
- プロジェクトをビルドします。
- 構文エラーがある場合は、修正します。
注:この例では、進捗率を計算する必要のないケースが 3 つあります。
- ULSyncProgressState.STATE_CANCELLED
- ULSyncProgressState.STATE_SENDING_DATA
- ULSyncProgressState.STATE_RECEIVING_DATA
その最初のケースでは、ユーザが取り消し操作を実行した場合に計算を実行しません。残りの 2 ケースでは、テーブルごとに計算が実行されます。
たとえば、テーブルごとのデータが統合データベースに送信されると STATE_SENDING_DATA を実行します。統合データベースからテーブルごとのデータを受け取ると STATE_RECEIVING_DATA を実行します。これらのケースで計算を実行すると、プログレス・バーが前後に移動して数値も変動します。そのため、これらの 2 つのケースでは、バーが動かないように設定します。
手順 4: Mobile Link を実行
Mobile Link サーバを実行します。
- [スタート] . [プログラム] – [SQL Anywhere 10] – [MobileLink] – [MobileLink サーバーのサンプル] を選択しま
す。
Mobile Link サーバが起動し、新しい要求を待ちます。
手順 5:アプリケーションを導入
- Visual Studio で [F5] を押します。
ソリューションを、エミュレータまたは物理デバイスに導入できます。 - アプリケーションを初めて導入すると、ユーザ ID の入力ダイアログが表示されます。デフォルト値である ID 50 を選択します。
手順 6:同期を実行
デフォルト画面で [OK] をクリックすると、アプリケーションは自動的に同期します。以下の手順に従って、手動で同期を開始することもできます。
- アプリケーションを実行しているデバイスまたはエミュレータで [File] をクリックします。
- [Synchronize] をクリックします。
以下の画面が表示されます。