Переменная объекта не задает проблему при добавлении текста в поле документа заметок - PullRequest
0 голосов
/ 02 апреля 2019

Я создал новую форму, где у меня есть таблица с двумя столбцами.

Последняя строка этой таблицы - status.

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

Примерно так:

----------------------------------------
| First action was done successfully.  |
| Second action was done successfully. |
| Third action was done successfully.  |
----------------------------------------

Я попробовал следующий код:

Sub Initialize
    Dim sess As NotesSession    
    Dim db As NotesDatabase
    Dim doc As NotesDocument    
    Dim item As NotesItem

    Set db = sess.CurrentDatabase    
    Set doc = db.GetDocumentById("100B")

    'do some code stuff.....

    Set item = doc.AppendItemValue( "field_Status", "First action was done successfully." & Chr(13) )
    Call doc.Save( False, True )

    'do some code stuff.....

    Set item = doc.AppendItemValue( "field_Status", "Second action was done successfully." )
    Call doc.Save( False, True )
End Sub

К сожалению, я всегда получаю это сообщение:

Переменная объекта не установлена ​​

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

1 Ответ

2 голосов
/ 02 апреля 2019

Прежде всего: НИКОГДА не пишите ни одной строки кода без обработчика ошибок. Тем не менее, самый простой обработчик ошибок будет

On Error Goto ErrorHandler

...your complete code goes here

EndOfRoutine:
  Exit Sub
ErrorHandler:
  Messagebox Err & "," & Error & " in line " & Erl
  Resume EndOfRoutine

Это дало бы вам эту строку ошибки:

Set db = sess.CurrentDatabase  

Но подождите: какая переменная объекта не установлена?

Это "sess", как вы только что написали:

Dim sess as NotesSession

Назначено, но не установлено ... вам нужно либо:

Dim sess as New NotesSession

Или, если вы хотите сохранить свою линию, то непосредственно перед назначением db:

Set sess = New NotesSession

Дополнительный совет: поиск документа по его NoteID не является хорошей идеей, а жесткое кодирование - еще хуже: NoteId изменяется в разных репликах. Этот же документ будет иметь другой NoteId в другой реплике базы данных (например, в локальной реплике или в кластере). И если кто-то удаляет этот документ и воссоздает его, вам необходимо обновить код. Используйте отсортированный вид и GetDocumentByKey с определенным ключом, который вы установили в своем документе или документе профиля, для хранения этой информации. Или, по крайней мере, используйте DocumentUniqueId, так как он одинаков в каждой реплике (хотя проблема восстановления остается неизменной)

...