Метод 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