'parent' 表单打开时 Lotus Notes 文档字段丢失

Lotus Notes document fields missing while 'parent' form is open

我已经在 Lotus (IBM) Notes/domino 中进行了大约 25 年的开发,但我以前从未遇到过这种情况。

该应用程序基于 Notes 客户端,使用 Notes 9。

我打开一个文档 (DOC A),它使用 FORM A。在这个文档中,有一个按钮可以创建一个使用 FORM B 的新文档。这会在一个新的 window 中打开。 DOC B 不是 DOC A 的响应,但一些(很多)LotusScript 将字段从 DOC A 复制到 DOC B。

所以现在我们有 3 个 windows 打开:原始应用程序、DOC A 文档和 DOC B。

我对 DOC B 进行了编辑并保存。我关闭它,让 DOC A 保持打开状态,然后导航到可以找到 DOC B 的另一个视图。

查询文档属性字段列表以查看我编辑的字段("InvoiceComments" 在我的例子中)。是的,我的文字在那里。

然后我 运行 脚本代理获取 DOC B 并打印 InvoiceComments 的内容。它是空白的。编写 Web 代理来获取相同的文档...我的文本可以在 InvoiceComments 中找到。

肯定是同一个文档,同一个 UNID 等等

那就是:在查看文档属性、字段列表时,我可以在字段值中看到我的编辑。当 运行通过 Notes 客户端获取该文档(通过 UnprocessedDocument 或从视图)的脚本时,该字段具有其 'old' 值(空白)

我唯一知道发生了什么的线索是,如果我关闭 DOC A,然后打印 "InvoicComments" 值的代理突然开始接受磁盘上的内容(即,它行为)。

听起来像是笔记客户端中的错误,但我不知道如何解决它,因为人们会想要执行上述过程。

我前段时间在处理大型脚本库和全局变量时遇到过这个问题。

我需要大量调试才能找出问题所在。

本质上的问题是:只要在保存文档 Doc A 的代码中有一个变量 ANYWHERE,那么任何脚本 -运行 来自任何上下文 - 都将获得 "old" 值该文档的(尽管前端向您显示更改的项目值)。

要么从文档 B 的任何代码中删除持有文档 A 的 NotesDocument- 对象,要么使用 Set .... = Nothing 来防止这种情况发生。

所以使用这两行中的任何一行都会有所帮助:

Delete docA
Set docA = Nothing

我不能相信这段代码是一位顾问写的,但也许这种模式可以解决您的问题:

Set doc=uidoc.Document
newentry=doc.CommentEntry(0)
id=doc.Universalid
Call uidoc.Fieldclear("CommentEntry") 
Call uidoc.Save
Call uidoc.Close(True)
Set doc=db.GetDocumentByUNID(id)
doc.CommentEntry=newentry

他发现即使你有一个带有有效 UNID 的 "valid" 文档对象,当你将它作为 UiDoc 打开时,Notes(令人沮丧地)会在内存中保留一份副本,所以他不得不求助于这个想法。 (这是一个错误还是一个怪癖?)我认为这基本上也是 Torsten 所建议的。