fc2ブログ

ブラウザからNotesクライアントへ

会社の基幹システムはWebでクライアントはIE、DominoはNotesクライアントを使用しています。

例えば商品マスタは基幹システムが主ですが、毎日DominoDBへLEIよりReplicationして商品管理部門がスペック表(商品アイテムがバラバラのため一律でない)や画像、取説など添付しています。よって商品に関する情報量はDominoDBの方がはるかに多いです。

そこで、基幹システム画面の商品名リンクをクリックすると、該当するDominoDBの商品マスタが見れるようにならないかと要望がありました。ホームページのリンクは"http://~"でブラウザ、メールのリンクは"mailto:~"でメーラーが立ち上がるのはハイパーリンクでプロトコルを指定しており、紐付かれたアプリケーションが起動されるだけ。ならばDominoの場合は、"notes://~"でOK。ちなみにNotesのポート番号はデフォルトで1352。

(1) Dominoサーバー名は "srv"。

(2) DB名は "sample.nsf"。

(3) フォーム名は "SYOUHIN"、項目 "SYOUHIN_Cがキーで5桁の数字とする。
フォーム

(4) ビューは下記の通り。
ビュー

ビューからキー検索してフォームを開く場合は "http://server/database/view/key?OpenDocument"。
よって 商品コード "00002"に対しては、"http://srv/sample.nsf/index/00002?OpenDocument"で良いはずだが開かない。正確にはワークスペース画面でDBアイコンへフォーカスで止まってしまう。

次に key を NotesDocument.UniversalID (関数では @DocumentUniqueID)に変えると成功する。ちなみにビュー等の設計要素は何も変えていない。
このテストのために用意した同一名のWeb用フォームと結果は下記の通り。

テスト用フォーム

テスト結果

ただ、これでは喜べない。基幹システムにNotesDocument.UniversalIDなど持たせるつもりはないからです。そこでワンクッション置くことにしました。

(1) 基幹システムのリンクをエージェント(?OpenAgent&key)にする。
(2) エージェントで
   a. URL引数のキーから商品を検索する。
   b. 検索結果をもとにNotesの該当商品文書を立ち上げる
   c. 残骸のブラウザを閉じる。

エージェント名を "search" とした場合、商品コード = 00002 のURLは "http://srv/sample.nsf/search?OpenAgent&00002"となる。
エージェント内のプログラムは下記の通り。
Sub Initialize

' ノーツ宣言
Dim Session As New NotesSession
Dim Document As NotesDocument
Dim Syouhin As NotesDocument

' 商品情報を取得する
Set Document = Session.DocumentContext
Set Syouhin = Session.CurrentDatabase.GetView("index").GetDocumentByKey(Right(Document.Query_String(0), 5), True)

' 商品情報がない場合、メッセージを出力する
If Syouhin Is Nothing Then
Print "該当する商品情報がありません。"

' 商品情報がある場合、文書を開く
Else
Print "<body onLoad=""setTimeout('window.close(); notes.close()', 1000);"">"
Print "<script language=""javascript"">"
Print "notes = window.open('notes://srv/sample.nsf/index/" & Cstr(SYOUHIN.UniversalID) & "?OpenDocument');"
Print "</script>"
Print "</body>"
End If
End Sub

Notes 商品マスタのブラウザ対応へカスタマイズも考えましたが、保守を考え当該方法を採用しました。
世間では、クライアントはNotesとブラウザのどちら(もしくは両方可能)の比率が多いのでしょうか?

追記 : もっと良い案 こちら より
スポンサーサイト



テーマ : プログラミング
ジャンル : コンピュータ

ファイル検索

会社の取り扱い商品に対して様々な検査証や証明書があり、共有フォルダにファイルを保存しています。商品マスタはDominoDB。ならばリッチテキストに添付すればと思いますが、いろいろ理由あってそのように運用されています。当然、Dominoフォームからボタン一つで該当商品の添付ファイルを開きたい要望が出てきました。

下記サンプルの条件は
・ 商品コードは5桁
・ ファイル名の先頭5文字が商品コード
・ ファイルはtif
・ フォルダ名は"検査表"
・ フォルダはローカルのCドライブ

(1) 検査表ファイルを用意しておく

エクスプローラ

(2) フォームを作成、実行するためのアクションボタンを用意する。

フォーム

アクションボタンには下記のスクリプトを記述する。
Declare Function GetDesktopWindow Lib "user32" () As Long
Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (Byval hwnd As Long, Byval lpOperation As String, Byval lpFile As String, Byval lpParameters As String, Byval lpDirectory As String, Byval nShowCmd As Long) As Long

Sub Click(Source As Button)

' ノーツ宣言
Dim UIWorkspace As New NotesUIWorkspace
Dim UIDocument As NotesUIDocument

' ワークエリア
Dim Path As String
Dim o As String

' ファイルを検索して開く
Set UIDocument = UIWorkspace.CurrentDocument
Path = "C:\検査表\"
o = Dir$(Path & UIDocument.FieldGetText("SYOUHIN_C") & "*.tif", 0)
If Len(o) > 0 Then
Call ShellExecute(GetDesktopWindow, "open", Path & o, Chr$(0), "", 5)
Else
Msgbox "該当するファイルがありません。", 48, "検査表"
End If
End Sub

実行すると拡張子tifに紐付かれたイメージングソフトでファイルが開かれます。

フォーム

最初はFileSystemObjectでファイル検索させたのですがレスポンスが悪かったため、Dir関数を使いました。フォルダやファイル名のルールさえ決めれば良いだけで、ユーザーは非常に重宝しています。

テーマ : プログラミング
ジャンル : コンピュータ

プロフィール

ピヨパパ

Author:ピヨパパ
静岡市のエンドユーザーSE。
最近はDominoの開発ばかりでうんざり。
是非気軽にコメントして下さい。

FC2カウンター
最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる