我在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末尾仅一次?
TL; DR:仅在最后保存一次。
这里有几件事要考虑:
首先:ReplaceItemValue-操作纯粹是对内存中文档的修改。它们不会触发任何数据库操作(也称为磁盘写入)。另一方面,“保存”操作会触发数据库操作。即使不考虑性能影响,这也应该足以节省成本。
但是现在让我们另外考虑每次更改项目后节省的解决方案的副作用:
您的代码可能会将文档从一种状态转移到另一种状态。为了完全实现这种转移,通常需要将所有项目更改为文档中的新状态。
代码永远不会100%无错误。即使是这样:在执行过程中,代码可能由于任何原因而失败。
无论是什么原因导致您的代码在前5个项目之后停止:如果保存每个更改,则文档将处于不一致状态,您需要编写代码以回滚更改或从代码保留并完成的地方开始变化。
最好做所有的转换,然后在所有步骤完成并保持一致时保存。
对此的一个例外是编写日志文档,您将进度添加行添加到日志中。如果您想从另一个地方观察进度,那么在每条日志输入行之后进行保存是正确的选择。但是,在其他很多情况下,这都是正确的。