2012-01-30 88 views
0

我正在尝试在Lotus Notes中为表单编写日志记录系统,但是我不知道如何追加有关在日志中更改的字段的信息领域。有3个字段使用Log_Date(日期),Log_User和Log_Actions(文本,允许多个值)。在Lotus Notes中使用多值字段

我想如果我将逗号添加到日志字段,它将在显示表单时创建一个新行,但我仍然在案例2行中获得类型不匹配。

如何将新值附加到日志字段?

Sub Querysave(Source As Notesuidocument, Continue As Variant) 
    ' Compare the values in the form after it is saved with its original values when the document is not a new document.  
    Dim doc As NotesDocument 
    Set doc = Source.Document 

    Dim session As New NotesSession 
    Dim user As String 
    user = session.CommonUserName 

    If newDoc Then 
     doc.Log_Date = Now()  
     doc.Log_User = user 
     doc.Log_Actions = "New document created." 
    Else   
     ' Load fields value to the array 
     lastValues(0) = doc.QCR_No(0) 
     lastValues(1) = doc.QCR_Mobile_Item_No(0) 
     lastValues(2) = doc.QCR_Qty(0) 

    ' Compared each value in the array to see if there is any difference 
     Dim i As Integer 
     For i = 0 To 2 
      If lastValues(i) <> originalValues(i) Then 
       Select Case i 
       Case 2 : doc.Log_Actions = doc.Log_Actions & "," & "Field QCR_Qty is changed" 
       End Select 
      End If 
     Next 
    End If 
End Sub 

回答

2

doc.Log_Actions返回notesitem。要访问您需要使用的值doc.Log_Actions(0)

+0

如果他将其作为Log_Actions(0)来处理,并且不会更改代码中的其他任何内容,那么他​​将不会将其视为多值项目。他只会用逗号分隔的列表创建单个值。如果他在Notes UI中打开文档,编辑并保存该文档,可能会导致出现奇怪的行为。也就是说,如果该字段设置为多值并带逗号分隔符显示,则保存操作将把它分解为多个值,然后下一次他的代码运行时,它将再次追加到第一个值。 – 2012-01-30 22:12:54

+0

绝对如此,我只处理类型不匹配错误。 – 2012-01-31 07:33:56

2

在LotusScript后端类(例如NotesDocument,NotesItem)中,多值字段由数组表示,每个数组的元素值为一个值。为了设置一个字段的值,doc.Log_Actions是简写(他们在Domino Designer帮助中称之为“扩展语法”),用于分配数组的第一个(即零下标)元素,但这不适用于获取值。要获得第一个值,您必须使用doc.Log_Actions(0)。要获取或设置第二个值,您必须使用doc.Log_Actions(1)。

所以,你的案例2的代码看起来是这样的:

doc.Log_Actions(1) = "Field QCR_Qty is changed" 

我的猜测,但是,你真的希望能够不断地追加到每一个时间值的列表中该代码的末尾运行。如果(出于任何原因!)Log_Actions项目不存在于文档中,您也希望您的代码健壮并且不会炸毁您的代码。对于这一点,你会想这样做:

dim actionsItem as NotesItem 
if doc.hasItem("Log_Actions") then 
    set actionsItem = doc.getFirstItem("Log_Actions") 
    call actionsItem.AppendToTextList("Field QCR_Qty is changed") 
end if 
+0

忘了提及..你会想要一个else子句创建缺少的NotesItem,然后赋值给第0个元素。 – 2012-01-31 01:18:51

+0

它说:“设置一个字段的值,doc.Log_Actions是简写...用于分配数组的第一个(即,零下标)元素” - 但我认为你可以分配一个完整的数组值.field = array,你会得到一个多值列表分配。如果你只想要一个值,然后从数组中选择它(通常是第0个元素)doc.field = val(0) – andora 2014-07-24 09:29:48

1

或者,

If (Not doc.HasItem("LogActions")) Then 
    doc.LogActions = "Field QCR_Qty is changed" 
Else 
    doc.LogActions = ArrayAppend(doc.LogActions,"Field QCR_Qty is changed") 
End If 

这相当于NotesItem方法,通过rhsatrhs,你用的是偏好的问题。

+0

我喜欢arrayAppend扭曲 - 很好。 – 2013-11-21 20:51:50