Сколько раз использовать 'Call do c .save (True, False) в коде? - PullRequest
1 голос
/ 10 января 2020

Я кодирую агента в 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

Вопрос:

Каков рекомендуемый способ поставить следующую строку для сохранения документа?:

Call do c .save (True, False)

После каждого Set item = doc.ReplaceItemValue или только один раз в конце Sub?

1 Ответ

2 голосов
/ 10 января 2020

TL; DR: сохранять только ОДИН РАЗ в конце.

Здесь необходимо учитывать несколько моментов:

Прежде всего: операции ReplaceItemValue - это чисто модификации к документу в памяти. Они не запускают какие-либо операции с базой данных (или запись на диск). С другой стороны, операция «Сохранить» запускает операции с базой данных. Даже без учета влияния на производительность это должно быть достаточной причиной, чтобы сэкономить как можно более экономно.

Но теперь давайте дополнительно рассмотрим побочные эффекты решения, которое сохраняется после каждого изменения элемента:

Ваш код может переносить документ из одного состояния в другое. Чтобы полностью выполнить эту передачу, обычно ВСЕ элементы должны быть переведены в новое состояние в документе.

Код НИКОГДА не 100% без ошибок. И даже если это так: код может потерпеть неудачу по любой причине в середине выполнения.

Независимо от причины остановки вашего кода после первых 5 элементов: если вы сохраняете каждое отдельное изменение, ваш документ будет в несогласованном состоянии, и вам нужно будет написать код для отката изменений или начать там, где Оставьте код и внесите изменения.

Лучше сделайте ВСЕ ваши преобразования, а затем сохраните в самом конце, когда все будет сделано и согласованно.

Единственным исключением для этого является написание журнальных документов, в которые вы добавляете строки добавления прогресса в журнал. Если вы хотите наблюдать за прогрессом из другого места, то сохранение после каждой записи в журнале будет правильным решением. Но есть не так много других сценариев ios, где это было бы правдой.

...