Upgrade to Pro — share decks privately, control downloads, hide ads and more …

NotesQueryResultsProcessor クラス

NotesQueryResultsProcessor クラス

NotesQueryResultsProcessor クラスは、Notes/Domino バージョン12 の LotusScript と Java に追加されたクラスです。

本スライドは、2022年3月度のテクてくLotus技術者夜会で使用したものです。

2022/4/8 追記:
本スライドで指摘している問題が 12.0.1 FP1で解消したことを確認できたため、内容を一部更新しました

Haruyuki Nakano

March 15, 2022
Tweet

More Decks by Haruyuki Nakano

Other Decks in Programming

Transcript

  1. NotesQueryResultsProcessor クラス ソート順 列タイトル フィールド名 AddColumn メソッド AddCollection メソッド AddFormula

    メソッド ExecuteToJson メソッド コレクション 列(カラム) クエリー ExecuteToView メソッド AddDominoQuery メソッド 列式 カテゴリ 結果
  2. 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 宣言など
  3. ‘結果の出力先 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
  4. '列(カラム)定義の追加 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 出力設定
  5. ‘実行(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 実行
  6. 結果(ビュー) ‘実行(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 )
  7. > show database DQL1201.nsf e [24C8:000A-42CC] DQL 12.0.1 [24C8:000A-42CC] Results

    View sizes Bytes Expires [24C8:000A-42CC] (postcodeview) 99,680 2022/03/15 07:05:57 e オプション付きで show database を投入すると 結果ビューの情報(名前、サイズ、期限)を表示できる resultviewname = "postcodeview" expirehours = 24 Set view = qrp.Executetoview( resultviewname, expirehours, readers ) Dominoコンソール
  8. '列(カラム)定義の追加 Call qrp.Addcolumn( "jiscode", "JISコード", "", SORT_ASCENDING, False, True )

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

    '列式の追加(郵便番号へ記号の付加、ワイルドカード使用) Call qrp.Addformula( "'〒'+@Left(postcode7;3)+'-'+@Right(postcode7;4)", "postcode7", "allDoc*" ) ビュー(設計) ビュー(データ)
  10. '列(カラム)定義の追加 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 )
  11. 結果(JSON) ‘実行(JSON出力):QRPで計算とソートし、結果をJSONを作成する Set nav = qrp.Executetojson() Set doc = New

    NotesDocument( db ) Call doc.Appenditemvalue( "json", nav.Stringify() ) Call doc.Save( True, False )
  12. > 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 [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 > 期限切れの結果ビューが updall で削除される様子 -Tx オプションは指定しない
  13. QRPの注意点(12.0.1 の制限?) 実行できる ✓Dominoサーバー上にあるア プリのコードをサーバー上 で実行する ✓クライアントの(ローカル にある)アプリのコードを 実行する 実行できない

    Dominoサーバー上にあるア プリのコードをクライアン ト側で実行する 【参考】KB0095920 リモートデータベースで NotesQueryResultsProcessor を実行できない https://support.hcltechsw.com/csm?id=kb_article&sysparm_article=KB0095920
  14. 【参考】updall –j オプション NotesDominoQuery.Execute メソッドで作成した「結果セッ ト」に対するオプションがバージョン 12.0.1 で追加された QRPの ExecuteToView

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