Autor Thema: Ärger mit Aufruf Java Klassen Member von LS  (Gelesen 5228 mal)

Offline AndreasWegener0815

  • Junior Mitglied
  • **
  • Beiträge: 53
Ärger mit Aufruf Java Klassen Member von LS
« 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ß


« Letzte Änderung: 24.05.11 - 11:55:40 von AndreasWegener0815 »

Offline atbits

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 708
  • Geschlecht: Männlich
  • sei Du selbst die Veränderung, die Du Dir wünschst
    • atBits
Re: Ärger mit Aufruf Java Klassen Member von LS
« Antwort #1 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();
      }
    }
}
David Schiffer
================================
atBits GmbH & Co. KG - https://atbits.de
im Einsatz: Lotus Domino 8.5, 9, 10

Offline AndreasWegener0815

  • Junior Mitglied
  • **
  • Beiträge: 53
Re: Ärger mit Aufruf Java Klassen Member von LS
« Antwort #2 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)

Offline atbits

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 708
  • Geschlecht: Männlich
  • sei Du selbst die Veränderung, die Du Dir wünschst
    • atBits
Re: Ärger mit Aufruf Java Klassen Member von LS
« Antwort #3 am: 24.05.11 - 13:07:32 »
Poste doch mal den Source

Erbt deine Klasse von NotesThread?

public class platform1 extends NotesThread
David Schiffer
================================
atBits GmbH & Co. KG - https://atbits.de
im Einsatz: Lotus Domino 8.5, 9, 10

Offline AndreasWegener0815

  • Junior Mitglied
  • **
  • Beiträge: 53
Re: Ärger mit Aufruf Java Klassen Member von LS
« Antwort #4 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();
		}
	}
	
	//*************************************************************************************************
	
}

Offline atbits

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 708
  • Geschlecht: Männlich
  • sei Du selbst die Veränderung, die Du Dir wünschst
    • atBits
Re: Ärger mit Aufruf Java Klassen Member von LS
« Antwort #5 am: 24.05.11 - 13:24:42 »
Ich würde dann halt auch mal veruschen in der init() Methode die Session zu erzeugen  ;D
David Schiffer
================================
atBits GmbH & Co. KG - https://atbits.de
im Einsatz: Lotus Domino 8.5, 9, 10

Offline AndreasWegener0815

  • Junior Mitglied
  • **
  • Beiträge: 53
Re: Ärger mit Aufruf Java Klassen Member von LS
« Antwort #6 am: 24.05.11 - 13:27:35 »
 ???
ist doch da nach dem try oder ?
mSession = NotesFactory.createSession();

Offline atbits

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 708
  • Geschlecht: Männlich
  • sei Du selbst die Veränderung, die Du Dir wünschst
    • atBits
Re: Ärger mit Aufruf Java Klassen Member von LS
« Antwort #7 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?
David Schiffer
================================
atBits GmbH & Co. KG - https://atbits.de
im Einsatz: Lotus Domino 8.5, 9, 10

Offline AndreasWegener0815

  • Junior Mitglied
  • **
  • Beiträge: 53
Re: Ärger mit Aufruf Java Klassen Member von LS
« Antwort #8 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.

Offline atbits

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 708
  • Geschlecht: Männlich
  • sei Du selbst die Veränderung, die Du Dir wünschst
    • atBits
David Schiffer
================================
atBits GmbH & Co. KG - https://atbits.de
im Einsatz: Lotus Domino 8.5, 9, 10

Offline AndreasWegener0815

  • Junior Mitglied
  • **
  • Beiträge: 53
Re: Ärger mit Aufruf Java Klassen Member von LS
« Antwort #10 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

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz