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

问题描述 投票:0回答:1

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

这张表的最后一行是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

不幸的是我总是收到这样的信息

对象变量未设置

我不确定缺少什么,如果这实际上是如何在代码中实现我的想法的正确方法。我希望你对我有一个想法/暗示。谢谢。

lotus-notes lotus-domino lotusscript lotus
1个回答
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  

但是等待:WHICH对象变量没有设置?

它的“sess”,你只写道:

Dim sess as NotesSession

分配,但没有设置......你需要:

Dim sess as New NotesSession

或者如果你想在分配db之前保留你的行:

Set sess = New NotesSession

其他建议:通过其NoteID查找文档并不是一个好主意,硬编码更糟糕:NoteId在不同的副本中发生了变化。同一文档将在数据库的另一个副本中具有不同的NoteId(例如,本地副本或群集)。如果有人删除该文档并重新创建它,那么您需要更新代码。使用已排序的视图和GetDocumentByKey以及您在文档中设置的特定键或配置文件文档来存储此信息。或者至少使用DocumentUniqueId,因为这在每个副本中都是相同的(尽管娱乐问题保持不变)

© www.soinside.com 2019 - 2024. All rights reserved.