Получение изменений, внесенных агентом Java в документ
Я передаю параметры агенту Java из Lotus Script следующим образом:
Set db = session.CurrentDatabase
Set doc = db.CreateDocument
Set uiDoc = workspace.CurrentDocument
Call doc.AppendItemValue("fileName", "SomeString" )
Call doc.Save(True, False)
Set MyAgent = db.GetAgent("AgentName")
Call MyAgent.Run(doc.NoteID)
Set session = New NotesSession
Set db = session.CurrentDatabase
result = doc.GetItemValue("Result")(0)
Агент говорит следующее в Java:
Session session = getSession();
AgentContext agentContext = session.getAgentContext();
Agent agent = agentContext.getCurrentAgent();
Database db = agentContext.getCurrentDatabase();
Document doc = db.getDocumentByID(agent.getParameterDocID());
String fileName = doc.getItemValueString("fileName");
doc.appendItemValue("Result","MyResult");
doc.save();
Агент делает свою работу правильно. Я проверил документ параметра, и он действительно содержит результаты от агента. Однако моя форма не может прочитать параметр Result.
2 ответа
Решение
Вы должны сохранить документ в своем коде Java и перечитать документ в LotusScript после вызова вашего агента.
Документ In-Memory проще использовать, хотя:
LotusScript
MyAgent.RunWithDocumentContext(doc, doc.NoteID)
Джава
Document doc = agentContext.getDocumentContext()
Если по какой-то причине вы не можете использовать RunWithDocumentContext
(в более ранних версиях Lotus Notes) затем вам нужно снова открыть документ:
Set db = session.CurrentDatabase
Set doc = db.CreateDocument
Call doc.AppendItemValue("fileName", "SomeString" )
Call doc.Save(True, False)
noteID$ = doc.NoteID
Set MyAgent = db.GetAgent("AgentName")
Call MyAgent.Run(noteID$)
'Delete document from memory.
Delete doc
'Get updated document.
Set doc = db.GetDocumentByID(noteID$)
result = doc.GetItemValue("Result")(0)