Получение изменений, внесенных агентом 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)
Другие вопросы по тегам