“父”表单打开时缺少Lotus Notes文档字段

时间:2018-03-29 15:50:15

标签: lotus-notes lotusscript

我已经在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>

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

2 个答案:

答案 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(令人沮丧地)将副本保留在内存中,因此他不得不采用这种想法。 (这是一个错误还是一个怪癖?)我认为这基本上是托尔斯滕的建议。