【问题标题】:Lotus Notes document fields missing while 'parent' form is open“父”表单打开时 Lotus Notes 文档字段丢失
【发布时间】:2018-03-29 15:50:15
【问题描述】:

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

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

我打开一个使用 FORM A 的文档 (DOC 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 等等。

也就是说:查看文档属性、字段列表时,我可以在字段值中看到我的编辑。通过 Notes Client 运行脚本以获取该文档(通过 UnprocessedDocument 或从视图)时,该字段具有其“旧”值(空白)

我所知道的唯一线索是,如果我关闭 DOC A,那么打印“InvoicComments”值的代理会突然开始尊重磁盘上的内容(即它的行为)。

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

【问题讨论】:

    标签: lotus-notes lotusscript


    【解决方案1】:

    前段时间我在处理大型脚本库和全局变量时遇到过这种情况。

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

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

    要么从文档 B 的任何代码中删除包含文档 A 的 NotesDocument- 对象,要么使用 Set .... = 没有什么可以防止这种情况发生。

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

    Delete docA
    Set docA = Nothing
    

    【讨论】:

    • 非常感谢您的回答!啊,是的,我已经被抓了很多次了-但是(我认为)略有不同,因为持有该文档(DOC A或DOC B)句柄的例程都已完成,因此对象将(应该)被垃圾收集..听起来像是这个问题,引用 DOC B 的对象仍需要在内存中,可能是 DOC A 的形式? (希望这是有道理的)。我会尝试在例程结束时将其设置为空,以防这是一个垃圾收集错误
    • 我努力重现,有时只要有一个对象持有文档所在的 DATABASE 对象,就没有垃圾收集的文档...尝试删除它...
    • 我在创建 DOC B 的例程末尾添加了一个删除行来删除它(无论如何都应该被销毁,因为它是例程的结尾,并且 notesdocument 是该例程的本地文件)..有效 !非常感谢您的及时答复
    • 我搜索了大约一周以了解该问题...从那以后我几乎删除了所有对象...很高兴听到这个简单的提示对您有所帮助...
    • "Delete" 在迭代大型文档集合或视图时也非常有用(使用当前文档完成后删除),否则内存不足
    【解决方案2】:

    我不能把这段代码归功于顾问写的,但也许这种模式可以解决你的问题:

    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(令人沮丧)也会在内存中保留一份副本,因此他不得不求助于这个想法。 (这是一个错误还是只是一个怪癖?)我认为这基本上也是 Torsten 所建议的。

    【讨论】:

    • 谢谢 Duston- 至少我现在有一些东西可以尝试 :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多