プロが教えるわが家の防犯対策術!

ノーツのデータをVBScriptで取得しようとしております。
そのために, 次のスクリプトを書きました。

Set objNotes = CreateObject("Notes.Notessession")
databaseName = "xxxxxxx.nsf"
Set objDB = objNotes.GetDatabase("",databaseName)
universalID = "ffdecaef1b87c101c925656e000c02dc"
Set objDoc = objDB.GetDocumentByUNID(universalID)
If objDoc.HasItem("Subject") Then WScript.Stdout.Write("Yes"&vbCrLf)
itemValueList = objDoc.GetItemValue("Subject")
WScript.Stdout.Write(TypeName(itemValueList)&vbCrLf)
WScript.Stdout.Write(itemValueList(0)&vbCrLf)
Set objDoc = Nothing
Set objDB = Nothing
Set objNotes = Nothing

結果は
Yes
String()
C:\temp\notesvalue.vbs(9,1) Microsoft VBScript 実行時エラー: 型が一致しません。: 'itemValueList'

とGetItemValueの値を取得することができません。

上の例では, Subjectというアイテムを取得することにしていますが,
その他のItemでもだめでした。

ノーツのバージョンは4.6a
OSはWindows 2000 Professional
でございます。

識者の方, どうすればGetItemValueから有効な値を取得できるかお教えください。
よろしくお願いいたします。

A 回答 (2件)

メッセージをそのまま受け取ると,



itemValueListが配列ではないにもかかわらず,
配列として扱っている(itemValueList(0)の部分)

からではないかと思われます。

単なる勘なんですけど,LotusScriptにおいて,
NotesDocumentクラスのGetItemValueの戻り値は
確かにString型の配列ですが,VBScriptで
暗黙的に型変換(文字列とか)されているのでは。

試しに7行目itemValueList = objDoc.GetItemValue("Subject")
の後に,Msgbox(IsArray(itemValueList))で確認して
みて下さい。(配列であればTrueが返るはずです)

またMsgbox(itemValueList)などとして,中身をが改行や
コロンで区切られた文字列リストであれば,Splitで配列を
作成してやればよいかもしれません。

っつーか,Subjectのアイテム数が1つだけ(配列ではない)
ことが確実であれば,そのまま
WScript.Stdout.Write(itemValueList&vbCrLf)とか
できないんでしたっけ?
↑Stdout.Write使った事ないんで,かなりテキトーです。
参考までにWScript.Stdout.Write(TypeName(itemValueList)&vbCrLf)
が何を標準出力に送信してるか教えて頂けると嬉しいです。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。こんなややこしいことに回答いただけて本当にうれしいです。

Msgbox(IsArray(itemValueList))
はTrueが返ってきたので配列だとわかりました。

Msgbox(itemValueList)は, "実行時エラー: 型が一致しません。"と怒られてしまいました。やっぱりこいつが何かの原因と思われてしかたありません。

TypeName(itemValueList)の値は, String()でした。
文字列の配列ですね...

補足ですが, itemValueListのUBoundとLBoundは共に0でした...

ついでですが, WScript.Stdout.Writeを使うと, cscriptと打って, コマンドラインから使わなくてはいけませんが, 大量に表示しなくてはいけない場合が私の場合多くあって, MsgBoxだと苦痛なのです。OKを何回も押さなくてはいけないので...

お礼日時:2004/08/05 19:09

ありー だめですか。



んじゃワンクッションおいて

itemValue = itemValueList(0)
Msgbox(itemValue)

なんてのはだめでしょうか。


相変わらず役立たずですみません。
    • good
    • 0
この回答へのお礼

itemValue = itemValueList(0)
のところでエラーを出力されてしまいました。

自己レスになってしまいますが,
私も質問後にあっちへこっちへ検索していると, VBScriptで配列をOLEから受け取るときはVariant型の配列でないとだめよ, という記述を見つけました。GetItemValueの型はString()となっているので, おそらくLotus側でString()ではなく, Variant型で返すように変更しないといけないのでしょう... とはいってもそれは無理なので, VBScriptでの取り出しはとりあえずあきらめて別の手段を探します。

お付き合いいただき, 本当にありがとうございました!!

お礼日時:2004/08/06 14:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!