当ブログに掲載しているサンプルは、すべて利用者の自己責任という形でお願いします。
ただし、明らかな不具合がある場合、ご連絡いただければ、訂正記事を出します。
また、こちらのサンプルは、別のサイト等への公開、転載は一切禁止しています。
どうしてもと言う場合は、筆者にあらかじめご連絡ください。

テクてく Lotus 技術者 Slack に参加しよう!

2016年9月14日水曜日

未読文書数を数えてみよう

皆さんこんにちは。
世間ではNotes/Domino 9.0.1のサポート期間が2021年9月までだとか8.5.xのサポート期間が2018年9月までだとか言ってますが、気にしません。
※9.0.1は「少なくとも」2021年9月まではサポートするよということでそこで終了とは限らないそうです。 Windows XPだってサポート終了してますが使ってる人いますよね?
IEだってOSによっては11しかサポートしてくれませんが、IE8を使ってる人いますよね?
そんなもんです。
きちんと動作してくれればそれでいいんです。
でも、せめてバージョンはあげてほしかったですね(9.0.2でも、10.0.0でもなんでもいいけど、9.0.1で延長しますというのはちょっと寂しかった)。

詳しいことはネット上にあふれているのでそちらを探して読んでみてください。


こちらのブログは通常運転です。

ということで、今日はヘルプの誤記についてのお話です。

Notes DBの未読/既読ってよくできてますよね。
ワークスペースアイコンにも未読文書数を表示することができます。
DBの未読文書数が表示されている

メールDBでは、フォルダごとに未読文書数が表示されたりします(ビューでは表示されない)。
メールDBのアウトライン(フォルダ名の横に未読文書数が表示される)

さらに、文書が未読なのか既読なのかをプログラムで判断することもできます。
文書の未読既読状態をチェックするを参照。


ここまで来たら、Notes DBの未読文書数もプログラムで数えてみたい!
ということでそんなメソッドがあるのかな?と調べてみました。
まぁ、ありますよね。えぇありましたよ。
NotesDatabaseクラスにGetAllReadDocumentsメソッド、GetAllUnreadDocumentsメソッドなるものがありました。
前者が既読文書数のコレクションで、後者が未読文書数のコレクションです。
デザイナーヘルプによると、構文は次の通り。
Set notesNoteCollection = notesDatabase .GetAllReadDocuments( [username] )


ヘルプはGetAllReadDocuments (NotesDatabase - LotusScript®)を参照
直される前に証拠の画像(笑)

へぇ。コレクションと言ったらNotesDocumentCollectionかな?と思ったら設計の一覧(NotesNoteCollection)になるんだぁ。となんとなく嫌な予感はしつつも、そういうものだろうと強引に納得しました。

ということで、プログラムを書いてみました。
Sub Click(Source As Button)
    Dim session As New NotesSession
    Dim db      As     NotesDatabase
    Dim note    As     NotesNoteCollection
    Dim uname   As     NotesName
    
    Set uname = New NotesName( session.UserName )
    Set db   = session.CurrentDatabase
    Set note = db.GetAllUnreadDocuments( uname.Canonical )
    
    Msgbox _
    uname.Common & "の未読文書数は、" & Cstr( note.Count ) & "です。", _
    0 + 64, "未読文書数の表示"
End Sub

そしたら保存できないじゃないですか!?
データ型が一致しません。と怒られて保存できない・・・

・・・もしかして、NotesDocumentCollectionなんじゃないか?
LotusScriptライブラリでプログラムを記述するとEclipseの機能により、メソッドのコードアシスタントが働き、戻り値の型などが表示されるので試しに記述してみよう!
ということで、LotusScriptライブラリで同じようにコードを記述してみて、GetAllUnreadDocumentsのコードアシスタントを確認してみました。
GetAllUnreadDocumentsのコードアシスタント


・・・えーっと。NotesDocumentCollectionって書いてありますね。
またかよ。ヘルプに間違いを書くなよっていうか、直せよ!(8.0で追加されたメソッドですが、その時からこのままだった様子)


気を取り直してプログラムを修正しました。


Sub Click(Source As Button)
    Dim session As New NotesSession
    Dim db      As     NotesDatabase
    Dim docs    As     NotesDocumentCollection
    Dim uname   As     NotesName
    
    Set uname = New NotesName( session.UserName )
    Set db   = session.CurrentDatabase
    Set docs = db.GetAllUnreadDocuments( uname.Canonical )
    
    Msgbox _
    uname.Common & "の未読文書数は、" & Cstr( docs.Count ) & "です。", _
    0 + 64, "未読文書数の表示"
End Sub


さきほどのNotes DBに仕込んで実行した結果がこちらです。
未読文書数が正しく表示されてます

ヘルプを読みましょう!と推進しているのですが、こうやって誤りがあるとなかなか推進しづらいのですが、正しい使い方を覚えるよい機会にもなるので、やっぱり読みましょう。
使ったことがないメソッドなんかは適当に書くのではなくて必ずヘルプを見てから書くようにしましょう。
そうすれば、何が悪いのかが分かるようになります。


では今日はこの辺で。





Notes/Dominoで困ったことがあれば、弊社にお問い合わせください。
IBM Championの私が承ります!
お問い合わせはこちらから→Lotus Notes/Domino カスタマイズとセキュリティ強化 - 株式会社エフ


0 件のコメント: