Несовпадение типов при работе с предметной строкой электронного письма (Lotusscript) - PullRequest
0 голосов
/ 09 марта 2012

Я запускаю Lotusscript Agent на «До получения почты». Мне нужно, чтобы захватить текст в строке темы после символа «#». Независимо от того, как я пытаюсь получить поле Subject (Evaluate, getFirstItem, getItemValue и т. Д.), Я всегда получаю сообщение об ошибке. Обычно это несоответствие типов или переменная объекта не установлена.

Код ниже является моим текущим кодом и возвращает ошибку 13 в строке 14 «несоответствие типов»

Option Public
Option Declare

Sub Initialize
    On Error GoTo ErrorHandler 
    Dim s As New NotesSession
    Dim db As NotesDatabase
    Dim view As NotesDocumentCollection
    Dim doc As NotesDocument
    Dim nextdoc As NotesDocument
    Dim result As String
    Set db = s.CurrentDatabase
    Set view = db.Unprocesseddocuments
    If Not view Is Nothing Then
        Set doc = view.Getfirstdocument()
        While Not doc Is Nothing
            result = Evaluate ("@Right(Subject;""#"")", doc)
            Print result
            Set nextDoc = view.GetNextDocument(doc)
            Call doc.Remove(True)
            Set doc = nextDoc
        Wend
    End If
    Print "End"
Done: 
    Exit Sub
ErrorHandler: 
    Select Case Err 
        Case Else 
            Print "Error " & CStr(Err) & " in agent on line " & CStr(Erl) & ": " & Error 
            Resume Done 
    End Select 
End Sub 

Ответы [ 2 ]

3 голосов
/ 12 марта 2012

Что касается исходного вопроса о Type Mismatch при использовании Evaluate, обратите внимание на справку дизайнера в разделе «Использование оператора Evaluate»:

" returnValue - это массив, в котором указан тип и количество элементов отразить результат формулы; скалярное значение возвращается элементу 0 массив. Вы должны использовать вариант для возвращаемого значения, так как вы может не знать, сколько элементов возвращается. "

Поэтому попробуйте следующие изменения:

    ...
    Dim result As Variant
    ...
    result = Evaluate (|@Right(Subject;"#")|, doc)
    ' Treat result as an array
    Print result(0)
    ...
3 голосов
/ 09 марта 2012

До прихода новой почты не возвращает NotesDocumentCollection. Используйте ...

Sub Initialize
    Dim Session As New NotesSession
    Dim Doc As NotesDocument
    Dim result As String
    Set Doc = Session.DocumentContext
    Let result = StrRight(Doc.Subject(0), "#")
End Sub

вместо UnprocessedDocuments ...

...