Lunatic Sol

IT Tips

ClearNetworkCache

2004-02-09 12:05:00 | LotusScript
Notes はロケーション文書に $Saved* というフィールド名で過去に接続したサーバーのネットワーク情報を保持しています。そして、その値をキャッシュとして使っています。

機能しているときは良いのですが、たとえばサーバーのネットワークアドレスが変わってしまった、などで接続ができなくなった場合、これらを全てクリアすることで解決できることがあります。ということで、今日はそのフィールドを全部 Remove してしまうスクリプトのサブルーチンです。

Where are Server Addresses Cached in Notes and Domino? に詳細が載っていますが、Notes クライアントの場合はロケーション文書に、Domino の場合はサーバー文書にこれらのデータは保持されています。

それぞれに対応できるように、NotesDocument オブジェクトを引数として受け取るサブルーチンにしてみました。Notes の場合はロケーション文書の NotesDocument オブジェクトを、Domino の場合はサーバー文書の NotesDocument オブジェクトを引数として渡してあげればいいわけです。

Sub ClearNetworkCache(doc As NotesDocument)
    '#### Network Cache Fields
    Dim nwCache(4) As String
    nwCache(0) = "$SavedAddresses"
    nwCache(1) = "$SavedDate"
    nwCache(2) = "$SavedPorts"
    nwCache(3) = "$SavedServers"
    nwCache(4) = "$SavedTriedDate"

    Dim isCleard As Integer
    isCleard = 0

    Dim i As Integer
    For i = 0 To Ubound(nwCache)
        If doc.HasItem(nwCache(i)) Then
            Call doc.RemoveItem(nwCache(i))
            isCleard = 1
        End If
    Next

    If isCleard = 1 Then
        Call doc.Save(True,True)
    End If
End Sub

たとえばこれを個人アドレス帳のエージェントとして登録する場合は、以下のようなコードをアクションメニューエージェント (トリガーはなし) として作成してあげれば、現在のロケーションのキャッシュをクリアできますね。

Sub Initialize
    Dim s As New NotesSession
    Dim aBook As NotesDatabase
    Dim locID As String
    Dim locDoc As NotesDocument

    Set aBook = GetLocalAddressBook(s)
    If Not aBook.IsOpen Then
        Call aBook.Open(aBook.Server,aBook.FilePath)
    End If

    locID = GetLocationID(s)
    Set locDoc = aBook.GetDocumentByID(locID)

    Call ClearNetworkCache(locDoc)
End Sub

尚、上記のコードでは GetLocalAddressBookGetLocationID を使っていますが、引数に NotesSession オブジェクトを渡す形にしています。なので、Function スコープ内の Dim s As New NotesSession はアポストロフィーでコメントアウトして、Function を GetLocalAddressBook(s As NotesSession) のようにして引数を受け取る形に改良してください。過去のサンプルではわかりやすくするため Function の中で NotesSession オブジェクトを Initialize していましたが、ここでは引数にしています。理由はまた別の機会で触れたいと思います。

最新の画像もっと見る