Lotus notes “父”窗体打开时缺少Lotus Notes文档字段

Lotus notes “父”窗体打开时缺少Lotus Notes文档字段,lotus-notes,lotusscript,Lotus Notes,Lotusscript,我在LotusIBMNotes/domino中开发了大约25年,以前从未遇到过这种情况 该应用程序基于Notes客户端,使用Notes 9 我打开一个文档DOC a,它使用表单a。从该文档中,有一个按钮用于创建一个使用表单B的新文档。这将在一个新窗口中打开。DocB不是DocA的响应,但是很多LotusScript将fielse从DocA复制到DocB 现在我们打开了3个窗口:原始应用程序、DOC A DOC和DOC B 我对文档B进行编辑并保存它。我关闭它,保持文档A打开,然后导航到可以找到文

我在LotusIBMNotes/domino中开发了大约25年,以前从未遇到过这种情况

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

我打开一个文档DOC a,它使用表单a。从该文档中,有一个按钮用于创建一个使用表单B的新文档。这将在一个新窗口中打开。DocB不是DocA的响应,但是很多LotusScript将fielse从DocA复制到DocB

现在我们打开了3个窗口:原始应用程序、DOC A DOC和DOC B

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

查询文档属性字段列表,查看我在案例中编辑的InvoiceComments字段。是的,我的短信在那里

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

这肯定是同一份文件,同一份UNID等等

也就是说:当查看文档属性、字段列表时,我可以在字段值中看到myy编辑。当通过Notes客户端运行脚本以通过未处理文档或从视图获取该文档时,该字段的“old”值为空

关于发生了什么,我唯一的线索是,如果我关闭文档A,那么打印InvoicComments值的代理突然开始尊重磁盘上的内容,即,它的行为


听起来像是notes客户端中的一个bug,但我不知道如何绕过它,因为人们会希望执行上述过程。

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

我需要大量的调试来找出问题所在

本质上,问题是:只要代码中有一个变量保存文档Doc a,那么任何脚本(从任何上下文运行)都将获得该文档的旧值,尽管前端会向您显示更改的项值

从文档B中删除任何代码中保存文档A的NotesDocument-对象,或使用Set….=没有什么可以阻止这种情况发生

因此,使用这两行中的任何一行都将有助于:

Delete docA
Set docA = Nothing

不久前,我在处理大型脚本库和全局变量时遇到过这种情况

我需要大量的调试来找出问题所在

本质上,问题是:只要代码中有一个变量保存文档Doc a,那么任何脚本(从任何上下文运行)都将获得该文档的旧值,尽管前端会向您显示更改的项值

从文档B中删除任何代码中保存文档A的NotesDocument-对象,或使用Set….=没有什么可以阻止这种情况发生

因此,使用这两行中的任何一行都将有助于:

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,当你把它作为UiDoc打开时,Notes令人沮丧地在内存中保留了一个副本,所以他不得不求助于这个想法。这是一个错误还是一个怪癖?我认为这基本上也是托尔斯滕所建议的。

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

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,当你把它作为UiDoc打开时,Notes令人沮丧地在内存中保留了一个副本,所以他不得不求助于这个想法。这是一个错误还是一个怪癖?我认为这也是托尔斯滕的建议。

非常感谢您的回答!啊,是的,我已经被很多次发现了-但是这是我认为稍微不同的,在文档DOC a或DOC B上持有句柄的例程都已经完成了,所以对象应该是垃圾收集的。。听起来像是这个问题,一个引用文档B的对象需要仍然在内存中,可能是以文档A的形式?希望这是有意义的。在例程结束时,我将尝试将其设置为nothing,以防这是一个垃圾收集错误,我试图复制,有时是没有垃圾收集的文档,只要文档所在的数据库对象中有一个对象。。。试着删除它…我在例程的末尾添加了一个删除行,它创建了文档B来销毁它,因为它是例程的结尾,而notesdocument是该例程的本地文档。。成功了!非常感谢您的及时回复我搜索了大约一周来了解这个问题。。。从那时起,我几乎删除了所有的对象。。。很高兴听到这个简单的tipp帮助了你…在迭代大型文档集合或视图时,Delete也非常有帮助。在完成当前文档时,Delete也非常有帮助。否则,你的内存会耗尽
回答!啊,是的,我已经被很多次发现了-但是这是我认为稍微不同的,在文档DOC a或DOC B上持有句柄的例程都已经完成了,所以对象应该是垃圾收集的。。听起来像是这个问题,一个引用文档B的对象需要仍然在内存中,可能是以文档A的形式?希望这是有意义的。在例程结束时,我将尝试将其设置为nothing,以防这是一个垃圾收集错误,我试图复制,有时是没有垃圾收集的文档,只要文档所在的数据库对象中有一个对象。。。试着删除它…我在例程的末尾添加了一个删除行,它创建了文档B来销毁它,因为它是例程的结尾,而notesdocument是该例程的本地文档。。成功了!非常感谢您的及时回复我搜索了大约一周来了解这个问题。。。从那时起,我几乎删除了所有的对象。。。很高兴听到这个简单的提示帮助了你…在迭代大型文档集合或视图时,删除也非常有用。在完成当前文档时,删除。否则,你的内存不足。Tanks Duston-至少我现在有一些东西要尝试:-谢谢Duston-至少我现在有一些东西要尝试:-