PowerShellからLotusScirptのクラスを呼んだときのGetFirstDocumentの挙動について
※この記事の内容は、以下環境下で確認しています。
- Windows7 SP1
- IBM Notes 9 Social Edition リリース 9.0.1FP5 SHF190
PowershellでLotusScriptを利用してNotesDocumentCollectionからGetFirstDocumentを呼ぶとうまくいかないようです。
$ss = New-Object -COMObject Lotus.NotesSession
$ss.Initialize("")
$db = $ss.GetDatabase("", "names.nsf")
$docCol = $db.AllDocuments
$doc = $docCol.GetFirstDocument
Write-Output $doc.Created
上記サンプルコードをは以下のような動きをする想定ですが、作成日が返ってきません。
- names.nsfのすべての文書を含むオブジェクトを取得($docCol)
- そのオブジェクト内最初の文書のオブジェクトを取得($doc)
- 最初の文書の作成日を返す
デバッグしてみると以下のように$docに値が入っていないことが分かります。
$docにうまく値がセットされないようです。
>> $doc
OverloadDefinitions
-------------------
IDocument GetFirstDocument ()
>> $doccol
Count : 334
IsSorted : False
Parent : System.__ComObject
Query :
UntilTime :
一方、GetNthDocumentを使うとうまくいくようです。
NotesDocumentCollection内全ての文書をチェックする場合、現時点ではGetNthDocument(1)で最初の文書を取得してから、GetNextDocumentを使うとよさそうです。
$ss = New-Object -COMObject Lotus.NotesSession
$ss.Initialize("")
$db = $ss.GetDatabase("", "names.nsf")
$docCol = $db.AllDocuments
$doc = $docCol.GetNthDocument(1)
Write-Output $doc.Created
>> $doc
(中略)
Created : 2002/10/07 12:54:31
EmbeddedObjects :
EncryptionKeys : {}
EncryptOnSend : False
FolderReferences :
FTSearchScore : 0
HasEmbedded : False
HttpURL :
IsDeleted : False
IsNewNote : False
IsProfile : False
IsResponse : False
IsSigned : False
IsUIDocOpen : False
IsValid : True
(以下略)
これが仕様なのかどうなのかについては、もう少し調べてみた上で、何か分かれば追記するつもりです。
(2020/06/21追記)
今後の状況の把握が難しくなりましたので、この記事の更新はこれ以上ありません。過去バージョンを利用するときに参考程度にご利用ください。
(2017/12/02追記)
LO93308: NOTESDATABASE#GETFIRSTDOPCUMENT DOES NOT WORK IN WINDOWS POWERSHELL としてAPAR番号がついたようです。修正の時期は未定。
(2017/03/07追記)
NotesDbDirectoryのGetNextDatabaseも、この現象とは少し違う応答になりますが、うまく戻り値を返せないようです。