将文本添加到注释文档字段中时,对象变量未设置问题

时间:2019-04-02 07:14:33

标签: lotus-notes lotus-domino lotusscript lotus

我确实创建了一个新表单,其中有一个包含2列的表格。

此表的最后一行是status

我想这样做:当我的Notes Agent运行时,它将通过几个操作步骤。如果执行了其中一个步骤,则应将此操作的结果添加到我定义的单元格中。

类似这样的东西:

----------------------------------------
| 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 个答案:

答案 0 :(得分:2)

首先:在没有错误处理程序的情况下,切勿编写甚至一行代码。 也就是说:最简单的错误处理程序是

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与您在文档或Profile文档中设置的特定键一起使用以存储此信息。或至少使用DocumentUniqueId,因为在每个副本中都相同(尽管重新创建问题保持不变)