Ultra Light.NET を使用した同期プログレス・バーの実装

アプリケーションを同期する際には、ステータス・プログレス・バーの表示が役立ちます。このドキュメントでは、VB.NET を使用して Ultra Light.NET アプリケーションにプログレス・バーを実装する方法について説明します。

事前要件

このドキュメントは、ユーザが以下について理解していることを前提としています。

  1. Visual Studio 2005
  2. .NET Framework 1.1 および 2.0
  3. Ultra Light および Mobile Link

目標

このドキュメントでは、既存の CustDB Sync ダイアログを修正して、プログレス・バーを追加する方法について説明します。このプログレス・バーによって、ユーザは同期の進捗状況に関するより詳細な情報を確認できます。以下の手順に従って、プログレス・バーを追加します。

  1. CustDB プロジェクトを Visual Studio 2005 にロード
  2. プログレス・バーをプロジェクトに追加
  3. プログレス・バーを実装するためのコードを追加
  4. Mobile Link を実行
  5. アプリケーションを導入
  6. 同期を実行

手順 1: CustDB ソリューションを Visual Studio 2005 にロード

  1. SQL Anywhere 10 サンプル・ディレクトリ内の CustDB サンプルへ移動します。デフォルトでは、このサンプルは ‘C:\Documents and Settings\All Users\Documents\SQL Anywhere 10\Samples\UltraLite.NET\CustDB\ce\vs8’ にインストールされています。
  2. ustDB.sln ファイルをロードします。

手順 2:プログレス・バーをプロジェクトに追加

  1. [ソリューションエクスプローラー] で、SyncProgressDialog.vb ファイルをダブルクリックします。

  2. ToolBox からステータス・バーをドラッグして、[status sync] ダイアログの下に配置します。以下のスクリーンショットを参照してください。

    例:

手順 3:プログレス・バーを実装するためのコードを追加

  1. ProgressBar に以下のプロパティを設定します。

    a. Name: progress
    b. Maximum: 100
    c. Minimum: 1
    d. Value: 1

  2. SyncProgressDialog.vb のコードを開き、以下の関数まで移動します。

    Public Overridable Function SyncProgressed(_)

  3. 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

  4. コードを追加します。アルゴリズムは、以下のとおりです。

    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 BooleanTells OnClosing to proceed

    Private _doDialog As BooleanTells ShowDialog to process events

    Private _inSync As BooleanUsed to interpret the Close button

    Private _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.TextBox

    Friend WithEvents progress As System.Windows.Forms.ProgressBar

    Private WithEvents _timer As System.Windows.Forms.Timer

    Private _percentage As Double ‘to support progressbar

  5. グローバル変数が作成された後、以下の太字の行を既存の 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

  6. プロジェクトを保存します。
  7. プロジェクトをビルドします。
  8. 構文エラーがある場合は、修正します。

注:この例では、進捗率を計算する必要のないケースが 3 つあります。

  1. ULSyncProgressState.STATE_CANCELLED
  2. ULSyncProgressState.STATE_SENDING_DATA
  3. ULSyncProgressState.STATE_RECEIVING_DATA

その最初のケースでは、ユーザが取り消し操作を実行した場合に計算を実行しません。残りの 2 ケースでは、テーブルごとに計算が実行されます。
たとえば、テーブルごとのデータが統合データベースに送信されると STATE_SENDING_DATA を実行します。統合データベースからテーブルごとのデータを受け取ると STATE_RECEIVING_DATA を実行します。これらのケースで計算を実行すると、プログレス・バーが前後に移動して数値も変動します。そのため、これらの 2 つのケースでは、バーが動かないように設定します。

手順 4: Mobile Link を実行

Mobile Link サーバを実行します。

  1. [スタート] . [プログラム] – [SQL Anywhere 10] – [MobileLink] – [MobileLink サーバーのサンプル] を選択しま
    す。
    Mobile Link サーバが起動し、新しい要求を待ちます。

手順 5:アプリケーションを導入

  1. Visual Studio で [F5] を押します。
    ソリューションを、エミュレータまたは物理デバイスに導入できます。
  2. アプリケーションを初めて導入すると、ユーザ ID の入力ダイアログが表示されます。デフォルト値である ID 50 を選択します。

手順 6:同期を実行

デフォルト画面で [OK] をクリックすると、アプリケーションは自動的に同期します。以下の手順に従って、手動で同期を開始することもできます。

  1. アプリケーションを実行しているデバイスまたはエミュレータで [File] をクリックします。
  2. [Synchronize] をクリックします。

以下の画面が表示されます。