当ブログに掲載しているサンプルは、すべて利用者の自己責任という形でお願いします。
ただし、明らかな不具合がある場合、ご連絡いただければ、訂正記事を出します。
また、こちらのサンプルは、別のサイト等への公開、転載は一切禁止しています。
どうしてもと言う場合は、筆者にあらかじめご連絡ください。

テクてく Lotus 技術者 Slack に参加しよう!

2008年11月21日金曜日

DB内の文書の検索

以前に、データベース内の検索という記事をいくつか書いた。
良く見返すと、NotesViewクラスのGetDocumentByKeyメソッドについて触れていなかった。

@DbLookUp関数の代わりとしてよく使うのに、書いていなかったのは不覚ですね・・・
ということで、今回はGetDocumentByKeyメソッドのサンプルです。

このメソッドを使う際の注意事項は、ほとんど@DbLookUp関数と同じです。
「ビューは1列目がソートされていること」です。

@DbLookUp関数と違うのは、
・検索キーは複数設定できること(この時、1番目のキーはビューの1列目、2番目のキーはビューの2列目・・・と対応していきます)。
・検索キーが「完全一致」なのか、「部分一致」なのかを選択できること。
・検索結果は、1文書であること(検索結果を全部抽出したい場合は、GetAllDocumentsByKeyメソッドを利用する)。
でしょう(他にも色々とありますが、それはヘルプで確認してください)。


サンプルは、自DBに登録されているCategoriesというフィールドの一覧を作成して、
その中から、検索したい項目を選択します。検索結果のSubjectフィールドの値を表示するものです。

GetDocumentByKey以外にもいくつかテクニック(と呼べるかどうかは微妙・・・)が隠されているので、
良く研究してみてください。
Sub Click(Source As Button)
    '検索するビュー変数の定義
    Dim session As New NotesSession
    Dim db As NotesDatabase
    Dim view As NotesView
    Dim doc As NotesDocument

    '検索キーの選択肢を表示するプロンプト関数を呼び出すための変数の定義
    Dim uiws As New NotesUIWorkspace

    '検索結果をセットする変数の定義
    Dim sdoc As NotesDocument

    '検索キーと検索結果の表示用変数の定義
    Dim tmp(1 To 1) As String
    Dim varList As Variant
    Dim unqList As Variant
    Dim key As String
    Dim sbj As String

    'ビューの取得
    Set db = session.CurrentDatabase
    Set view = db.GetView( "(ByCategory)" )

    'ビューに表示されている文書の大分類を取得
    Set doc = view.GetFirstDocument
    Do While Not ( doc Is Nothing )
        If Isempty( varList ) Then
            varList = Arrayappend( tmp, doc.ColumnValues(0) )
        Else
            varList = Arrayappend( varList, doc.ColumnValues(0) )
        End If
        Set doc = view.GetNextDocument( doc )
    Loop

    'キーの取得
    unqList = Arrayunique( varList, 0 )
    key = uiws.Prompt( PROMPT_OKCANCELLIST, "検索キーの入力", "ビューで検索する大分類を入力してください。", , unqList )

    'keyに基づいてビューを検索
    Set doc = view.GetDocumentByKey( key )

    sbj = doc.Subject( 0 )
    Messagebox sbj, 0, "検索結果"
End Sub




Lotus Notes/Domino カスタマイズとセキュリティ強化 - 株式会社エフ

0 件のコメント: