Das Notes Forum

Lotus Notes / Domino Sonstiges => Java und .NET mit Notes/Domino => Thema gestartet von: CLI_Andreas_Schmidt am 05.01.09 - 12:14:05

Titel: Java Agent ruft externes Programm auf und liefert Rückgabewerte...
Beitrag von: CLI_Andreas_Schmidt am 05.01.09 - 12:14:05

Hallo @Kaffeetrinker,

Ich möchte eine exe aufrufen, im geöffneten Frontend etwas eintragen und dann die Rückgabewerte weiterverarbeiten.

Der Aufruf kommt soll aus einer Notes Ansicht erfolgen.

JAVA oder nicht JAVA ?

Ich denke java ist hier die richtige Wahl oder ?
Titel: Re: Java Agent ruft externes Programm auf und liefert Rückgabewerte...
Beitrag von: jBubbleBoy am 05.01.09 - 12:45:19
Und warum nicht LotusScript?
Titel: Re: Java Agent ruft externes Programm auf und liefert Rückgabewerte...
Beitrag von: CLI_Andreas_Schmidt am 05.01.09 - 13:19:56
In Script habe ich noch keine Lösung gefunden wo ein Programm auf ein anderes wartet.
Titel: Re: Java Agent ruft externes Programm auf und liefert Rückgabewerte...
Beitrag von: jBubbleBoy am 05.01.09 - 13:49:28
Wie möchtest Du das denn in Java machen?
In LS geht das z.B. so, auch könnte man das über eine BAT-Datei "händeln" (simulieren).

Code
     Print "Calc.exe wird gestartet"
     ShellAndWait("Calc.exe")
     Print "Calc.exe wurde beendet"
 
Public Type STARTUPINFO
  cb As Long
  lpReserved As String
  lpDesktop As String
  lpTitle As String
  dwX As Long
  dwY As Long
  dwXSize As Long
  dwYSize As Long
  dwXCountChars As Long
  dwYCountChars As Long
  dwFillAttribute As Long
  dwFlags As Long
  wShowWindow As Integer
  cbReserved2 As Integer
  lpReserved2 As Long
  hStdInput As Long
  hStdOutput As Long
  hStdError As Long
End Type

Public Type PROCESS_INFORMATION
  hProcess As Long
  hThread As Long
  dwProcessID As Long
  dwThreadID As Long
End Type

Declare Function WaitForSingleObject Lib "kernel32" (Byval _
  hHandle As Long, Byval dwMilliseconds As Long) As Long

Declare Function CreateProcessA Lib "kernel32" (Byval _
  lpApplicationName As Long, Byval lpCommandLine As String, Byval _
  lpProcessAttributes As Long, Byval lpThreadAttributes As Long, _
  Byval bInheritHandles As Long, Byval dwCreationFlags As Long, _
  Byval lpEnvironment As Long, Byval lpCurrentDirectory As Long, _
  lpStartupInfo As STARTUPINFO, lpProcessInformation As _
  PROCESS_INFORMATION) As Long

Declare Function CloseHandle Lib "kernel32" (Byval _
  hObject As Long) As Long

Public Const NORMAL_PRIORITY_CLASS = &H20&
Public Const INFINITE = -1&

Public Sub ShellAndWait(Byval RunProg As String)
  Dim RetVal As Long
  Dim proc As PROCESS_INFORMATION
  Dim StartInf As STARTUPINFO
  StartInf.cb = Len(StartInf)
  'Execute the given path
  RetVal = CreateProcessA(0&, RunProg, 0&, 0&, 1&, _
  NORMAL_PRIORITY_CLASS, 0&, 0&, StartInf, proc)
  'Disable this app until the shelled one is done
  RetVal = WaitForSingleObject(proc.hProcess, INFINITE)
  RetVal = CloseHandle(proc.hProcess)
End Sub
Titel: Re: Java Agent ruft externes Programm auf und liefert Rückgabewerte...
Beitrag von: m3 am 05.01.09 - 13:58:56
Das ist aber eher LS & Win32. ;)
Und wenn ich das unter 8.5 unter Ubuntu laufen lasse?  >:D
Titel: Re: Java Agent ruft externes Programm auf und liefert Rückgabewerte...
Beitrag von: jBubbleBoy am 05.01.09 - 14:06:01
Dann natürlich schlecht, aber ich kenne keinen produktiven 8.5 Ubuntu Einsatz, auch nicht in naher Zukunft ersichtlich ;)
Oder ist das bei euch anders?
Titel: Re: Java Agent ruft externes Programm auf und liefert Rückgabewerte...
Beitrag von: m3 am 05.01.09 - 14:08:28
Also es ist zumindest am Horizont ersichtlich.
Titel: Re: Java Agent ruft externes Programm auf und liefert Rückgabewerte...
Beitrag von: CLI_Andreas_Schmidt am 06.01.09 - 16:23:08
Java sollte es schon sein.

Zur Zeit versuche ich mit folgender Programmzeile aus einem Domino Agenten zu starten.


import lotus.domino.*;
import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;


public class JavaAgent extends AgentBase {

   public void NotesMain() {

      try {

         Process p = Runtime.getRuntime().exec("cmd");   


Die Dos Prompt wird auch geladen ( kann ich im Taskmanager sehen ), aber die Box geht nicht auf. ??? Betriebssystemabhängig ?

Wenn ich "cmd / c dir" eingebe,

dann kann ich mir das Verzeichnis in eine ArrayList laden und auswerten. Aber ich möchte ja was in die Dos-Prompt eingeben. die geht aber nicht auf. Arbeite auf windows2003 Server

???
Titel: Re: Java Agent ruft externes Programm auf und liefert Rückgabewerte...
Beitrag von: CLI_Andreas_Schmidt am 06.01.09 - 17:02:26
Habe es auf Windows XP auch probiert.

Gleicher Fehler.
Titel: Re: Java Agent ruft externes Programm auf und liefert Rückgabewerte...
Beitrag von: MadMetzger am 06.01.09 - 17:10:31
Ich glaube, das geht nicht, was du da vor hast.
Titel: Re: Java Agent ruft externes Programm auf und liefert Rückgabewerte...
Beitrag von: jBubbleBoy am 06.01.09 - 17:38:24
Vielleicht kannst Du mal beschreiben was dein Ziel ist, nur eine CMD-Box zu öffnen wird es doch nicht sein, oder doch  ::)
Titel: Re: Java Agent ruft externes Programm auf und liefert Rückgabewerte...
Beitrag von: flaite am 06.01.09 - 22:36:21
ich würds mit rmi versuchen. Ist aber nicht so einfach aufzusetzen.
Wenn du das Javaprogramm aufrufst wartet der NotesAgent einfach nicht auf den Rückgabewert.
Andere Möglichkeit wären REST oder SOAP Webservice Clients in Notes.
Oder sowas wie MQSeries.
SOA.
Solche Infrastrukturen werden ja nicht dazu gebaut, um Consulting Gelder zu generieren, sondern haben schon eine gewisse Berechtigung.
Titel: Re: Java Agent ruft externes Programm auf und liefert Rückgabewerte...
Beitrag von: jBubbleBoy am 07.01.09 - 09:07:11
hab gerade gelesen das SOA stirbt ;)
http://www.heise.de/newsticker/Burton-Analystin-Manes-SOA-ist-tot--/meldung/121226
Titel: Re: Java Agent ruft externes Programm auf und liefert Rückgabewerte...
Beitrag von: m3 am 07.01.09 - 09:11:04
Vielleicht kannst Du mal beschreiben was dein Ziel ist, nur eine CMD-Box zu öffnen wird es doch nicht sein, oder doch  ::)
Du solltest den ersten Eintrag in diesem Thread lesen. Dort beschreibt er eigentlich recht genau, was er will.
Daraus ergibt sich auch, dass MQSeries und Co. nicht wirklich eine Lösung sind.
Titel: Re: Java Agent ruft externes Programm auf und liefert Rückgabewerte...
Beitrag von: jBubbleBoy am 07.01.09 - 09:19:31
OK mal aufs Neue.
Wie sehen denn die Rückgabewerte aus? Textdatei?
Titel: Re: Java Agent ruft externes Programm auf und liefert Rückgabewerte...
Beitrag von: MadMetzger am 07.01.09 - 09:24:04
Vielleicht hilft ja schon mal diese Doku (http://openbook.galileocomputing.de/javainsel7/javainsel_09_005.htm#mj9a359a866a4ea7b3b6c2bd331a0b2136). Die Methode Runtime.exec() habe ich selbst schonmal benutzt um damit aus Textdateien mit Hilfe von Graphviz eine Grafikausgabe zu erzeugen. Das aber erfolgte zumindest ohne Benutzerinteraktion.
Titel: Re: Java Agent ruft externes Programm auf und liefert Rückgabewerte...
Beitrag von: CLI_Andreas_Schmidt am 07.01.09 - 13:13:31
Hi Mad,

diesen Artikel habe ich auch gefunden und ausprobiert. Tatsächlich bekommt man Rückgabewerte. Ich habe zum Beispiel den Dos Dir - Befehl ausgeführt und die Liste ausgelesen. Über den Aufruf

BufferedReader in = new BufferedReader( new InputStreamReader(p.getInputStream()));
line = in.readLine()

bekommt man alles zurückgeliefert und kann Zeile für Zeile ausgelesen werden. Läuft gut. Obwohl es auch gut wäre zu wissen, warum sich das CMD - Fenster nicht öffnen lässt. Da es mit "wordpad" doch so gut funktioniert.

Mein jetziges Problem ist aber ein ganz anderers.

Was, wenn ich ein wordpad öffne und Texte die eingegeben werden auswerten möchte ?

: )

Titel: Re: Java Agent ruft externes Programm auf und liefert Rückgabewerte...
Beitrag von: m3 am 07.01.09 - 13:20:23
ROTFL.  :-X
Titel: Re: Java Agent ruft externes Programm auf und liefert Rückgabewerte...
Beitrag von: CLI_Andreas_Schmidt am 07.01.09 - 13:43:27
 :-[

wirklich sehr hilfreich.
Titel: Re: Java Agent ruft externes Programm auf und liefert Rückgabewerte...
Beitrag von: jBubbleBoy am 07.01.09 - 13:55:18
Da brauchst Du eine "Art" Keylogger-Software, aber Vorsicht die wird von Antivierenprgorammen gerne als Trojaner / Spyware behandelt.
Diese Bösen ... ;)
Titel: Re: Java Agent ruft externes Programm auf und liefert Rückgabewerte...
Beitrag von: CLI_Andreas_Schmidt am 07.01.09 - 14:07:14
Das heisst also, man kommt mit den zur Verfügung stehenden Java Klassen nicht an die Rückgabewerte eines geöffneten Dialogs ( über exec() geöffnet ) ran ? Heisst also, das das geöffnete Programm beim schliessen die Rückgabewerte selbst irgendwo wegschreiben müsste, um sie dann wieder einzulesen ?

 :D
Titel: Re: Java Agent ruft externes Programm auf und liefert Rückgabewerte...
Beitrag von: jBubbleBoy am 07.01.09 - 14:18:55
Ich möchte es mal so sagen:
Ein geöffneter Dialog hat keinen Rückgabewert!!
Titel: Re: Java Agent ruft externes Programm auf und liefert Rückgabewerte...
Beitrag von: MadMetzger am 07.01.09 - 14:22:56
Die Frage ist auch, was gibt ein Dialog bzw ein Kommandozeilentool zurück?
Titel: Re: Java Agent ruft externes Programm auf und liefert Rückgabewerte...
Beitrag von: CLI_Andreas_Schmidt am 07.01.09 - 14:59:48
In der Regel gibt es ja ein paar Eingabefelder und mind. zwei Schalftflächen. Abbrechen und Abschicken ( o.ä. )

Die 0 oder die 1 für die Buttons reicht schon aus. Und Variablen für die Eingabefelder.

 ::)
Titel: Re: Java Agent ruft externes Programm auf und liefert Rückgabewerte...
Beitrag von: jBubbleBoy am 07.01.09 - 15:11:10
so wie den "Mach mich glücklich Button" ???
Titel: Re: Java Agent ruft externes Programm auf und liefert Rückgabewerte...
Beitrag von: CLI_Andreas_Schmidt am 07.01.09 - 15:18:29
Genau der  ;D :-* :knuddel:
Titel: Re: Java Agent ruft externes Programm auf und liefert Rückgabewerte...
Beitrag von: m3 am 07.01.09 - 15:43:01
Eigentlich wollte ich mich ja nur zurücklehnen und den Kopf schütteln (daher auch der  :-X) jetzt muss ich aber doch noch mal meinen Senf abgeben.

Andreas, mit der Anzahl von Postings, Deinem Lebensalter und Berufserfahrung überrascht mich dieser Thread nun schon sehr.  :-\

Du schreibst zunächst:
Ich möchte eine exe aufrufen, im geöffneten Frontend etwas eintragen und dann die Rückgabewerte weiterverarbeiten.
Das impliziert - zumindest für mich - dass Du ein Kommandozeilenprogramm aufrufen und dessen Ausgabe auf STDOUT bzw. dessen Rückgabecode (0 bzw. ein Errorcode) empfangen und weiterverarbeiten willst.

Dann kommst Du auf einmal mit der Anforderung, dass Du den Text, den der User in Wordpad eingibt, auslesen willst (was mit der ersten Anforderung NICHTS zu tun hat).

Und jetzt sind wir auf einmal bei einer Windowsappliaktion, wo Du die Inhalte von Eingabefeldern, etc. auslesen willst, OHNE die Daten zuerst wo zu speichern - dich quasi in den OK/Speichern Event eines Dialogs einhängen willst?


Irgendwie kommt mir das alles sehr konfus vor und ich muss mich a) bei jBubbleBoy entschuldigen, der das Chaos anscheinend schon früher ahnte und b) Dir Wie man Fragen richtig stellt, Kapitel "Beschreibe das Ziel, nicht einen Schritt" (http://www.tty1.net/smart-questions_de.html#goal) empfehlen.

Wenn Du Dir im Notes Daten aus einer anderen Anwendung holen willst/musst, geht das
a) über die Kommandozeile (STDOUT)
b) über ein Übergabefile bzw. eine Übergabedatenbank
c) ev. mittels COM-Zugriff auf die Anwendung, so diese das unterstützt.
d) wie Pitiyankee schrieb über REST oder SOAP Webservice, MQSeries, etc.



Titel: Re: Java Agent ruft externes Programm auf und liefert Rückgabewerte...
Beitrag von: CLI_Andreas_Schmidt am 08.01.09 - 14:12:51
Tja leider wieder nicht sehr hilfreich.

m3. Bitte nur sachlich bleiben. Und vielleicht kommst Du etwas wieder von Deinem Hohe Ross runter. Es gibt für mich nur einen Java Programmierer ( und ich bin keiner, wie Du trefflich kommentierst hast), vor dem ich solche Bemerkungen durchgehen lasse.

 >:D

Titel: Re: Java Agent ruft externes Programm auf und liefert Rückgabewerte...
Beitrag von: jBubbleBoy am 08.01.09 - 14:47:04
Na Andreas, jetzt begibst Du dich aber auf hohes Ross :)

m3 hat recht, es war schon anfänglich ersichtlich das du eine recht konfuse Denkweise an den Tag legst und Du hast es bis jetzt nicht geschafft dein eigentliches "Programmier-Ziel" zu beschreiben.
 
Wer glaubt aus einem geöffneten Dialog einfach so Werte Auslesen zu können, hat von Programmierung wenig Ahnung und das hat nichts mit Java-Kenntnissen zu tun.

PS: Meine Kommentare, wie z.B. der Keylogger war ironisch gemeint ;)
Titel: Re: Java Agent ruft externes Programm auf und liefert Rückgabewerte...
Beitrag von: CLI_Andreas_Schmidt am 08.01.09 - 14:51:35
Na dann ist doch alles gut.  :-*