Das Notes Forum

Lotus Notes / Domino Sonstiges => Java und .NET mit Notes/Domino => Thema gestartet von: dirk_2909 am 22.02.08 - 08:43:56

Titel: Datei im "UI" öffnen
Beitrag von: dirk_2909 am 22.02.08 - 08:43:56
Hallo,

irgendwie kann ich nichts gescheites zu meiner Frage finden :-( (gesucht habe ich).

Wie kann ich eine gerade generierte Datei (PDF) öffnen?
Das entsprechende Programm soll gestartet werden.

Hintergrund:
Ein Agent (manuelle ausgeführt durch User) erstellt ein PDF-Dokument.
Das PDF-Dokument soll direkt geöffnet werden.

Danke.
Titel: Re: Datei im "UI" öffnen
Beitrag von: jBubbleBoy am 22.02.08 - 08:53:40
Code
Declare Function FindExecutable Lib "shell32.dll" Alias "FindExecutableA" (Byval lpFile As String, Byval lpDirectory As String, Byval lpResult As String) As Long

dim filename$, prog$, taskid%
 
filename = ""
prog$ = Strleft( FindExByFileName(filename) , Chr(0) )
taskid = Shell( prog$ + " " +  filename, SHELL_MAX_FOCUS)

Function FindExByFileName(Byval Datei As String) As String
   Dim Pfad As String
   Pfad = Space$(256)
   FindExecutable Datei, vbNullString, Pfad
   FindExByFileName = Trim(Pfad)
End Function

so?
Titel: Re: Datei im "UI" öffnen
Beitrag von: dirk_2909 am 22.02.08 - 09:13:52
Hi - mit LS habe ich kein Problem.

Ich benötige eine Java-Lösung.

Trotzdem Danke.
Titel: Re: Datei im "UI" öffnen
Beitrag von: MadMetzger am 22.02.08 - 09:24:33
Vielleicht ist das was für dich. Das ist ein Java-PDF-Viewer, der sich in eine vorhandene Anwendung integrieren lässt:

Klick mich (http://www.icesoft.com/products/icepdf-deployment.html)

Ansonsten könnte man mal die Java-API durchforsten, ob man da was findet, womit man externe Anwendungen starten kann.
Titel: Re: Datei im "UI" öffnen
Beitrag von: jBubbleBoy am 22.02.08 - 09:26:49
OKey, habe ich so nicht ersehen können.
Wie wäre es mit LS2J oder mit einem LS-Agenten den Java-Agenten aufrufen?
In Java geht das über:
Runtime.getRuntime().exec("programm.exe datei.ext")
Man muss nur wissen wo sich die "programm.exe" befindet.

bubble
Titel: Re: Datei im "UI" öffnen
Beitrag von: dirk_2909 am 22.02.08 - 09:28:13
@Markus

Danke. Aber das ist  ja ein Viewer .
Mir würde ein einfaches Öffnen der Datei genügen ?!

irgendetwas alà "Launch( "c:\\\\temp\\test.pdf" )" oder ....  :-:

Muss wohl die Java-API durchforsten :-( Wollte immer schon mal näher kennenlernen ;-)

Aber vielelicht hat noch einer einen Tipp oder Idee oder eine Zeile Code ?
Titel: Re: Datei im "UI" öffnen
Beitrag von: MadMetzger am 22.02.08 - 09:30:28
Das war mein Vorschlag, weil du dann nicht den richtigen Pfad zum PDF-Reader ermitteln musst. Mir war klar, dass du eigentlich nur ein installiertes Programm öffnen willst.

@bubble: Genau das habe ich eben in der API irgendwie nicht gefunden...  ;D
Titel: Re: Datei im "UI" öffnen
Beitrag von: dirk_2909 am 22.02.08 - 09:30:40
@bubble (schöner Name ;-) )

Zitat
OKey, habe ich so nicht ersehen können.
Ich dachte das Forum "Java und ..." wäre eindeutig. Sorry  :-\

Zitat
Runtime.getRuntime().exec("programm.exe datei.ext")
Man muss nur wissen wo sich die "programm.exe" befindet.

Danke vorerst. Aber ich weiß nicht immer, wo das Programm liegt. Muss dann wohl ein wenig mehr machen .
Titel: Re: Datei im "UI" öffnen
Beitrag von: jBubbleBoy am 22.02.08 - 09:33:29
den Pfad zum Programm kann man doch über LS in die notes.ini oder ein Profil schreiben, was dann der Java-Agent auswertet.
Eine andere Variante ohne JNI wird es nicht geben ;)

bubble
Titel: Re: Datei im "UI" öffnen
Beitrag von: flaite am 22.02.08 - 09:41:53
Runtime.getRuntime().exec("programm.exe datei.ext")
Wieso geht das denn nicht aus einem Agenten?
Gibt auch jars, um die Windows-Registry auszulesen.
Titel: Re: Datei im "UI" öffnen
Beitrag von: jBubbleBoy am 22.02.08 - 09:54:55
das stimmt ;)
ist nur die Frage was man mehr macht und kann, Java oder Notes, und dann nähert man sich einer Lösung.

bubble
Titel: Re: Datei im "UI" öffnen
Beitrag von: MadMetzger am 22.02.08 - 09:58:10
Hm... Unter Windows reicht doch mit installiertem Betrachter einfach ein Aufruf der betroffenen PDF-Datei. Den Pfad eben dieser solltest du ja zur Verfügung haben. Habe das eben hier mal ausprobiert. Könnte das jetzt gleich nochmal aus Java testen...

EDIT: Aber das funktioniert leider so nicht aus Java heraus.
Titel: Re: Datei im "UI" öffnen
Beitrag von: diali am 22.02.08 - 10:05:07
warum nicht eine URL aufrufen? z.B. "files://c:/test.doc" Dabei wird die im BS verknüpfte Anwendung gestartet.
Titel: Re: Datei im "UI" öffnen
Beitrag von: dirk_2909 am 22.02.08 - 10:13:16
Zitat
ist nur die Frage was man mehr macht und kann,
Die Antwort ist einfach - im Prinzip -.

Zitat
Java oder Notes,

Auf dem ersten Blick wäre die Antwort: "Notes"

Aber. Kann man die beiden Begriffe trennen? Notes "kann/ist" auch Java ?!
Und ich denke es wird immer wichtiger.

Also kann man sich vor dem Thema "Java" nicht verschließen.

Titel: Re: Datei im "UI" öffnen
Beitrag von: dirk_2909 am 22.02.08 - 10:14:23
@Dirk
Zitat
warum nicht eine URL aufrufen? z.B. "files://c:/test.doc" Dabei wird die im BS verknüpfte Anwendung gestartet.

Danke.
Teste ich gleich mal.
Titel: Re: Datei im "UI" öffnen
Beitrag von: MadMetzger am 22.02.08 - 10:16:45
Per
Code
Runtime.[i]getRuntime()[/i].exec("file://D://skript.pdf");
geht es leider nicht, habe nebenher hier auch noch probiert...

So wie ich die Exception, die geworfen wird, deute, muss man bei "exec" explizit auf eine ausführbare Datei verweisen.

Code
java.io.IOException: Cannot run program "file://D://skript.pdf": CreateProcess error=2, Das System kann die angegebene Datei nicht finden
Titel: Re: Datei im "UI" öffnen
Beitrag von: diali am 22.02.08 - 10:25:27
wenn es ein Win BS ist kannst Du es über die cmd.exe und dann die entsprechenden Parameter mitgeben. Dabei brauchst Du dann auch das "files://" nicht.
Titel: Re: Datei im "UI" öffnen
Beitrag von: hwenck am 22.02.08 - 10:28:30
Ein Beispiel für Ajax und Ping; sollte analog auch für PDF gehen

   public void Ping(String IP, ObjGlob GL) {
      try {
         Vector pv = pingWin(IP, 4, 2000);
         String CDA = "<![CDATA[";
         String CDE = "]]>";
         StringBuffer xml = new StringBuffer();
         xml.append("<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>");
         xml.append("<response>");
         xml.append("<document>");
         xml.append("<docount>" + CDA + pv.size() + CDE + "</docount>");

         for (int i = 0; i < pv.size(); i++) {
            xml.append("<ping" + i + ">" + CDA + (String) pv.get(i) + CDE + "</ping" + i + ">");
         }
         xml.append("</document>");
         xml.append("</response>");
         GL.pw.println("Content-Type: text/xml; charset=\"ISO-8859-1\"");
         GL.pw.println(xml);
      } catch (IOException e) {
         e.printStackTrace();
      } catch (InterruptedException e) {
         e.printStackTrace();
      }

   }

   private static Vector ping(String[] cmd) throws IOException, InterruptedException {
      Process ping = Runtime.getRuntime().exec(cmd);
      BufferedReader input = new BufferedReader(new InputStreamReader(ping.getInputStream(), "Cp850"));
      String line = "";
      Vector v = new Vector();
      while ((line = input.readLine()) != null) {
         if (line.indexOf("Pakete:") >= 0) {
            v.addElement(line + "<br>");
         }
         if (line.indexOf("Minimum") >= 0) {
            v.addElement(line + "<br>");
         }
         if (line.indexOf("Antwort") >= 0) {
            v.addElement(line + "<br>");
         }
         if (line.indexOf("Zeit\u00fcberschreitung") >= 0) {
            v.addElement(line + "<br>");
            System.out.println(line.trim());
         }

      }
      input.close();
      // return ping.waitFor() == 0;
      return (v);
   }

   private static Vector pingWin(String target, int count, long timeout) throws IOException, InterruptedException {
      String[] cmd = {};
      if (timeout == 0) {
         cmd = new String[4];
      } else {
         cmd = new String[6];
         cmd[3] = "-w";
         cmd[4] = Long.toString(timeout);
      }
      cmd[0] = "ping";
      cmd[1] = "-n";
      cmd[2] = Integer.toString(count);
      cmd[cmd.length - 1] = target;
      Vector v = ping(cmd);
      return (v);
   }

Titel: Re: Datei im "UI" öffnen
Beitrag von: flaite am 22.02.08 - 10:54:51
wenn es ein Win BS ist kannst Du es über die cmd.exe und dann die entsprechenden Parameter mitgeben. Dabei brauchst Du dann auch das "files://" nicht.
guter Punkt.

@hwenck: Wo kriegt man dieses ObjGlob her? Ich finds nicht über Google.
Titel: Re: Datei im "UI" öffnen
Beitrag von: hwenck am 22.02.08 - 11:04:34
         Session session = getSession();
         AgentContext agentContext = session.getAgentContext();
         Database db = agentContext.getCurrentDatabase();
         Document doc = agentContext.getDocumentContext();
         String Aktion = doc.getItemValueString("Aktion");
         PrintWriter pw = getAgentOutput();

         DateTime dt = session.createDateTime("Today");
         dt.setNow();
         Vector u = session.evaluate("@Name([CN];@UserName)", doc);
         Name nam = session.createName((String) u.firstElement());
         Document pdoc = db.getProfileDocument("Setup", "");

         String rcd = doc.getItemValueString("Query_String_Decoded");
         Hashtable ht = parseQueryString(rcd);
         String adocID = (String) ht.get("ParentUNID");
         ObjGlob GL = new ObjGlob();
         GL.db = db;
         GL.session = session;
         GL.pw = pw;
         GL.dt = dt;
         GL.doc = doc;
         GL.pdoc = pdoc;
         GL.nam = nam;

.....

package agent.web_tools;
import java.io.PrintWriter;

import lotus.domino.Database;
import lotus.domino.DateTime;
import lotus.domino.Document;
import lotus.domino.Name;
import lotus.domino.Session;

public class ObjGlob {
   public Document doc;
   public Document pdoc;
   public Document adoc;
   public Document SucheDoc;
   public Session session;
   public Database db;
   public PrintWriter pw;
   public DateTime dt;
   public Name nam;
   public String Temp;

   
   
   ObjGlob() {
      doc = null;
      pdoc = null;
      adoc = null;
      SucheDoc = null;
      session = null;
      db = null;
      pw = null;
      dt = null;
      nam = null;
      Temp = "";
   }
}

Sicher nicht toll, aber so mach ich es.

Titel: Re: Datei im "UI" öffnen
Beitrag von: flaite am 22.02.08 - 11:40:29
Und wie willst du damit eine externe Anwendung aufgerufen?
Imho wird da lediglich die toString() Methode von einer ObjGlob Instanz auf StandardOut (vermutlich Serverkonsole) ausgegeben.
Titel: Re: Datei im "UI" öffnen
Beitrag von: dirk_2909 am 22.02.08 - 12:20:35
Habe es jetzt so gelöst:

Code
               try {
        			Process p = 
      				Runtime.getRuntime()
       				 .exec("rundll32 url.dll,FileProtocolHandler " + mLabel.Finish( ) );
    				p.waitFor();
    			} catch (Exception e ) {
    				/* show something others */
    			}

Klappt (bis jetzt) wunderbar :D

Besten Dank an alle Beteiligten !