Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: seal am 27.02.12 - 17:23:26

Titel: Rückgabe von Java nach LS
Beitrag von: seal am 27.02.12 - 17:23:26
Hallo zusammen,

ich habe ein kleines Problem bei dem ihr mir bestimmt helfen könnt.
Es geht um folgendes:

Ich habe mit Java einen Taschenrechner gebaut, und will jetzt per Button das Ergebnis in ein Feld des geöffnete NotesDocument schreiben.
Ich starte den Java Agenten mit einem LS-Notes Agenten, da ich dachte, das ich so besser die Rückgabe kontrollieren und weiter verarbeiten kann.

Hier der Auszug aus meinem Java Agent:

Code
public class JavaAgent extends AgentBase {

	private Calculator calc = null;
	
	public void NotesMain() {
		
		//Aufruf des Rechners
		calc = new Calculator(this);
		while(calc != null) {			
			try {
				//einfachmal ein wenig schlafen, so lange Eingabemaske offen
				Thread.sleep(1000 * 10);
				System.out.println("snoozing...");
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
	
	
	public void callBack(double callBackResult) {
		try {
			NotesThread.sinitThread();
			Session session = this.getSession();
			AgentContext agentContext = session.getAgentContext();
			Database db = agentContext.getCurrentDatabase();
			Agent ag = agentContext.getCurrentAgent();
			Document doc = db.getDocumentByID(ag.getParameterDocID());
			
			// Ausgaben der DOC ID
			System.out.println("Doc in JEE:" + doc.getNoteID());
			
			//schreib in das Feld Test den Wert aus CallBackresult
			doc.replaceItemValue("test", ""+callBackResult);
			
			//Mal schauen was drin steht	
			System.out.println("Doc test:" + doc.getItemValueString("test"));

			doc.save();
			
			//Rechnerfesnter schließen
			calc.window.dispose();
			calc = null;
			NotesThread.stermThread();
		} catch (NotesException e) {
			e.printStackTrace();
		}
	}

Hier der LS-Agent:

Code
	Set uiDoc = ws.currentDocument
	Set db = session.CurrentDatabase
	Set doc = db.Createdocument()
	Call doc.save(True, true)
	Set agent = db.GetAgent( "(Calculator)")
	
	'Java agenten aufrufen und Doc übergeben
	Call agent.run(doc.NoteID)
	
	'Hier erwarte ich eigentlich die Rückgabe aus dem Testfeld, das ich in Java schreibe
	MsgBox "Ich bin das Ergebnis:" + CStr(Doc.test(0))

Was mach ich den falsch? vermutlich recht viel :-) Aber ich denke mir doch wenn ich mir das neu erstellte Dokument hole, in Java ein Wert in ein Testfeld schreibe, was ja auch funktioniert und es mir vorne auslesen will, das der Wert dann da sein sollte. Ich bekomme aber eine leere Messagebox. Kann ich das überhaupt so machen?

Vielen lieben Dank,
seal

Titel: Re: Rückgabe von Java nach LS
Beitrag von: Peter Klett am 27.02.12 - 17:27:37
Du musst doc verwerfen und neu holen

Dim id As String
id = doc.UniversalID
Call agent.run(doc.NoteID)
Delete doc
Set doc = db.GetDocumentByUnid (id)

dann kannst Du den Wert auslesen (ungetestet, wird aber klappen)
Titel: Re: Rückgabe von Java nach LS
Beitrag von: seal am 27.02.12 - 17:34:15
ES FUNKTIONIERT :-)

Vielen Vielen DANK.
Titel: Re: Rückgabe von Java nach LS
Beitrag von: Werner Götz am 28.02.12 - 15:04:37
Ab 8.5.2 sollte das auch mit einem "In-Memory Document" funktionieren:
NotesAgent.RunWithDocumentContext(doc As NotesDocument, noteID As String) As Integer