Использование поля нескольких значений в Lotus Notes - PullRequest
0 голосов
/ 31 января 2012

Я пытаюсь написать систему регистрации для формы в Lotus Notes, но я нахожусь в той части, где я не уверен, как добавить информацию о полях, которые изменяются в полях журнала. Есть 3 поля, в которых я использую Log_Date (дата), Log_User и Log_Actions (текст, допускается несколько значений).

Я подумал, что если я добавлю запятую в поле журнала, это создаст новую строку при отображении формы, но я все еще получаю несоответствие типов в строке случая 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

Ответы [ 3 ]

2 голосов
/ 31 января 2012

В внутренних классах LotusScript (например, NotesDocument, NotesItem) многозначное поле представлено массивом с одним значением на элемент массива. Для установки значения поля doc.Log_Actions является сокращением (они называют его «расширенный синтаксис» в справке Domino Designer) для назначения первого (т. Е. Нулевого индекса) элемента массива, но это не работает для получения значение. Чтобы получить первое значение, вы должны использовать doc.Log_Actions (0). Чтобы получить или установить второе значение, вы должны использовать doc.Log_Actions (1).

Итак, ваш код Case 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
2 голосов
/ 31 января 2012

doc.Log_Actions возвращает примечание. Для доступа к значению вам необходимо использовать doc.Log_Actions(0)

1 голос
/ 03 марта 2012

или

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, который вы используете, является вопросом предпочтения.

...