2015-10-17 1 views
0

У меня есть ошибка при вычислении отображаемого текстового поля. Для каждого документа я открываю его в режиме редактирования и сохраняю его, чтобы исправить его. У меня такая же проблема во многих базах данных и документах. Я попытался исправить его агентом по всей базе с помощью функции 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. Он не работает как запланированная задача на сервере domino. Я пробовал с computewithform без uiworkspace, и он тоже не работает. У кого-нибудь есть способ обновления с помощью редактирования и сохранения документа в плановом агенте?

+0

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

+0

Он рассчитан для поля отображения, и он сохраняется при сохранении последнего документа. Мне нужно переключиться в режим редактирования, чтобы увидеть коррекцию. – user3082877

+0

Разница между вычисленным полем и вычисленным для поля отображения заключается в том, что вычисляемые для полей отображения НЕ сохраняются в документе и вычисляются ТОЛЬКО при открытии документа для отображения. –

ответ

3

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

Такой тип полей не сохраняются в документах, это вроде то же самое, как Компьютерной текст.

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

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) 
1

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

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

FIELD myFieldThatUsedToBeComputedButIsNowCFD := @DeleteField;