サンプル2: データベース内の文書の一覧を表示

データベース内の文書の一覧を表示してみます。

Rubyで書く

  01: #!ruby -Ks
  02: require 'notes_lib'
  03:
  04: ns = Notes::NotesSession.new
  05: db = ns.database("", "help/help5_client.nsf")
  06: doc_list = db.AllDocuments
  07: puts "DB中には#{doc_list.size}文書が存在"
  08: doc_list.each {|doc|
  09:   puts "Form:#{doc['Form'].text}, Subject:#{doc['Subject']}"
  10: }
  

LotusScriptで書く

LotusScriptで書くと、こうなる。イテレータが無いと、05:〜09:のような書き方になる。

  01:   Dim ns As New NotesSession
  02:   Set db = ns.GetDatabase("", "help/help5_client.nsf")
  03:   Set doc_list = db.AllDocuments
  04:   Print "DB中には" + Cstr(doc_list.Count) + "文書が存在"
  05:   Set doc = doc_list.GetFirstDocument
  06:   While Not(doc Is Nothing)
  07:     Print "Form:" + doc.Form(0) + ", Subject:" + doc.Subject(0)
  08:     Set doc = doc_list.GetNextDocument(doc)
  09:   Wend
  

さらに補足

イテレータについて

Rubyでは、繰り返し構造を持つオブジェクトにはイテレータを持たせるのが普通だ。RubydeNotesではNotesDocumentCollectionや NotesViewにイテレータを設けている。これらは内部にNotesDocumentオブジェクトを1つ以上保持しているので、イテレータは NotesDocumentを抜き出しながら指定されたブロックを実行していく。

イテレータの説明

他にもRubydeDominoでは「DB内のビューの一覧」や、「データベースの一覧」もイテレータとして用意している。 NotesSessionは別にNotesDatabaseの配列ではないが、すべてのDBへのアクセス手段を持っているため、DBを返す イテレータを提供している。

  ns.each_database{|db|
    puts db.Title
  }
  

フィールドへのアクセス

RubydeDominoでは文書内のフィールドへのアクセスは以下のように名前を指定して行う。docが文書オブジェクトを指しているとする。

"#{doc['Subject']}"がフィールド値を返すわけ

Rubyは文字列内の式展開を行うときに、to_sメソッドを呼び出す。 doc['Subject']はNotesItemオブジェクトを返すので、NotesItemクラスにto_sメソッドを用意し、テキストを返すようにしておけ ばいい。