Обновление документов лотоса с помощью запланированного агента

У меня есть ошибка в вычисляемом текстовом поле для отображения. Для каждого документа я открываю его в режиме редактирования и пересохраняю, чтобы исправить его. У меня такая же проблема со многими базами данных и документами. Пробовал поправить агентом по всей базе с функцией EditDocument в uiworkspace. Следующее:

Option Public
Option Declare

Sub Initialize

Dim session As New NotesSession
Dim db As NotesDatabase
Dim col As NotesDocumentCollection
Dim view As NotesView
Dim doccand As NotesDocument
Dim doc As NotesDocument
Dim result As Integer
Dim uiwks As New NotesUIWorkspace
Dim uidoc As NotesUIDocument

Set db  = session.Currentdatabase
Set col = db.Unprocesseddocuments
Set docCand =  col.getfirstdocument

On Error Resume next

While Not docCand Is Nothing
    Set uidoc =  uiwks.Editdocument(True, docCand)
    Call uidoc.save
    Call uidoc.close(True)
    Set docCand =  view.getNextdocument(docCand)
Wend

End Sub

Эта функция исправляет проблему только тогда, когда я запускаю ее из моего клиента Notes. Это не работает как запланированная задача на сервере домино. Я пробовал с помощью calculatewithform без uiworkspace, и он тоже не работает. У кого-нибудь есть способ обновить с помощью редактирования и сохранения документа в запланированном агенте?


person user3082877    schedule 17.10.2015    source источник
comment
Если он вычисляется для отображения, он не сохраняется и пересчитывается каждый раз, когда кто-то открывает документ для чтения. Если вы исправили формулу, никто не должен увидеть ошибку, я не вижу смысла обновлять.   -  person Richard Schwartz    schedule 17.10.2015
comment
Это поле вычисляется для отображения и сохраняется при последнем сохранении документа. я должен переключиться в режим редактирования, чтобы увидеть исправление.   -  person user3082877    schedule 18.10.2015
comment
Разница между вычисляемым полем и полем, вычисляемым для отображения, заключается в том, что поля, вычисляемые для отображения, НЕ сохраняются в документе и вычисляются ТОЛЬКО при открытии документа для отображения.   -  person David Navarre    schedule 03.11.2015


Ответы (2)


вычисляется для отображаемого текстового поля

Поля такого типа не сохраняются в документах, это то же самое, что и вычисляемый текст.

О вашем решении:

NotesUIWorkspace и EditDocument нельзя использовать в агентах расписания, которые работают в фоновом режиме (т.е. на сервере), а только из пользовательского интерфейса (поэтому они работают при запуске LN).

Вам нужно использовать ComputeWithForm метод из NotesDocument. Он будет обновлять документы в фоновом режиме (нет необходимости открывать/сохранять его).

While Not docCand Is Nothing
    Call docCand.ComputeWithForm(False, False)
    Call docCand.save
    Set docCand = col.getNextdocument(docCand)
Wend

Обратите внимание, в вашем сценарии есть проблема, вы пытаетесь получить следующий документ из представления, которое не инициализировано. Я думаю, вы хотите использовать col вместо этого.

Set docCand =  view.getNextdocument(docCand)
person Dmytro Pastovenskyi    schedule 17.10.2015

Вычисляемые для отображения поля не должны сохраняться. Вы не должны делать обновление.

Есть только одно известное мне обстоятельство, при котором сохраняется значение поля, вычисляемого для отображения. Это происходит, когда поле в форме изначально спроектировано как обычное вычисляемое поле, но затем кто-то изменяет его на вычисляемое для отображения. Исходные вычисляемые поля были сохранены как элементы в сохраненном документе, и даже после изменения поля на вычисляемое для составленных заметок будут по-прежнему отображаться сохраненные значения. Если это то, что происходит, то вам действительно нужно запустить агент для удаления сохраненных значений. Например.,

FIELD myFieldThatUsedToBeComputedButIsNowCFD := @DeleteField;
person Richard Schwartz    schedule 18.10.2015