我已经在Lotus(IBM)Notes / domino开发了大约25年的时间,我以前从未遇到过这个问题。
该应用程序基于Notes客户端,使用Notes 9。
我打开一个文档(DOC A),它使用FORM A.从这个文档中,有一个按钮来创建一个使用FORM B的新文档。这将在一个新窗口中打开。 DOC B不是DOC A的响应,但是一些(很多)LotusScript从DOC A复制到DOC B。
所以现在我们打开了3个窗口:原始应用程序,DOC A doc和DOC B.
我对DOC B进行了编辑,并将其保存。我关闭它,让DOC A打开,然后导航到可以找到DOC B的另一个视图。
询问文档属性字段列表以查看我编辑的字段(在我的情况下为“InvoiceComments”)。是的,我的文字就在那里。
然后我运行一个脚本代理,它获取DOC B并打印出InvoiceComments的内容。这是空白的。编写Web代理以获取相同的文档...我的文本可以在InvoiceComments中找到。
它绝对是同一个文件,同样是UNID等。
这就是:当查看文档属性,字段列表时,我可以在字段值中看到myy编辑。通过Notes客户端运行脚本以获取该文档时(通过UnprocessedDocument或从视图中),该字段具有“旧”值(空白)
我所知道的唯一线索是,如果我关闭DOC A,那么打印“InvoicComments”值的代理突然开始尊重磁盘上的内容(即它的行为)。 / p>
听起来像笔记本客户端中的一个错误,但我不知道如何绕过它,因为人们会想要执行上述过程。
答案 0 :(得分:3)
我在使用大型脚本库和全局变量时已经有了这个。
我需要大量的调试才能找出问题所在。
基本上问题是:只要代码中存在一个包含文档Doc A的变量ANYWHERE,那么来自任何上下文的任何脚本 - 运行将获得该文档的“旧”值(尽管前端显示你改变的项目值)。
删除文档B中任何代码中持有文档A的NotesDocument-对象,或使用Set .... = Nothing来防止这种情况发生。
因此,使用这两行中的任何一行都会有所帮助:
Delete docA
Set docA = Nothing
答案 1 :(得分:1)
我不能赞成这个代码,一位顾问写道,但也许这种模式可以解决你的问题:
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(令人沮丧地)将副本保留在内存中,因此他不得不采用这种想法。 (这是一个错误还是一个怪癖?)我认为这基本上是托尔斯滕的建议。