在代码中多次使用'Call doc.save(True,False)?

问题描述 投票:0回答:1

我在Lotus Script中编码代理。代码如下:

Sub Initialize
    ' * Some more code *
    Set item = doc.ReplaceItemValue("form_Initialize_Status01", "Command 1 successful run.")
    Set item = doc.ReplaceItemValue("form_Initialize_Status02", "Command 2 successful run.")
    ' * Some more code *

    Call Sub_Action()

    ' * Some more code *
    Set item = doc.ReplaceItemValue("form_Initialize_Status03", "Command 3 successful run.")
End Sub


Sub Sub_Action()
    ' * Some more code *
    Set item = doc.ReplaceItemValue("form_Sub_Action_Status01", "Command 1 successful run.")
    ' * Some more code *
    Set item = doc.ReplaceItemValue("form_Sub_Action_Status02", "Command 2 successful run.")
End Sub

问题:

放置以下行以保存文档的推荐方法是什么?:

调用doc.save(True,False)

在每个Set item = doc.ReplaceItemValue之后还是在Sub末尾仅一次?

lotus-notes lotus-domino lotusscript lotus
1个回答
0
投票

TL; DR:仅在最后保存一次。

这里有几件事要考虑:

首先:ReplaceItemValue-操作纯粹是对内存中文档的修改。它们不会触发任何数据库操作(也称为磁盘写入)。另一方面,“保存”操作会触发数据库操作。即使不考虑性能影响,这也应该足以节省成本。

但是现在让我们另外考虑每次更改项目后节省的解决方案的副作用:

您的代码可能会将文档从一种状态转移到另一种状态。为了完全实现这种转移,通常需要将所有项目更改为文档中的新状态。

代码永远不会100%无错误。即使是这样:在执行过程中,代码可能由于任何原因而失败。

无论是什么原因导致您的代码在前5个项目之后停止:如果保存每个更改,则文档将处于不一致状态,您需要编写代码以回滚更改或从代码保留并完成的地方开始变化。

最好做所有的转换,然后在所有步骤完成并保持一致时保存。

对此的一个例外是编写日志文档,您将进度添加行添加到日志中。如果您想从另一个地方观察进度,那么在每条日志输入行之后进行保存是正确的选择。但是,在其他很多情况下,这都是正确的。

© www.soinside.com 2019 - 2024. All rights reserved.