Lotus notes 无法使用lotusscript检索字段

Lotus notes 无法使用lotusscript检索字段,lotus-notes,lotus-domino,lotusscript,Lotus Notes,Lotus Domino,Lotusscript,我有一个带有字段的notes文档。在这个文档中,我创建了一个新字段(称为Status),它具有以下文本值:QUEUED。 现在,如果我通过以下方式从视图中获取文档: Set nvwQueuedOrderLines = dbCurrent.Getview("QueuedOrderLines") Dim docOrderRegel As NotesDocument Set docOrderRegel = nvwQueuedOrderLines.GetFirstDocument 最终得到数据: If

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

Set nvwQueuedOrderLines = dbCurrent.Getview("QueuedOrderLines")
Dim docOrderRegel As NotesDocument
Set docOrderRegel = nvwQueuedOrderLines.GetFirstDocument
最终得到数据:

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

然后,在调试器中检查docOrderRegel的项时,我没有看到任何状态项/字段。。但当右键单击文档中的文档属性(在Lotus client中)时,我会看到带有值的项/字段状态。。 我可以在调试器中看到的所有其他字段,但不包括此状态字段。 如何在我的docOrderRegel对象中也获取字段。

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

无论何时创建文档,它都会在此时采用表单,并在创建文档时为表单上的所有字段创建项

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

但是:在您显式执行此操作之前,它们不会保存到文档中

这个过程是纯前端的

Notes不会仅仅因为更改了相应表单中的某些内容而自动更改现有文档(即创建一个值为“QUEUED”的新字段“Status”)。 这就是脚本无法获取该项的原因(除非打开文档并且表单中的字段成为项)

使用对表单所做的更改更新文档有多种方法。 第一个是:在前端打开所有文档并保存它们…但这非常耗时

您可以使用公式代理更新文档。 只需选择“无”作为目标(这一点很重要,因为我们需要使用@命令,它们不适用于任何目标),并输入以下公式:

@命令([ToolsRefreshSelectedDocs])

然后选择要刷新的文档并在其上运行代理

您还可以使用LotusScript代理。此代理需要在选定文档上运行:

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
在Notes/Domino表单中(=设计)和文档是不同的(或多或少)独立的东西

无论何时创建文档,它都会在此时采用表单,并在创建文档时为表单上的所有字段创建项

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

但是:在您显式执行此操作之前,它们不会保存到文档中

这个过程是纯前端的

Notes不会仅仅因为更改了相应表单中的某些内容而自动更改现有文档(即创建一个值为“QUEUED”的新字段“Status”)。 这就是脚本无法获取该项的原因(除非打开文档并且表单中的字段成为项)

使用对表单所做的更改更新文档有多种方法。 第一个是:在前端打开所有文档并保存它们…但这非常耗时

您可以使用公式代理更新文档。 只需选择“无”作为目标(这一点很重要,因为我们需要使用@命令,它们不适用于任何目标),并输入以下公式:

@命令([ToolsRefreshSelectedDocs])

然后选择要刷新的文档并在其上运行代理

您还可以使用LotusScript代理。此代理需要在选定文档上运行:

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")

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

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

正如通过上面的注释所讨论的:LotusScript调试器对每个文档对象可以显示的项目数有一个限制。显然,该限制是256个项目。存储在项目数组中索引位置高于255的任何项目都不会由调试器处理

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

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

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

在视图中右键单击已关闭的文档时,您是否仍在属性中看到该字段?如果不是,则可能是一个字段“为显示而计算"字段…检查状态项的类型。如果是RichText或Mime,您可能会在“属性”框中看到该值,但获取该值的难度更大work@LotharMueller当文档关闭时,我仍然可以看到属性。数据类型是Text@Newbshm-tricky。在调试器中,您从该文档中看到多少项?有一个愚蠢的限制,即I可以在调试器中显示的TEM(我认为限制为256)。可能是这种情况吗?如果不是-只是为了确定:您是否可以构建一个测试视图并将状态字段显示为列值?是否显示有问题的文档的状态字段?在视图中右键单击关闭的文档时,您是否仍在属性中看到该字段?如果不是,则可能是一个“计算以显示”字段…请检查类型o