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

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

2008年10月17日金曜日

文書内のフィールドの値を取得する

やってそうでやってなかったみたいなので・・・
今回は文書内のフィールドの値を取得してみよう。

doc(NotesDocumentクラスの変数)内のSubjectフィールドの値を取得する場合、
サンプル等でよく見かけるのが、
doc.Subject(0)という書式である。
これは、「拡張クラス」構文と言って、NotesDocumentクラスのGetItemValueメソッドと同じ働きをするものである。
なお、(0)はSubjectフィールドの1つめの値という意味である(フィールドは複数値を許可していることがあるので、このような設定が必要になる)。

だったら、GetItemValueメソッドは不要ではないか?と思ってしまうだろう。
ところが、次のような場合は、「拡張クラス」構文は利用できないので、GetItemValueメソッドを使う方が良いのである。
例)Subject_1、Subject_2、Subject_3のフィールドの値をそれぞれ、i(1)、i(2)、i(3)という変数に格納する。
普通なら、
i(1) = doc.Subject_1(0)
i(2) = doc.Subject_2(0)
i(3) = doc.Subject_3(0)
となるのだが、これではSubject_xxが100まであったら、とてもじゃないが書いていられない。
ということで、
For n = 1 to 3
i(n) = doc.GetItemValue( "Subject_" & cstr(n) )
Next
とするのだ。
こうすると、cstr(n)はループの回数に従って、1,2,・・・と増えていき、
結果として、Subject_1,Subject_2・・・としていくことができる。
後は、これをGetItemValueで取得していけば良いのである。

なので、処理の内容によって、うまく使い分けてほしい。



今回のサンプルは、至ってシンプル。ByCategoriesビューで最初に取得した文書のSubjectフィールドを取得して画面に表示するものである。

Sub Click(Source As Button)
    Dim session As New NotesSession
    Dim db As NotesDatabase
    Dim view As NotesView
    Dim doc As NotesDocument
    Dim tmp As Variant
    
    Set db = session.CurrentDatabase
    Set view = db.GetView( "ByCategories" )
    Set doc = view.GetFirstDocument
    
    tmp = doc.GetItemValue( "Subject" )
    Messagebox tmp( 0 )
End Sub






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

0 件のコメント: