无法使用 lotusscript 检索字段

Cannot retrieve field with lotusscript

我有一个带字段的注释文档。在本文档中,我创建了一个新字段(称之为 Status),它具有以下文本值:QUEUED。 现在,如果我通过以下方式从视图中获取文档:

Set nvwQueuedOrderLines = dbCurrent.Getview("QueuedOrderLines")
Dim docOrderRegel As NotesDocument
Set docOrderRegel = nvwQueuedOrderLines.GetFirstDocument

最终得到数据:

If docOrderRegel.Status(0) = "QUEUED" Then

...

然后在调试器中检查 docOrderRegel 的项目时,我看不到 Status item/field.. 但是当右键单击文档中的文档属性时(在 Lotus 客户端中)然后我看到 item/field状态与价值.. 我可以在调试器中看到的所有其他字段,但不是这个状态字段。 如何在我的 docOrderRegel 对象中获取该字段。

在 Notes/Domino 中,表单(=设计)和文档是不同的(或多或少)独立的东西。

无论何时创建文档,它都会采用 AT THAT MOMENT 的形式,并为创建文档时表单上的所有字段创建项目。

打开现有文档时也会发生同样的情况:它会查找表单并按照此处设计的方式显示其数据。新字段的新项目按需添加。

但是:在您明确这样做之前,它们不会保存到文档中。

这个过程是纯前端。

Notes 永远不会仅仅因为您更改了相应表单中的某些内容而自动更改现有文档(也就是创建一个值为 "QUEUED" 的新字段 "Status")。 这就是为什么你的脚本没有得到项目(除非你打开文档并且表单中的字段成为一个项目)。

可以通过不同的方式将您对表单所做的更改更新到您的文档中。 第一个是:在前端打开所有文档并保存它们……但这非常耗时。

您可以使用公式代理更新文档。 只需 select "None" 作为目标(这很重要,因为我们需要使用 @Commands 并且它们不适用于任何目标)并输入公式:

@Command([ToolsRefreshSelectedDocs])

然后 select 要刷新的文档和 运行 它们上的代理。

您也可以使用 LotusScript 代理。这个需要 运行 selected 文档:

Dim ses as New NotesSession
Dim db as NotesDatabase
Dim dc as NotesDocumentCollection
Dim doc as NotesDocument

Set db = ses.CurrentDatabase
Set dc = db.UnprocessedDocuments
Set doc = dc.GetFirstDocument()
While not doc is Nothing
  Call doc.ComputeWithForm( False, False )
  Call doc.Save( True, true, True )
  Set doc = dc.GetNextDocument( doc )
Wend

当然你可以——而不是仅仅刷新所有文档——将该代码添加到你现有的代码中:

Set nvwQueuedOrderLines = dbCurrent.Getview("QueuedOrderLines")
Dim docOrderRegel As NotesDocument
Set docOrderRegel = nvwQueuedOrderLines.GetFirstDocument

If not docOrderRegel.HasItem( "Status" ) then
  Call docOrderRegel.ComputeWithForm( False, False )
End If

If docOrderRegel.Status(0) = "QUEUED" Then

我假设字段/项目在那里,但您只是在调试器会话中看不到它。

正如上面的评论所讨论的:LotusScript 调试器对每个文档对象可以显示的项目数量有限制。显然,该限制是 256 项。调试器不处理项目数组中索引位置高于 255 的任何项目。

您的一个解决方案是添加一些类似于以下内容的临时代码:

Dim itemStatus as NotesItem
...
Set itemStatus = docOrderRegel.GetFirstItem("Status")

通过这种方式,您可以从 Status 字段创建一个专用的 NotesItem 对象,使其独立于所描述的限制。然后您应该能够在调试器会话中看到该项目的内容。