2010年1月12日火曜日

未知のドメインのサーバーへの初回アクセスで「検索するサーバーの選択」画面を表示させない方法

クライアント上でアプリケーション・リンクをクリックするなどして、これまでに接続したことのないドメインのサーバーにあるアプリケーションへアクセスさせようとした時、「検索するサーバーの選択」というタイトルの画面が表示される場合があります。

当然その画面にあるサーバーリストには未知のドメインのサーバーなどあるはずもない。

Notesの名前解決では、DNSやhostsファイルと連携した名前解決はしないのです...orz

※ここではIPネットワーク的な接続はできていて、相互認証があり、サーバーやアプリケーションへのアクセス権もあります

こんなとき、Notes上で Ctrl + O をタイプして「データベースを開く」画面を開き、サーバー入力欄へIPアドレスをタイプしてもらうのも手です。
しかしながら IPアドレスのような数字の羅列は間違えやすいし、将来変わる可能性もあるので、なるべくなら入力させたくありませんね。

実はローカルの names.nsf にあるロケーション文書には、これまで接続できたサーバーの情報がキャッシュされていまして、ここへ未知のサーバーの情報を書き込んであげると...アプリケーションがすんなり開くのです。

サーバー $SavedServers
ポート  $SavedPorts
アドレス $SavedAddresses

下記にLotus Scriptのサンプルを示します。
メールのホットスポットボタンに組み込んで(Notes R6.5.3にて)利用したことがあります。

Sub Click(Source As Button)
Dim ss As New NotesSession
Dim db As New NotesDatabase("", "")
Dim dc As NotesDocumentCollection
Dim doc As NotesDocument
Dim item1 As NotesItem, item2 As NotesItem, item3 As NotesItem
Const savedServers = "CN=hogehoge/O=org"
Const savedPorts = "TCPIP"
Const savedAddresses = "hogehoge"

'現在のロケーション名を取得する
vLocation$ = ss.GetEnvironmentString("Location", True)
vLocation$ = Strtoken(vLocation$, ",", 1)

'ロケーション文書を取得する
Call db.Open("", "names.nsf")
sFormula$ = |Form="Location" & Name="| & vLocation$ & |"|
Set dc = db.Search(sFormula$, Nothing, 0)
If dc.Count = 0 Then
Messagebox "ロケーション「" & vLocation$ & "」が存在しません。",16,"失敗"
Exit Sub
End If

'ロケーション文書を変更する
Set doc = dc.GetFirstDocument
If doc.HasItem("$SavedServers") Then
Set item1 = doc.GetFirstItem("$SavedServers")
If Not Isnull( Arraygetindex(item1.Values, savedServers, 1) ) Then
Call item1.AppendToTextList(savedServers)

If doc.HasItem("$SavedPorts") Then
Set item2 = doc.GetFirstItem("$SavedPorts")
Call item2.AppendToTextList(savedPorts)
Else
Call doc.ReplaceItemValue("$SavedPorts", savedPorts)
End If

If doc.HasItem("$SavedAddresses") Then
Set item3 = doc.GetFirstItem("$SavedAddresses")
Call item3.AppendToTextList(savedAddresses)
Else
Call doc.ReplaceItemValue("$SavedAddresses", savedAddresses)
End If
End If
Else
Call doc.ReplaceItemValue("$SavedServers", savedServers)
End If
Call doc.Save(True, True)

Dim ws As New NotesUIWorkspace
Call ws.OpenDatabase("hogehoge/org", "hoge.NSF")
End Sub

上記でポート名を "TCPIP" としていますが、各クライアントの環境により異なることがある場合にはロケーション文書のアイテム "EnabledPorts" や @GetPortsList([Enabled]) コマンドで取得するといいと思います。

なお $SavedAddresses へ設定する値はIPアドレスでも良いようです。

0 件のコメント:

コメントを投稿