Метод NotesAgent.Run всегда возвращает 0 независимо от того, что

Все,

У меня следующая проблема. Я хочу запустить агент и хочу, чтобы он сообщал обратно вызывающему сценарию, если все прошло хорошо или что-то пошло не так.

Я попытался использовать решение, которое кажется очевидным, возвращаемое значение NotesAgent.Run

Мой агент выглядит так (подпрограмма Terminate пуста)

Sub Initialize
    Set ws = New NotesUIWorkspace
    Set uidoc = ws.Currentdocument
    Set doc = uidoc.Document
    Set pass = doc.Getfirstitem("Passcode")
    Error 1144
    ' log information here
End Sub

Я звоню (или запускаю, если вы можете) агент, как это

Sub Click(Source As Button)
    Dim session As New NotesSession
    Dim db As NotesDatabase
    Dim agent As NotesAgent

    Set db = session.CurrentDatabase

    Set agent = db.GetAgent("MyAgent")

    returnVal% = agent.Run
    Messagebox "It returned " & returnVal%
End Sub

Если я выношу оператор Error, журналы обновляются, и этого не происходит, если я оставляю там оператор Error, так что это определенно вызывает ошибку. Но окно Message всегда печатает упорно "Он вернулся 0". Я также попытался поместить заявление об ошибке в завершение. Результат был такой же, к сожалению..

Не могли бы вы, пожалуйста, указать мне, куда я иду в этом направлении? Я ожидал, что это будет просто.

Спасибо

С наилучшими пожеланиями, Карлос

2 ответа

Этот метод возвращает значение, указывающее, что агент запущен или не запущен. Он не возвращает результат самого агента. Если агент запущен, но во время работы агент допустил ошибку, этот метод возвращает 0, поскольку агент запущен.

0. Чтобы получить статус от агента, вы можете использовать документ в памяти, как описано здесь.
Ваш агент:

Sub Initialize
    Set ws = New NotesUIWorkspace
    Set uidoc = ws.Currentdocument
    Set doc = uidoc.Document
    Set pass = doc.Getfirstitem("Passcode")

    Dim ses As New NotesSession
    Dim docContext = ses.DocumentContext
    Call docContext.ReplaceItemValue("ReturnVal", 1444)
    ' log information here
End Sub

Позвоните агенту так:

Sub Click(Source As Button)

    Dim session As New NotesSession
    Dim db As NotesDatabase
    Dim agent As NotesAgent
    Dim doc As NotesDocument

    Set db = session.CurrentDatabase
    Set doc = db.CreateDocument

    Set agent = db.GetAgent("MyAgent")

    Call agent.RunWithDocumentContext(doc)

    returnVal% = doc.ReturnVal(0)
    Messagebox "It returned " & returnVal%

End Sub


1. Если вы не можете использовать документ в памяти, вам нужно сохранить документ и открыть его снова.
Ваш агент:

Sub Initialize
    Set ws = New NotesUIWorkspace
    Set uidoc = ws.Currentdocument
    Set doc = uidoc.Document
    Set pass = doc.Getfirstitem("Passcode")

    Dim ses As New NotesSession
    Dim agent As NotesAgent
    Dim db As NotesDatabase
    Dim docContext As NotesDocument

    Set agent = ses.CurrentAgent
    Set db = ses.CurrentDatabase

    Set docContext = db.GetDocumentByID(agent.ParameterDocID) 
    Call docContext.ReplaceItemValue("ReturnVal", 1444)
    Call docContext.Save(False, False)
    ' log information here
End Sub

Позвоните агенту так:

Sub Click(Source As Button)

    Dim session As New NotesSession
    Dim db As NotesDatabase
    Dim agent As NotesAgent
    Dim doc As NotesDocument

    Set db = session.CurrentDatabase
    Set doc = db.CreateDocument
    Call doc.Save(False, False)

    noteID$ = doc.NoteID

    Set agent = db.GetAgent("MyAgent")

    Call agent.Run(noteID$)

    Delete doc

    Set doc = db.GetDocumentByID(noteID$)

    returnVal% = doc.ReturnVal(0)
    Messagebox "It returned " & returnVal%

    Call doc.Remove(True)

End Sub

Я считаю, что вам нужно использовать метод RunOnServer(), который согласно документации является синхронным:

http://www.ibm.com/developerworks/lotus/library/ls-Troubleshooting_agents_ND5_6/

Sub Click(Source As Button)
    Dim session As New NotesSession
    Dim db As NotesDatabase
    Dim agent As NotesAgent

    Set db = session.CurrentDatabase

    Set agent = db.GetAgent("MyAgent")

    returnVal% = agent.RunOnServer()
    Messagebox "It returned " & returnVal%
End Sub
Другие вопросы по тегам