目次


連載 Domino V10 アプリ開発 #鬼わか 解説

第 5 回「LotusScript から DQL で Domino のデータにアクセスしてみよう #鬼わか 解説」

Comments

コンテンツシリーズ

このコンテンツは全#シリーズのパート#です: 連載 Domino V10 アプリ開発 #鬼わか 解説

このシリーズの続きに乞うご期待。

このコンテンツはシリーズの一部分です:連載 Domino V10 アプリ開発 #鬼わか 解説

このシリーズの続きに乞うご期待。

1

はじめに

連載 「Domino V10 アプリ開発 #鬼わか 解説」のページにアクセスいただき、ありがとうございます。

前回は、Domino V10 で新たに追加された Domino Query Language (以下 DQL) を使用して、Node.js アプリケーションから Domino アプリケーション上のデータにアクセスしてみました。

今回は LotusScript から DQL を使って、Domino アプリケーションのデータにアクセスしてみます。

(前回ご説明しましたが、DQL は「複雑な条件を用いた文書検索を簡潔な構文で実行可能にするクエリ言語」です。SQL ライクなクエリ文で、Domino アプリケーションに格納されているデータに対して検索を実行することができます。)

現状の制限として、LotusScript では、IBM Notes クライアントから IBM Domino サーバー上のアプリケーションに対して DQL を実行できません。今回の記事ではローカル上のアプリケーションに対して DQL を実行する様子を紹介します。

注) IBM Notes から IBM Domino サーバー上の Domino アプリケーションに対して DQL でアクセスをしたい場合は、RunOnServer もしくは Web エージェントを利用して IBM Domino サーバー上で DQL が実行されるように工夫する必要があります。

2

サンプル Domino アプリケーションの準備とデザインカタログの作成

今回はローカル上で DQL を使用します。そのため、IBM Notes クライアントのデータディレクトリに TeamEUC アプリケーションを配置し、デザインカタログを作成する必要があります。

サンプルアプリケーションとデザインカタログについては、前回の連載記事も併せてご覧ください。

TeamEUC アプリケーションの配置が完了したら、IBM Notes のインストールディレクトリで、コマンドプロンプトから以下のコマンドを実行します。(IBM Notes が C:\IBM\Notes にインストールされており、TeamEUC アプリケーションが demo ディレクトリ下に配置されている事が前提です。)

C:¥IBM¥Notes¥updall demo/teamuec.nsf -e

下記の出力のように、データディレクトリに GQFDsgn.cat が保存され、Index 更新プロセスが終了すれば準備完了です。

 

3

スクリプトの作成と実行

今回は、TeamEUC アプリケーションのリッチテキストに、テスト的にホットスポットボタンを作成し、DQL でアクセスした結果をメッセージボックスに出力してみます。

まずは NotesDominoQuery クラスの Explain メソッドを使ってみましょう。Explain メソッドは記述されている DQL の構文がどのように実行されたかの結果を返します。

ホットスポットボタンを編集し、"Click" したら LotusScript が実行されるように設定します。スクリプトエリアに以下のコードを記述します。

赤字の部分がクエリ文で、前回同様、前回同様 NumCont フィールドの値が 10,000,000 以上の文書を取得します。

Sub Click(Source As Button)
    Dim Query As String
    
    Dim Session As New NotesSession
    Dim db As NotesDatabase
    Dim DomQuery As NotesDominoQuery
    
    Set db = Session.CurrentDatabase
    Set DomQuery = db.CreateDominoQuery()
    
    Query = "NumCont > 10000000"
    
    Msgbox DomQuery.Explain(Query$)
End Sub

ボタンをクリックすると、DQL のクエリ文がどのように実行されたか、実行に要した時間やヒットした文書数などの情報が表示されます。

 

次に、実際にデータを取得するために、同じく NotesDominoQuery クラスの Execute メソッドを使ってみましょう。Executte メソッドは実際に DQL によって検索された結果を NotesDocumentCollection クラスで返します。

もう 1 つボタンを作成し、スクリプトエリアに以下のコードを記述します。

Sub Click(Source As Button)
    Dim Query As String
    
    Dim Session As New NotesSession
    Dim db As NotesDatabase
    Dim DomQuery As NotesDominoQuery
    Dim doccol As NotesDocumentCollection
    Dim doc As NotesDocument
    
    Set db = Session.CurrentDatabase
    Set DomQuery = db.CreateDominoQuery()
    
    Query = "NumCont > 10000000"
    
    Set doccol = DomQuery.Execute(Query$)
    
    If doccol.Count > 0 Then
        Set doc = doccol.GetFirstDocument
        Do While Not doc Is Nothing
            Msgbox "顧客名:" + doc.ACont(0) + " ふりがな:  " + doc.BCont(0)
            Set doc = doccol.GetNextDocument(doc)
        Loop
    End If
End Sub

ボタンをクリックすると、ヒットした文書の件数分、顧客名とふりがながメッセージボックスとして表示されます。

 

今回は IBM Notes クライアントで実行しましたが、IBM Domino サーバー上で実行する場合には、定期実行エージェントや Web エージェントを利用することもできます。

DQL を LotusScript から利用して、JSON データを生成する Web エージェントのサンプルが以下に公開されていますので、こちらも参考にしてみて下さい。

https://icstechsales.github.io/think2019lab-domino-nodejs/docs/ex4b/

4

おわりに

DQL の利用方法について、前回は Node.js アプリケーションから実行した処理を、今回は LotusScript で実行しました。LotusScript での動作イメージについても、ご理解いただけたのではないかと思います。

サーバーエージェントで利用することで、Node.js アプリケーションでのアクセスとはまた違った使い道が出てくると考えています。

次回は、LotusScript からの http リクエストについてご紹介します。こちらも、IBM Notes/Domino V10 の目玉となる新機能ですので、次回もお見逃しなく!


ダウンロード可能なリソース


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Lotus
ArticleID=1065226
ArticleTitle=連載 Domino V10 アプリ開発 #鬼わか 解説: 第 5 回「LotusScript から DQL で Domino のデータにアクセスしてみよう #鬼わか 解説」
publish-date=03272019