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

NotesView.createViewNavFromKey

 NotesView.createViewNavFromKey

Notes/Domino 9.0.1 FP8 でひっそりと実装されていた LotusScript のメソッド「NotesView.CreateViewNavFromKey」についてまとめています。

2018年12月開催の「テクてくLotus技術者夜会」で使用した資料です。

Haruyuki Nakano

September 08, 2022
Tweet

More Decks by Haruyuki Nakano

Other Decks in Programming

Transcript

  1. View.createViewNavFromKey ViewEntryCollection の代わりに ViewNavigator を返す点を除き、View.getAllEntriesByKey と同じ 機能を果たします。ViewNavigator を ViewEntryCollection 上に使用する利点は、複

    数の Category を持つビューに、ビューに2度表 示される文書がある可能性があることです。 残 念ながら、ViewEntryCollection は繰り返しエント リを許可しません。 ただし、ViewNavigator は表 示されたビューと繰り返される文書とを一致さ せます。
  2. View.createViewNavFromKey ViewEntryCollection の代わりに ViewNavigator を返す点を除き、View.getAllEntriesByKey と同じ 機能を果たします。ViewNavigator を ViewEntryCollection 上に使用する利点は、複

    数の Category を持つビューに、ビューに2度表 示される文書がある可能性があることです。 残 念ながら、ViewEntryCollection は繰り返しエント リを許可しません。 ただし、ViewNavigator は表 示されたビューと繰り返される文書とを一致さ せます。 ① ②
  3. View.createViewNavFromKey ViewEntryCollection の代わりに ViewNavigator を返す点を除き、View.getAllEntriesByKey と同じ 機能を果たします。ViewNavigator を ViewEntryCollection 上に使用する利点は、複

    数の Category を持つビューに、ビューに2度表 示される文書がある可能性があることです。 残 念ながら、ViewEntryCollection は繰り返しエント リを許可しません。 ただし、ViewNavigator は表 示されたビューと繰り返される文書とを一致さ せます。 ① ②
  4. getAllEntriesByKey Dim ss As New NotesSession Dim db As NotesDatabase

    Dim vw As NotesView Dim ec As NotesViewEntryCollection Dim entry As NotesViewEntry Dim keys$( 0 ) Dim tmp As Variant Set db = ss.Currentdatabase Set vw = db.Getview( "byTitle“ ) vw.Refresh vw.Autoupdate = False keys( 0 ) = " 果物#1“ Set ec = vw. getAllEntriesByKey( keys, True ) Set entry = ec.Getfirstentry() While Not entry Is Nothing tmp = entry.Columnvalues( 1 ) If IsArray( tmp ) Then Print Join( tmp, “,” ) Else Print tmp End If Set entry = ec.Getnextentry( entry ) Wend ビューエントリの 集合 一致する全ての エントリを取得 エントリから2列 目の値を出力 結果 いちご いちご びわ バナナ バナナ
  5. getAllEntriesByKey Dim ss As New NotesSession Dim db As NotesDatabase

    Dim vw As NotesView Dim ec As NotesViewEntryCollection Dim entry As NotesViewEntry Dim keys$( 0 ) Dim tmp As Variant Set db = ss.Currentdatabase Set vw = db.Getview( "byTitle“ ) vw.Refresh vw.Autoupdate = False keys( 0 ) = " 果物#1“ Set ec = vw. getAllEntriesByKey( keys, True ) Set entry = ec.Getfirstentry() While Not entry Is Nothing tmp = entry.Columnvalues( 1 ) If IsArray( tmp ) Then Print Join( tmp, “,” ) Else Print tmp End If Set entry = ec.Getnextentry( entry ) Wend 結果 いちご いちご びわ バナナ バナナ
  6. View.createViewNavFromKey ViewEntryCollection の代わりに ViewNavigator を返す点を除き、View.getAllEntriesByKey と同じ 機能を果たします。ViewNavigator を ViewEntryCollection 上に使用する利点は、複

    数の Category を持つビューに、ビューに2度表 示される文書がある可能性があることです。 残 念ながら、ViewEntryCollection は繰り返しエント リを許可しません。 ただし、ViewNavigator は表 示されたビューと繰り返される文書とを一致さ せます。 ② こういうことね!
  7. 結果 いちご バナナ びわ みかん りんご createViewNavFromKey Dim ss As

    New NotesSession Dim db As NotesDatabase Dim vw As NotesView Dim nav As NotesViewNavigator Dim entry As NotesViewEntry Dim keys$( 0 ) Dim tmp As Variant Set db = ss.Currentdatabase Set vw = db.Getview( "byTitle“ ) vw.Refresh vw.Autoupdate = False keys( 0 ) = " 果物#1" Set nav = vw. createViewNavFromkey( keys, True ) Set entry = nav.Getfirst() While Not entry Is Nothing tmp = entry.Columnvalues( 1 ) If IsArray( tmp ) Then Print Join( tmp, “,” ) Else Print tmp End If Set entry = nav.Getnext( entry ) Wend ビューエントリの 位置 位置を決める エントリから2列 目の値を出力
  8. getAllEntriesByKey Dim ss As New NotesSession Dim db As NotesDatabase

    Dim vw As NotesView Dim ec As NotesViewEntryCollection Dim entry As NotesViewEntry Dim keys$( 0 ) Set db = ss.Currentdatabase Set vw = db.Getview( "byCategory“ ) vw.Refresh vw.Autoupdate = False keys( 0 ) = " バナナ“ Set ec = vw. getAllEntriesByKey( keys, True ) Set entry = ec.Getfirstentry() While Not entry Is Nothing Print entry.Columnvalues( 1 ) Set entry = ec.Getnextentry( entry ) Wend 結果 果物#1 果物#2 果物#3
  9. createViewNavFromKey Dim ss As New NotesSession Dim db As NotesDatabase

    Dim vw As NotesView Dim nav As NotesViewNavigator Dim entry As NotesViewEntry Dim keys$( 0 ) Set db = ss.Currentdatabase Set vw = db.Getview( "byCategory“ ) vw.Refresh vw.Autoupdate = False keys( 0 ) = " バナナ" Set nav = vw. createViewNavFromKey( keys, True ) Set entry = nav.Getfirst() While Not entry Is Nothing Print entry.Columnvalues( 1 ) Set entry = nav.Getnext( entry ) Wend 結果 果物#1 果物#2 果物#3 果物#1 果物#1
  10. createViewNavFromKey Dim ss As New NotesSession Dim db As NotesDatabase

    Dim vw As NotesView Dim nav As NotesViewNavigator Dim entry As NotesViewEntry Dim keys$( 0 ) Set db = ss.Currentdatabase Set vw = db.Getview( "byCategory“ ) vw.Refresh vw.Autoupdate = False keys( 0 ) = " バナナ" Set nav = vw. createViewNavFromKey( keys, True ) Set entry = nav.Getfirst() While Not entry Is Nothing Print entry.Columnvalues( 1 ) Set entry = nav.Getnext( entry ) Wend 結果 果物#1 果物#2 果物#3 果物#1 果物#1
  11. まとめ キー列が単数値 取得する列が複数値 キー列が複数値 取得する列が単数値 getAllEntriesByKey createViewNavFromKey 【メモ】 1列目をカテゴリ表示しないビューではどうなる? →

    結果は上の表と同じ結果 Categories の値が1つの場合はどうなる? → いずれも期待どおりの結果となった ビュー メソッド