GrapeCity JPAddress for .NET 2.0J
辞書ファイルの更新

重要

弊社では、2021年5月31日(月)をもちまして「JPAddress 辞書更新サービス(以下、辞書更新サービス)」を販売終了させていただくことになりました。有償サービスで提供している「手動更新」と「自動更新」につきましては、別途代替手段を提供いたします。詳しくは、弊社Webサイトの「JPAddress 辞書更新サービスの終了について」のページをご確認ください。

https://www.grapecity.co.jp/developer/inputman/jpaddress-dictionaryupdate/discontinued

JPAddressで使用する辞書ファイルの更新方法について説明します。
    

自動ダウンロードと手動ダウンロード
JPAddressでは、弊社の辞書更新サービスサーバーにアクセス、ログインして直接辞書ファイルをダウンロードする方法と、アプリケーションから更新用のメソッドを呼び出して自動で辞書ファイルを更新する方法の2種類の更新方法を提供しています。

辞書ファイルを更新する際には、手動、自動に関わらず「JPAddress 辞書更新サービス」のお申し込みが必要です。辞書更新サービスの詳細は「Web サイトJPAddress 辞書更新サービス」ページをご覧ください。

手動で辞書ファイルを更新する
手動で辞書ファイルを更新するには、辞書ファイルダウンロードURLにアクセスして認証IDでダウンロードページにログインし、圧縮された最新の辞書ファイルをダウンロードします。
辞書ファイルは3つの辞書と辞書ファイルの更新情報のファイルを圧縮したzipファイルで提供されます。このzipファイルをダウンロードして指定のフォルダに展開、配置します。

辞書ファイルダウンロードURLは、JPAddressのリリースノートおよび辞書更新サービスの証書に記載されています。

自動更新時に必要なプロキシの設定
自動更新を行うとき、必要に応じて
Proxyプロパティ(Windowsフォームアプリケーション)
Proxyプロパティ(Webアプリケーション)
Proxyプロパティ(WPFアプリケーション)
にプロキシを設定します。デフォルトでは次のコードで設定した場合と同様に現在のユーザーの Internet Explorer (IE) プロキシ設定と資格情報を使用します。
    GcJPAddress1.Proxy = System.Net.WebRequest.GetSystemWebProxy()
    GcJPAddress1.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials
    gcJPAddress1.Proxy = System.Net.WebRequest.GetSystemWebProxy();
    gcJPAddress1.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;

任意のプロキシや資格情報を使用したい場合には、下記のようにProxyプロパティを設定します。
    GcJPAddress1.Proxy = New System.Net.WebProxy("http://your-proxy-server:8080", True)
    GcJPAddress1.Proxy.Credentials = New System.Net.NetworkCredential("user", "password", "domain")
    gcJPAddress1.Proxy = new System.Net.WebProxy("http://your-proxy-server:8080", true);
    gcJPAddress1.Proxy.Credentials = new System.Net.NetworkCredential("user", "password", "domain");
タイムアウトの変更
JPAddressではダウンロード処理のタイムアウトが30秒に設定されています。タイムアウトの設定値は
Timeoutプロパティ(Windowsフォームアプリケーション)
Timeoutプロパティ(Webアプリケーション)
Timeoutプロパティ(WPFアプリケーション)
で変更可能です。
    ' タイムアウトまでの時間を10秒に変更します。
    GcJPAddress1.Timeout = 10000
    // タイムアウトまでの時間を10秒に変更します。
    gcJPAddress1.Timeout = 10000;
自動で辞書ファイルを更新する
辞書ファイルの更新には、同期処理で更新を行う
Updateメソッド(Windowsフォームアプリケーション)
Updateメソッド(Webアプリケーション)
Updateメソッド(WPFアプリケーション)
と、非同期処理で更新を行う
UpdateAsyncメソッド(Windowsフォームアプリケーション)
UpdateAsyncメソッド(Webアプリケーション)
UpdateAsyncメソッド(WPFアプリケーション)
の2種類が用意されています。

自動更新では、辞書ファイルは圧縮されたgzファイルでダウンロードされます。

自動更新で発生するエラーは、UpdateやUpdateAsyncメソッドからは取得できません。自動更新時のエラーはUpdateCompletedイベントで取得します。


辞書ファイルを更新するとき、デフォルトでは現在のファイルをバックアップします。配置先フォルダにGcJPAddressBackupフォルダを作成して辞書ファイルをgzファイルに圧縮してバックアップします。

    ' 辞書ファイルを更新します。
    ' 辞書の配置フォルダにGcJPAddressBackupフォルダが作成され、既存の辞書ファイルがバックアップされます。
    ' 「vwvyz」には認証IDを設定します。
    GcJPAddress1.Update("vwvyz")
    // 辞書ファイルを更新します。
    // 辞書の配置フォルダにGcJPAddressBackupフォルダが作成され、既存の辞書ファイルがバックアップされます。
    // 「vwvyz」には認証IDを設定します。
    gcJPAddress1.Update("vwvyz");

バックアップをしたくない場合には、Updateメソッドのオーバーロードを利用します。
    ' 辞書ファイルをバックアップなしで更新します。
    ' 「vwvyz」には認証IDを設定します。
    GcJPAddress1.Update("vwvyz", String.Empty, False, String.Empty)
    // 辞書ファイルをバックアップなしで更新します。
    // 「vwvyz」には認証IDを設定します。
    gcJPAddress1.Update("vwvyz", String.Empty, false, String.Empty);

また、バックアップするフォルダを個別に指定することも可能です。バックアップフォルダだけを指定して参照先のフォルダを変更したくない場合には、参照先にはString.Emptyを指定するとアプリケーション構成ファイルなどの設定が有効になります。
    ' 辞書ファイルを[D:\MyData\JPAddress]フォルダにバックアップして更新します。
    ' 「vwvyz」には認証IDを設定します。
    GcJPAddress1.Update("vwvyz", String.Empty, True, "D:\MyData\JPAddress")
    // 辞書ファイルを[D:\MyData\JPAddress]フォルダにバックアップして更新します。
    // 「vwvyz」には認証IDを設定します。
    gcJPAddress1.Update("vwvyz", String.Empty, true, "D:\\MyData\\JPAddress");

ダウンロード処理が開始されるとき
DownloadStartingイベント(Windowsフォームアプリケーション)
DownloadStartingイベント(Webアプリケーション)
DownloadStartingイベント(WPFアプリケーション)
が発生します。イベントデータからは、次の情報を取得することが可能です。
プロパティ 説明
Cancel 辞書ファイルの更新日付チェックの結果によって、イベントをキャンセルするかどうかを示す値。辞書更新サービスサーバーのファイルが現在の辞書ファイルよりも新しく更新が必要な場合は false、現在の辞書ファイルの方が同じか新しく更新が不要な場合は true。
CurrentDataBaseWriteTimeUtc 現在の辞書ファイルの更新日時を取得します。
DownloadFile ダウンロードする辞書ファイルの情報を取得します。ファイル名やサイズ、更新日付の情報が取得可能です。

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        ' DownloadStartingイベントを追加します。
        AddHandler GcJPAddress1.DownloadStarting, AddressOf GcJPAddress1_DownloadStarting
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        ' 実行フォルダにある辞書ファイルを更新します。
        GcJPAddress1.Update("vwvyz")
    End Sub

    Private Sub GcJPAddress1_DownloadStarting(sender As Object, e As GrapeCity.Win.JPAddress.DownloadStartingEventArgs)
        ' 現在のファイルが最新の場合は更新をキャンセルします。
        If e.Cancel Then
            MessageBox.Show("辞書ファイルは最新です。ダウンロードをキャンセルします。")
            Exit Sub
        End If
    End Sub
    private void Form1_Load(object sender, EventArgs e)
    {
        // DownloadStartingイベントを追加します。
        gcJPAddress1.DownloadStarting += gcJPAddress1_DownloadStarting;
    }

    private void button1_Click(object sender, System.EventArgs e)
    {
        // 実行フォルダにある辞書ファイルを更新します。
        gcJPAddress1.Update("vwvyz");
    }
    
    private void gcJPAddress1_DownloadStarting(object sender, GrapeCity.Win.JPAddress.DownloadStartingEventArgs e)
    {
        // 現在のファイルが最新の場合は更新をキャンセルします。
        if (e.Cancel)
        {
            MessageBox.Show("辞書ファイルは最新です。ダウンロードをキャンセルします。");
            return;
        }
    }

ダウンロード処理が完了したとき
UpdateCompletedイベント(Windowsフォームアプリケーション)
UpdateCompletedイベント(Webアプリケーション)
UpdateCompletedイベント(WPFアプリケーション)
が発生します。イベントデータからは、次のエラー情報を取得できます。
プロパティ 説明
Error 更新処理中に発生したエラーの情報を取得します。エラーが発生しなかった場合にはnull参照(Visual Basic では Nothing) です。

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        ' UpdateCompletedイベントを追加します。
        AddHandler GcJPAddress1.UpdateCompleted, AddressOf GcJPAddress1_UpdateCompleted
    End Sub

    Private Sub GcJPAddress1_UpdateCompleted(sender As Object, e As GrapeCity.Win.JPAddress.UpdateCompletedEventArgs)
        ' e.ErrorがNothingの場合は正常終了
        If e.Error Is Nothing Then
            MessageBox.Show("更新処理は正常に完了しました。")
        Else
            MessageBox.Show("更新処理でエラーが発生しました。" + e.Error.Message)
        End If
    End Sub
    private void Form1_Load(object sender, EventArgs e)
    {
        // UpdateCompletedイベントを追加します。
        gcJPAddress1.UpdateCompleted += gcJPAddress1_UpdateCompleted;
    }

    private void gcJPAddress1_UpdateCompleted(object sender, GrapeCity.Win.JPAddress.UpdateCompletedEventArgs e)
    {
        ' e.Errorがnullの場合は正常終了
        if (e.Error == null)
        {
            MessageBox.Show("更新処理は正常に完了しました。");
        }
        else
        {
            MessageBox.Show("更新処理でエラーが発生しました。" + e.Error.Message);
        }
    }

非同期で更新処理を行ったときには、上記2つのイベントに加えて2つのイベントが発生します。進行状況や受信情報の取得を行いたいときには、これらのイベントを利用する方法があります。
DownloadProgressChangedイベント/DownloadCompletedイベント(Windowsフォームアプリケーション)
DownloadProgressChangedイベント/DownloadCompletedイベント(Webアプリケーション)
DownloadProgressChangedイベント/DownloadCompletedイベント(WPFアプリケーション)

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        ' DownloadProgressChangedイベントを追加します。
        AddHandler GcJPAddress1.DownloadProgressChanged, AddressOf GcJPAddress1_DownloadProgressChanged
    End Sub

    Private Sub GcJPAddress1_DownloadProgressChanged(sender As Object, e As Net.DownloadProgressChangedEventArgs)
        ' 進捗情報の表示
        ListBox1.Items.Add("非同期ダウンロード" + e.ProgressPercentage.ToString() + "%完了")
    End Sub
    private void Form1_Load(object sender, EventArgs e)
    {
        // DownloadProgressChangedイベントを追加します。
        gcJPAddress1.DownloadProgressChanged += gcJPAddress1_DownloadProgressChanged;
    }

    private void gcJPAddress1_DownloadProgressChanged(object sender, System.Net.DownloadProgressChangedEventArgs e)
    {
        // 進捗情報の表示
        ListBox1.Items.Add("非同期ダウンロード" + e.ProgressPercentage.ToString() + "%完了");
    }
既存のファイルをバックアップする
Updateメソッドを実行するとき、既存のファイルをバックアップするかどうかを指定できます。既定では辞書の配置フォルダにGcJPAddressBackupフォルダを作成し、既存の辞書ファイルが圧縮されたgzファイルでバックアップされます。バックアップを行いたくない場合には、Updateメソッドのオーバーロードを利用します。
    ' バックアップをせずに辞書ファイルを更新します。
    ' 「vwvyz」には認証IDを設定します。
    GcJPAddress1.Update("vwvyz", "C:\ProgramData\GrapeCity\JPAddress", False, String.Empty)
    // バックアップをせずに辞書ファイルを更新します。
    // 「vwvyz」には認証IDを設定します。
    gcJPAddress1.Update("vwvyz", "C:\\ProgramData\\GrapeCity\\JPAddress", false, String.Empty);

作成されたバックアップファイルはロールバックなどの処理を行っても自動では削除されません。

バックアップファイルでロールバックする
更新のオプションで現在の辞書ファイルをバックアップしていた場合、
Rollbackメソッド(Windowsフォームアプリケーション)
Rollbackメソッド(Webアプリケーション)
Rollbackメソッド(WPFアプリケーション)
で辞書ファイルをロールバックすることが可能です。
なお、バックアップされるファイルはgzで圧縮されたファイルになります。ロールバックの際はgzファイルを指定します。

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button2.Click
        Dim Ofd As OpenFileDialog = New OpenFileDialog()
        If String.IsNullOrEmpty(Ofd.InitialDirectory) Then
            Ofd.InitialDirectory = Directory.GetCurrentDirectory()

        End If
        Ofd.Filter = "辞書ファイル書庫 (*.gz)|*.gz"
        Ofd.RestoreDirectory = True

        If Ofd.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
            Dim Result As DialogResult = MessageBox.Show("辞書ファイルをファイル" + Path.GetFileName(Ofd.FileName) + "でロールバックします。続行しますか?", _
                "ロールバックの確認", MessageBoxButtons.YesNo)
            If Result = DialogResult.Yes Then
                Try
                    MessageBox.Show("ロールバックを開始します。")
                    GcJPAddress1.Rollback(Ofd.FileName, String.Empty)
                    MessageBox.Show("ロールバックが完了しました。")
                Catch ex As Exception
                    MessageBox.Show(ex.Message)
                Finally
                End Try
            End If
        End If
    End Sub
    private void button1_Click(object sender, EventArgs e)
    {
        OpenFileDialog ofd = new OpenFileDialog();
        if (string.IsNullOrEmpty(ofd.InitialDirectory))
        {
            ofd.InitialDirectory = Directory.GetCurrentDirectory();
        }
        ofd.Filter = "辞書ファイル書庫 (*.gz)|*.gz";
        ofd.RestoreDirectory = true;

        if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            DialogResult result = MessageBox.Show("辞書ファイルをファイル" + Path.GetFileName(ofd.FileName) + "でロールバックします。続行しますか?",
                "ロールバックの確認", MessageBoxButtons.YesNo);

            if (result == DialogResult.Yes)
            {
                try
                {
                    MessageBox.Show("ロールバックを開始します。");
                    gcJPAddress1.Rollback(ofd.FileName, string.Empty);
                    MessageBox.Show("ロールバックが完了しました。");
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
                finally
                {
                }
            }
        }    
    }
参照

 

 


© 2012 GrapeCity inc. All rights reserved.