Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: AndreasWegener0815 am 24.05.11 - 11:52:08

Titel: Ärger mit Aufruf Java Klassen Member von LS
Beitrag von: AndreasWegener0815 am 24.05.11 - 11:52:08
Hallo Forum.
Ich habe eine Script library in java mit der Klasse Tools.. Dort möchte ich eine Funktion via LS im PostSave event aufrufen.
Die Parameter sind zwei Strings und das Session Objekt.
Leider erhalte ich bei der Übergabe des Session Objects immer eine „Type Mismatch „Fehlermeldung in Notes. Wenn ich das Session Objekt weg lasse funktioniert der Aufruf.
Sind die Java Sesion class und die Lotus script session class nicht kompatibel  ?
Dim ToolClassObj  As JavaObject
Dim js As New JAVASESSION
Dim ToolClass As JAVACLASS
Dim lSession As New Notessession()
Dim x As String
Set lDoc = Source.Document      
lSender="Hans Wurst"
lReceiver="Hans Wurst"      
Set ToolClass = js.GetClass ("Tools")
Set ToolClassObj = ToolClass.CreateObject ()
ToolClassObj.mSession = lSession      
Call ToolClassObj.SendCallInfoMailFromLS(lSender,lReceiver,Source lSession)

Leider kann ich auch in meiner script library keine session erzeugen, da es sich hier nicht um einen Agenten handelt.
Eventuell hat jemand eine Idee ?
Vielen Dank und Gruß


Titel: Re: Ärger mit Aufruf Java Klassen Member von LS
Beitrag von: atbits am 24.05.11 - 12:02:00
Warum kannst Du in der ScriptLibrary keine Session erzeugen?
Dass es sich nicht um einen Agent handelt ist kein Grund.

aus der Hilfe ...

Code
import lotus.domino.*;
public class platform1 extends NotesThread
{
  public static void main(String argv[])
    {
        platform1 t = new platform1();
        t.start();
    }
  public void runNotes()
    {
    try
      {
        Session s = NotesFactory.createSession();
        // To bypass Readers fields restrictions
        // Session s = NotesFactory.createSessionWithFullAccess();
        String p = s.getPlatform();
        System.out.println("Platform = " + p);
      }
    catch (Exception e)
      {
        e.printStackTrace();
      }
    }
}
Titel: Re: Ärger mit Aufruf Java Klassen Member von LS
Beitrag von: AndreasWegener0815 am 24.05.11 - 13:04:36
Danke für den Tip.

Allerdings scheint es nicht zu funktionieren.
Sieht so aus, als ob NotesFactory.createSession(); keine Session erzeugt.
Was mich stutzig macht ist die folgende Meldung im stacktrace:
 "Cannot create a session from an agent"

nulljava.lang.NullPointerException
   at Tools.SendCallInfoMailFromLS(Unknown Source)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:48)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
   at java.lang.reflect.Method.invoke(Method.java:600)
   at lotus.domino.JavaConnectInvoker.invoke(Unknown Source)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:48)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
   at java.lang.reflect.Method.invoke(Method.java:600)
   at lotus.domino.JavaConnectLoader.invoke(Unknown Source)
NotesException: Cannot create a session from an agent
   at lotus.domino.local.Session.checkJavaConnect(Unknown Source)
   at lotus.domino.local.Session.createSession(Unknown Source)
   at lotus.domino.NotesFactory.createSession(Unknown Source)
   at Tools.runNotes(Unknown Source)
   at lotus.domino.NotesThread.run(Unknown Source)
Titel: Re: Ärger mit Aufruf Java Klassen Member von LS
Beitrag von: atbits am 24.05.11 - 13:07:32
Poste doch mal den Source

Erbt deine Klasse von NotesThread?

public class platform1 extends NotesThread
Titel: Re: Ärger mit Aufruf Java Klassen Member von LS
Beitrag von: AndreasWegener0815 am 24.05.11 - 13:12:26
Da isser :-).
gehe hierallerdings nicht über main sondern habe eine funktion init

Code
import java.util.Vector;

import lotus.domino.Database;
import lotus.domino.Document;
import lotus.domino.NotesException;
import lotus.domino.NotesFactory;
import lotus.domino.NotesThread;
import lotus.domino.RichTextItem;
import lotus.domino.Session;
public class Tools extends NotesThread

{ 
	Session mSession=null;
	//*************************************************************************************************	
	public Tools(){
	
	}
	public void init()
	{
		System.out.println("Init = ");
		Tools t = new Tools();
	    t.start();
		try {
			mSession = NotesFactory.createSession();
		} catch (NotesException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		  if (mSession == null )
	        	System.out.println("Session in init is null"); 
		System.out.println("msession = "+mSession.toString()); 
	}
	//*************************************************************************************************
	public void runNotes()
	    {
	    try
	      {
	        mSession = NotesFactory.createSession();
	        // To bypass Readers fields restrictions
	        // Session s = NotesFactory.createSessionWithFullAccess();
	        if (mSession == null )
	        	System.out.println("Session is null");
	        String p = mSession.getPlatform();
	        System.out.println("Platform runNotes = " + p);
	      }
	    catch (Exception e)
	      {
	        e.printStackTrace();
	      }
	    }
	//*************************************************************************************************
	public void SendCallInfoMailFromLS (String iSender,String iRecipient,String iDOCUID)  
	{
		 try {
			if (mSession== null)
				System.out.println("Session in SendCallInfoMailFromLS is null");
			
			System.out.print("Session is "+mSession.toString());
			//Document lDoc=lSession.getCurrentDatabase().getDocumentByUNID(iDOCUID);
			//SendCallInfoMail(iSender,iRecipient,lDoc,lSession);
		} catch (Exception e) {
			System.out.println("SendCallInfoMailFromLS in SendCallInfoMail"); 
			System.out.print(e.getMessage());
			e.printStackTrace();
		}
	}
	
	//*************************************************************************************************
	
}
Titel: Re: Ärger mit Aufruf Java Klassen Member von LS
Beitrag von: atbits am 24.05.11 - 13:24:42
Ich würde dann halt auch mal veruschen in der init() Methode die Session zu erzeugen  ;D
Titel: Re: Ärger mit Aufruf Java Klassen Member von LS
Beitrag von: AndreasWegener0815 am 24.05.11 - 13:27:35
 ???
ist doch da nach dem try oder ?
mSession = NotesFactory.createSession();
Titel: Re: Ärger mit Aufruf Java Klassen Member von LS
Beitrag von: atbits am 24.05.11 - 13:33:01
Du hast recht, hab ich überlesen  :-[
Aber wird init() auch aufgerufen?
Also für mich sieht es aus als wäre mSession null, sonst würde er ja keine NullpointerException werfen, denn was anderes passiert ja nicht?

LS-Code?
Titel: Re: Ärger mit Aufruf Java Klassen Member von LS
Beitrag von: AndreasWegener0815 am 24.05.11 - 13:36:33
Code
Sub Postsave(Source As Notesuidocument)
	If Source.FieldGetText("SendMailAdjuster")="Yes" Then
		Dim lSender As String
		Dim lReceiver As String
		Dim lDoc As NotesDocument 
		Dim ToolClassObj  As JavaObject
		Dim js As New JAVASESSION
		Dim ToolClass As JAVACLASS
		Dim lSession As New Notessession()
		Dim x As String 
		Set lDoc = Source.Document		
		lSender="Hans Wurst"
		lReceiver="hans Wurst"		
		Set ToolClass = js.GetClass ("Tools")
		Set ToolClassObj = ToolClass.CreateObject ()
		Call ToolClassObj.init ()		
		Call ToolClassObj.SendCallInfoMailFromLS(lSender,lReceiver,Source.Document.UniversalID )
	End If
	
End Sub

Danke für deine Mühe  :) . Aber nochmals zur Grundfrage, kann ich nicht einfach meine lSession aus dem LS mit übergeben ? Da kommt ja wie gesagt der Type Mismatch.
Titel: Re: Ärger mit Aufruf Java Klassen Member von LS
Beitrag von: atbits am 24.05.11 - 13:52:23
Ich würde sagen nope

siehe hier + Antowrten

http://www-10.lotus.com/ldd/nd6forum.nsf/869c7412fe5d56b7852569fa007826e3/704ece542aba229285256e740054b106?OpenDocument

Genau Dein Problem ....
Titel: Re: Ärger mit Aufruf Java Klassen Member von LS
Beitrag von: AndreasWegener0815 am 24.05.11 - 14:08:13
Warum wundert mich das nicht  :'( . Ich denke ich packe alles in einen Agenten und übergebe die NoteID
Code
status = notesAgent.Run( [ noteID$ ] )
Dann komme ich auch an mein Dokument ran.
So ist es halt wenn mans schön haben will und wiederverwendbaren Code unter Lotus haben will.
Ich danke Dir auf jedenfall für den Input.
Viele Grüße