NotesQueryResultsProcessor

2K Views

March 15, 22

スライド概要

NotesQueryResultsProcessor は Notes/Domino バージョン12 の LotusScript と Java で使用可能になったクラスです。

profile-image

Domino/Notes geek, HCL Ambassador 2020 - 2022

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

NotesQueryResultsProcessor 中野晴幸 (Haruyuki Nakano) @harunakano (Twitter) harunakano.blogspot.com (blog)

2.

NotesQueryResultsProcessor +バージョン 12 で LotusScript と Java に追加されたクラス +Dominoデータベースから文書コレクションを集約、計算、 ソート、フォーマットする db1 db2 db3 QRP

3.

列式 列(カラム) フィールド名 列タイトル ソート順 カテゴリ 結果 NotesQueryResultsProcessor クラス コレクション クエリー

4.

列式 列(カラム) フィールド名 列タイトル ソート順 カテゴリ 結果 AddColumn メソッド AddFormula メソッド ExecuteToJson メソッド NotesQueryResultsProcessor クラス ExecuteToView メソッド AddCollection メソッド コレクション AddDominoQuery メソッド クエリー

5.

QRPサンプル (LotusScript) db1 db2 QRP 2つの郵便番号DBの検索結果から ビュー(+エントリ)と json を作る view json

6.

宣言など Dim ss As New NotesSession Dim db As NotesDatabase Dim qrp As NOTESQUERYRESULTSPROCESSOR Dim db1 As New NotesDatabase( "","DQL1201-1.nsf" ) Dim dql1 As NotesDominoQuery Dim col1 As NotesDocumentCollection Dim db2 As New NotesDatabase( "","DQL1201-2.nsf" ) Dim dql2 As NotesDominoQuery Dim col2 As NotesDocumentCollection Dim nav As NotesJSONNavigator Dim doc As NotesDocument Dim servername As String Dim nam As New NotesName( ss.currentdatabase.Server ) Dim formula1 As String Dim link1 As String Dim link2 As String Dim view As NotesView Dim readers( 2 ) As String Dim query As String Dim expirehours As Long Dim resultviewname As String servername = nam.Common 1/4

7.

入力設定 ‘結果の出力先 DB で qrp インスタンス作成 Set db = ss.Currentdatabase Set qrp = db.Createqueryresultsprocessor () query = “@All” ’DQLクエリー ‘文書コレクションの 追加 If Not db1.Isopen Then Call db1.Open( “”, “” ) Set dql1 = db1.Createdominoquery() Set col1 = dql1.Execute( query ) ’クエリーを実行して文書コレ クションを作成 Call qrp.Addcollection( col1, “allDoc1” ) ’qrpに 文書コレクションを追加、「文書 セット名」は allDoc1 ‘DQLクエリーの追加 If Not db2.Isopen Then Call db2.Open( “”, “” ) Set dql2 = db2.Createdominoquery() Call qrp.Adddominoquery( dql2, query, “allDoc2” ) ’qrpにクエリーを追加、「文書セ ット名」は allDoc2 2/4

8.
[beta]
出力設定
'列(カラム)定義の追加
Call qrp.Addcolumn( "jiscode", "", "", SORT_ASCENDING, False, True )
Call qrp.Addcolumn( "postcode3", "", "@Left(postcode7;3)", SORT_ASCENDING, False, True )
Call qrp.Addcolumn( "postcode7", "", "", SORT_ASCENDING, False, False )
Call qrp.Addcolumn( "state_kanji", "", "", SORT_UNORDERED, False, False )
Call qrp.Addcolumn( "doclink", "", "", SORT_UNORDERED, False, False )

'列式の追加(郵便番号へ記号の付加、ワイルドカード使用)
formula1 = "'〒 '+@Left(postcode7;3)+'-'+@Right(postcode7;4)"
Call qrp.Addformula( formula1, “postcode7”, “allDoc*” ) ‘式の適用対象を文書セット名で指定(ここの allDoc*は *だけでも OK)

'列式の追加(NotesURLの付加、ワイルドカード未使用)
link1 = "'notes://" + servername + "/__" + db1.Replicaid + ".nsf/0/' + @Text(@DocumentUniqueID)"
Call qrp.Addformula( link1, “doclink”, “allDoc1” ) ‘対象は db1 の文書セットだけ
link2 = "'notes://" + servername + "/__" + db2.Replicaid + ".nsf/0/' + @Text(@DocumentUniqueID)"
Call qrp.Addformula( link2, “doclink”, “allDoc2” ) ‘対象は db2 の文書セットだけ

3/4

9.

実行 ‘実行(JSON出力):QRPで計算とソートし、結果をJSONを作成する Set nav = qrp.Executetojson() ‘jsonの生成 Set doc = New NotesDocument( db ) Call doc.Appenditemvalue( "json", nav.Stringify() ) Call doc.Save( True, False ) ‘実行(View出力)QRPで計算とソートを行い、結果をホストDBに「結果ビュー」として作成する resultviewname = “postcodeview“ ‘結果ビューの名前 expirehours = 24 ‘ホスト DBに結果ビューを残す時間(単位:時間)、デフォルトは24時間、 updall or DBMT で期限を延長可能 (?) readers(0) = "CN=admin/O=v10" 'ユーザーの階層名 readers(1) = "[Admin]" 'ユーザーロール readers(2) = "LocalDomainServers" 'グループ名 Set view = qrp.Executetoview( resultviewname, expirehours, readers ) ‘結果ビューの生成 4/4

10.

結果(ビュー) ‘実行(View出力)QRPで計算とソートを行い、結果をホストDBに「結果ビュー」として作成する resultviewname = “postcodeview“ ‘結果ビューの名前 expirehours = 24 ‘ホスト DBにビューを残す時間(単位:時間)、デフォルトは24時間、 updall or DBMT で期限を延長可能 (?) readers(0) = "CN=admin/O=v10" 'ユーザーの階層名 readers(1) = "[Admin]" 'ユーザーロール readers(2) = "LocalDomainServers" 'グループ名 Set view = qrp.Executetoview( resultviewname, expirehours, readers )

11.

e オプション付きで show database を投入すると 結果ビューの情報(名前、サイズ、期限)を表示できる Dominoコンソール > show database DQL1201.nsf e [24C8:000A-42CC] DQL 12.0.1 [24C8:000A-42CC] Results View sizes [24C8:000A-42CC] (postcodeview) Bytes 99,680 Expires 2022/03/15 07:05:57 resultviewname = "postcodeview" expirehours = 24 Set view = qrp.Executetoview( resultviewname, expirehours, readers )

12.

結果ビューは Domino Designer からアクセス可能 名前には括弧が付くため「隠しビュー」となる

14.

'列(カラム)定義の追加 Call qrp.Addcolumn( "jiscode", "", "", SORT_ASCENDING, False, True )

15.

'列(カラム)定義の追加 Call qrp.Addcolumn( "jiscode", "JISコード ", "", SORT_ASCENDING, False, True ) ※ Addcolumnメソッドの 第 2パラメータは、出力先 が JSONの場合反映されな い

16.

'列(カラム)定義の追加 Call qrp.Addcolumn( "postcode3", "", "@Left(postcode7;3)", SORT_ASCENDING, False, True )

17.

'列(カラム)定義の追加 Call qrp.Addcolumn( "postcode7", "", "", SORT_ASCENDING, False, False ) '列式の追加(郵便番号へ記号の付加、ワイルドカード使用) Call qrp.Addformula( "'〒 '+@Left(postcode7;3)+'-'+@Right(postcode7;4)", "postcode7", "allDoc*" ) ビュー(設計) ビュー(データ)

18.

'列(カラム)定義の追加 Call qrp.Addcolumn( "jiscode", "", "", SORT_ASCENDING, False, True ) Call qrp.Addcolumn( "postcode3", "", "@Left(postcode7;3)", SORT_ASCENDING, False, True ) Call qrp.Addcolumn( "postcode7", "", "", SORT_ASCENDING, False, False ) Call qrp.Addcolumn( "state_kanji", "", "", SORT_UNORDERED, False, False ) Call qrp.Addcolumn( "doclink", "", "", SORT_UNORDERED, False, False )

19.

結果ビューの QueryOpenDocument イベントのコードによって 結果ビューに表示されている(別のDBにある文書の)エントリを ダブルクリックすると文書は開きます。

20.

結果ビューに表示されている(別のDBにある文書の)エントリから 文書のプロパティを開こうとすると 「文書が無効またはありません」と表示されます。 ※このメッセージの表示がループすることもあるので要注意

21.

結果(JSON) ‘実行(JSON出力):QRPで計算とソートし、結果をJSONを作成する Set nav = qrp.Executetojson() Set doc = New NotesDocument( db ) Call doc.Appenditemvalue( "json", nav.Stringify() ) Call doc.Save( True, False )

23.

Visual Studio Codeへペースト後、Shift+Alt+F でフォーマット 以下、自動で付加される • 最上位に”StreamResults” • カテゴリを有効にすると”category” • 文書一覧直前には”documents” • 文書ごとに”@nid”, “@DbPath”

24.

結果ビューのために 追加された コマンドオプション show database, updall

25.

結果ビューのサイズと期限 +データベースにある結果ビューのサイズと期限を表示 show database database e

26.

結果ビューの削除と期限の延長 +ビュー名を指定して削除する load updall database -Tx resultsviewname +有効期限を延長する(単位:日) load updall database -T- resultsviewname days -T- は機能してなくない?

27.

期限切れの結果ビューが updall で削除される様子 > sh database DQL1201.nsf e [1AA0:000A-1DE0] DQL 12.0.1 [1AA0:000A-1DE0] Results View sizes Bytes Expires [1AA0:000A-1DE0] (postcodeview) 116,064 2022/03/15 16:46:56 > load updall DQL1201.nsf [44A4:0002-42C4] 2022/03/15 22:47:27 Index update process started: DQL1201.nsf -Tx オプションは指定しない [44A4:0002-42C4] 2022/03/15 22:47:27 Updating views in C:¥IBM¥Domino¥data¥DQL1201.nsf [44A4:0002-42C4] 2022/03/15 22:47:27 Updating views in C:¥IBM¥Domino¥data¥DQL1201.nsf [44A4:0002-42C4] QueryResults::NamedFoundsetDeleteOld() has been called [44A4:0002-42C4] Starting enumeration for ENUMACTION_FOUNDSET_DELETE_OLD in namedFoundsetEnumProc() [44A4:0002-42C4] Ending enumeration for ENUMACTION_FOUNDSET_DELETE_OLD in namedFoundsetEnumProc() [44A4:0002-42C4] Deleted 0 old named foundsets in DQL1201.nsf [44A4:0002-42C4] 2022/03/15 22:47:27 QueryResults::NamedFoundsetDeleteOld() completed in 11.822 ms [44A4:0002-42C4] Named foundset total time used by object: 11.822 ms [44A4:0002-42C4] 2022/03/15 22:47:27 Updating C:¥IBM¥Domino¥data¥DQL1201.nsf view 'default' [44A4:0002-42C4] 2022/03/15 22:47:27 ビューの再構築 - コレクションオブジェクトは削除しました。(読み込み C:¥IBM¥Domino¥data¥DQL1201.nsf ビュー 文書 '(postcodeview)') [44A4:0002-42C4] 2022/03/15 22:47:27 ビューの再構築 - コレクションオブジェクトは削除しました。(読み込み C:¥IBM¥Domino¥data¥DQL1201.nsf ビュー 文書 '(postcodeview)') [44A4:0002-42C4] 2022/03/15 22:47:27 ビューの再構築 - コレクションオブジェクトは削除しました。(読み込み C:¥IBM¥Domino¥data¥DQL1201.nsf ビュー 文書 '(postcodeview)') [44A4:0002-42C4] 2022/03/15 22:47:27 Results view (postcodeview) in C:¥IBM¥Domino¥data¥DQL1201.nsf deleted (expiration 2022/03/15 16:46:56) [44A4:0002-42C4] 2022/03/15 22:47:27 Finished updating views in C:¥IBM¥Domino¥data¥DQL1201.nsf [44A4:0002-42C4] 2022/03/15 22:47:27 Index update process shutdown > sh database DQL1201.nsf e [1AA0:000A-1DE0] DQL 12.0.1 [1AA0:000A-1DE0] Results View sizes > Bytes Expires

28.

制限、注意点など

29.

QRPの注意点(12.0.1 の制限?) 実行できる 実行できない ✓Dominoサーバー上にあるア プリのコードをサーバー上 で実行する Dominoサーバー上にあるア プリのコードをクライアン ト側で実行する ✓クライアントの(ローカル にある)アプリのコードを 実行する 【参考】KB0095920 リモートデータベースで NotesQueryResultsProcessor を実行できない https://support.hcltechsw.com/csm?id=kb_article&sysparm_article=KB0095920

30.

同じコードを続けて実行するなどして 結果ビューと同名のビューが存在する場合 上書きや自動削除は行ってくれないので ExecuteToViewメソッドの実行前にビューの既存チェックをしましょう

31.

【参考】updall –j オプション NotesDominoQuery.Execute メソッドで作成した「結果セッ ト」に対するオプションがバージョン 12.0.1 で追加された QRPの ExecuteToView メソッドで作成した「結果ビュー」や AddCollectionメソッドやAddDominoQueryメソッドで付けた 「文書セットの名前」には反応しない [96C8:000A-9924] <省略> [8FD0:0002-A6F8] [8FD0:0002-A6F8] [8FD0:0002-A6F8] [8FD0:0002-A6F8] [8FD0:0002-A6F8] [8FD0:0002-A6F8] [8FD0:0002-A6F8] [8FD0:0002-A6F8] load updall DQL1201-1.nsf -j report # # # # # QRP Named Foundset report # # # # # [DQL1201-1.nsf] Name | Entries | Size | Time Created | Expiration | Query >---------- - - - - - - - - - mysavedresults | 37 | 23 | 2022/03/17 22:31:52 | 2022/03/18 22:35:56 | "@All" >---------- - - - - - - - - - Total count: 1 Total size: 421 Named foundset total time used by object: 2.357 ms