首页 > 解决方案 > @command([ToolsRefreshAllDocs]) 在 Lotus Notes 中不起作用

问题描述

我更改了我的 lotus notes 数据库中几个表单字段的属性。数据库中有 1000 多个文档。如果我打开每个文档然后保存并关闭它,为了反映该字段属性的更改,该字段正在更新。但是,对每 1000 多个文档手动执行这不是一个可行的解决方案。

我对此进行了调查,发现 @command([ToolsRefreshAllDocs]) 可以刷新视图中的所有文档。我用这个公式创建了一个代理,并尝试从视图中运行它。不幸的是,它不起作用并给出错误“文档留给处理 xxx,NoteID 导致错误 = xxx”。我试图查找有关此错误的任何信息,但找不到任何信息。

谁能帮我解决这个问题,让我知道为什么会出现这个错误以及如何解决这个问题。或者有没有其他方法可以刷新视图中的所有文档,以便为所有文档更新字段。

谢谢

标签: lotus-noteslotus-dominolotus-formula

解决方案


您为视图中文档的表单上的字段设置了输入验证公式或计算值公式。刷新导致该公式执行,但它失败了。这可能与您更改的属性有关,导致依赖于字段的公式对于某些文档失败,即使它在您手动测试的文档中工作正常。它可能您更改的属性无关,因为它可能只是在您进行更改之前刷新失败的文档。

这很难手动追踪。我在 Notes 早期使用的一种技术是创建两个文件夹。将一半文档移至一个文件夹,另一半移至另一个文件夹。在这两个文件夹中尝试刷新代理。如果它们都失败了,则每个文件夹中至少有一个文档存在问题。再创建两个文件夹并分成四组,然后在每个文件夹中再次尝试刷新。继续划分文档并刷新。每当您获得一个可以正确运行刷新代理的文件夹时,您就知道该文件夹中的所有文档都很好。继续划分和刷新出现错误的文件夹,直到最终只剩下一个文件夹中的一个文档。

不用说,当您拥有包含数千个文档的大型数据库时,这种蛮力分而治之的方法并不有趣。幸运的是,有更好的方法。您可以编写一个 LotusScript 代理,循环浏览您视图中的文档并调用 doc.ComputeWithForm(true,true),检查布尔返回值并设置一个项目值(例如,对于该值所在的每个文档,debugItemFailed 为“1” false. 然后使用 SELECT debugItemFailed = "1" 为自己创建一个新视图,您将看到所有存在验证或计算域问题的文档。

顺便说一句,这也是我很久没有在任何生产数据库中使用 [ToolsRefreshAllDocs] 的原因。我总是使用调用 ComputeWithForm 的 LotusScript 代理。


推荐阅读