Autor Thema: gegenwärtiges Notes-Programmverzeichnis  (Gelesen 10258 mal)

Offline Sanjou

  • Frischling
  • *
  • Beiträge: 30
  • Geschlecht: Weiblich
gegenwärtiges Notes-Programmverzeichnis
« am: 24.10.06 - 11:04:55 »
Hallo zusammen...

gibt es eine Möglichkeit, in einem Java Agenten das gegenwärtige Programmverzeichnis des Notes Client herauszubekommen?

Schonmal vielen Dank für die Mühe...

Offline koehlerbv

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: gegenwärtiges Notes-Programmverzeichnis
« Antwort #1 am: 24.10.06 - 12:56:23 »
Wenn der Agent vom Client gestartet wurde, dann sollte die GetEnvironmentString aus der session class den richtigen Eintrag hierzu aus der NOTES.INI liefern.

HTH,
Bernhard

Offline Sanjou

  • Frischling
  • *
  • Beiträge: 30
  • Geschlecht: Weiblich
Re: gegenwärtiges Notes-Programmverzeichnis
« Antwort #2 am: 24.10.06 - 13:05:45 »
Danke schonmal für die Antwort. Dann dazu noch eine blöde Frage...
(sorry, bin relativ neu im Notes Umfeld)  :-[

Was gebe ich der Methode als String mit?

Offline koehlerbv

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: gegenwärtiges Notes-Programmverzeichnis
« Antwort #3 am: 24.10.06 - 13:09:26 »
"Directory", true

Wichtig ist, dass issystem als true übergeben wird, da der Eintrag "Directory" eine System- und keine benutzerdefinierte Variable ist.

Bernhard

Offline Sanjou

  • Frischling
  • *
  • Beiträge: 30
  • Geschlecht: Weiblich
Re: gegenwärtiges Notes-Programmverzeichnis
« Antwort #4 am: 24.10.06 - 13:12:44 »
Tausend Dank!

Du hast mir sehr geholfen  :D

LG
Sandra

Glombi

  • Gast
Re: gegenwärtiges Notes-Programmverzeichnis
« Antwort #5 am: 24.10.06 - 14:06:36 »
Directory liefert aber das Notes-Datenverzeichnis, nicht das Notes-Programmverzeichnis. Was willst Du denn nun haben?

Andreas

Offline koehlerbv

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: gegenwärtiges Notes-Programmverzeichnis
« Antwort #6 am: 24.10.06 - 16:52:57 »
Au weia, da hatte ich aber Tomaten auf den Augen - ich wollte wohl "Datenverzeichnis" lesen  :-\

Bernhard

Offline Sanjou

  • Frischling
  • *
  • Beiträge: 30
  • Geschlecht: Weiblich
Re: gegenwärtiges Notes-Programmverzeichnis
« Antwort #7 am: 25.10.06 - 08:12:36 »
ich wollte zur Notes.exe kommen... und im Prinzip bin ich dadurch ja fast dahingekommen... wäre dann noch ein wenig String - Bastelei... es sei denn es ginge noch anders....hab aber nix weiter gefunden.... :-:

Offline LN4ever

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 505
  • Geschlecht: Männlich
Re: gegenwärtiges Notes-Programmverzeichnis
« Antwort #8 am: 25.10.06 - 23:17:16 »
Bei mir steht das Programmverzeichnis in der NOTES.INI als

NOTESPROGRAM=C:\Program Files\Notes.654

Ich kann nicht sagen, ob dies immer und automatisch bei einer Erstinstallation oder evtl. nur in einer Upgrade-Installation gesetzt wird.

Alternative zum Finden ist die Registry in
HKEY_CLASSES_ROOT\.NSF\SHELL\OPEN\COMMAND

Alles was links von der EXE-Datei steht (das kann die NOTES.EXE oder die NLNOTES.EXE sein (!)), ist der Programmpfad.

Gruß

Norbert
Situs vilate in isse tabernit.

Offline koehlerbv

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: gegenwärtiges Notes-Programmverzeichnis
« Antwort #9 am: 25.10.06 - 23:54:57 »
NOTESPROGRAM= ... steht in keiner meiner NOTES.INIs. Das ist also kein Standard, auf den man sich verlassen kann.
Registry - vor allem via File Extension - ist sicherer, aber eben auch nicht sicher. Ich sitze gerade vor einer Box, bei der in einer Eilaktion ('s hat halt pressiert  ;D) einfach ein Programmverzeichnis draufkopiert wurde. Da ist natürlich nix mit Registry-Einträgen.
Über die WinAPI könnte wohl noch ermittelt werden, von wo ein Prozess gestartet wurde. Aber auch hier kommen mir Zweifel: Der harmlose User startet notes.exe, es läuft dann aber nlnotes.exe ... und -dlls ...

Sandra, wozu brauchst Du eigentlich diese Angabe? Vielleicht machen wir uns auch viel zu viel Gedanken?

Bernhard

Offline eknori

  • @Notes Preisträger
  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.730
  • Geschlecht: Männlich
Re: gegenwärtiges Notes-Programmverzeichnis
« Antwort #10 am: 26.10.06 - 06:07:54 »
Code
Const W_API_MODULE = "nnotes"

Declare Sub subwOSGetExecutableDirectory Lib W_API_MODULE Alias "OSGetExecutableDirectory" _
(Byval v_strRetPathName As String)


Sub Click(Source As Button)
Dim strFullDir As String

strFullDir = String$(127,0)
Call subwOSGetExecutableDirectory(strFullDir)

For i = 1 To Len(strfulldir)
If Mid(strfulldir , i , 1 ) = "\" Then ptr = i
Next
Msgbox (Left(strfulldir, ptr - 1 ))
End Sub


Quelle
« Letzte Änderung: 26.10.06 - 06:09:44 von eknori »
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline Sanjou

  • Frischling
  • *
  • Beiträge: 30
  • Geschlecht: Weiblich
Re: gegenwärtiges Notes-Programmverzeichnis
« Antwort #11 am: 26.10.06 - 07:10:59 »
Hallo... erstmal danke für die ganzen Antworten  :)

also ich brauch die Angaben um ein Notes Dokument mit bestimmter ID zu öffnen... das ganze mache ich in einem Java - Programm, und die benötigte Information will ich in einem Java - Agenten als Parameter mitgeben....

Das öffnen versuche ich folgendermaßen:
------------------------------------------------------------
// Lotus Notes Dokument öffnen
            Runtime.getRuntime().exec(urlString);
------------------------------------------------------------

und in URL String steht dann der Pfad zur Notes.exe

Hab leider keine andere Idee wie ich sonst ein Dokument öffnen könnte....

Glombi

  • Gast
Re: gegenwärtiges Notes-Programmverzeichnis
« Antwort #12 am: 26.10.06 - 07:58:19 »
Hast Du die Notes Desginer Hilfe? Falls ja, solltest Du mal unter Jaca/CORBA Classes nachschauen.

Hier mal ein Beispiel wie man auf Notes zugreift:

import lotus.domino.*;

public class JavaAgent extends AgentBase {

  public void NotesMain() {

    try {
      Session session = getSession();
      AgentContext agentContext = session.getAgentContext();

      // (Your code goes here)
      Database db = session.getDatabase("snapper", "names2", false);
      if (db == null)
        System.out.println("names2.nsf does not exist on snapper");
      else
        System.out.println("Title of names2.nsf: \"" + db.getTitle()+ "\"") ;

    } catch(Exception e) {
      e.printStackTrace();
    }
  }
}



und wichtige Hinweise:

Designer requirements
Compilation of a Java program using the lotus.domino package requires installation of Domino Designer Release 5 or greater.
For stand-alone applications, include Notes.jar from the Notes program directory and domino\java\NCSO.jar or domino\java\NCSO.cab from the Notes data directory in the classpath. For example:
set CLASSPATH=.;c:\notes\data\domino\java\NCSO.jar;c:\notes\Notes.jar
Notes.jar contains the high-level lotus.domino package, the lotus.domino.local package for local calls, and the old lotus.notes package. The NCSO archive contains the high-level lotus.domino package and the lotus.domino.cso package for remote calls. Strictly, you do not need the NCSO archive if you are not compiling remote calls and you do not need Notes.jar if you are not compiling local calls or old calls.
The two NCSO archives have identical content but differ in the archiving technique:
NCSO.jar uses the JDK JAR utility with compression.
NCSO.cab uses the Microsoft CABARC utility.
Hinweis  Earlier releases used NCSO.jar (uncompressed) and NCSOC.jar (compressed).
Your class code must import the high-level lotus.domino package:
import lotus.domino.*;
Run-time requirements
A computer running a Java application that makes local Domino calls must contain Domino Server, Domino Designer, or Notes Client, and must include Notes.jar in the classpath.
A computer running a Java application that makes remote Domino calls need not contain Domino or Notes, but must contain one of the NCSO archives and must include it in the classpath.
A computer running a Domino agent that makes Domino calls must include Notes.jar in the classpath.
A computer running an applet that makes Domino calls needs no Domino software or classpath assignments. The applet must be loaded from a computer containing a Domino server.
Hinweis  Do not use NCSOW.jar in the classpath for executing remote (IIOP) calls in a WebSphere® environment. NCSOW.jar is no longer kitted as it was starting with Release 5.0.4. You can continue to run programs that use NCSOW.jar on R5 servers, but not on Release 6 servers. The NCSO archives work with both R5 and Release 6 servers.


Andreas

Offline Sanjou

  • Frischling
  • *
  • Beiträge: 30
  • Geschlecht: Weiblich
Re: gegenwärtiges Notes-Programmverzeichnis
« Antwort #13 am: 26.10.06 - 08:02:18 »
der Zugriff auf die Datenbank ist kein Problem
(dank dem super Forum und der Notes Designer Hilfe....   :))
... aber ich hab es noch nicht hinbekommen, das ich dann in einer Session das Dokument in Lotus Notes öffnen kann... ich kann halt nur auf die Daten  selber zugreifen....

und nach meinem bisherigen Wissensstand geht das Öffnen nur über die notes.exe...

LG
Sandra

Glombi

  • Gast
Re: gegenwärtiges Notes-Programmverzeichnis
« Antwort #14 am: 26.10.06 - 08:24:08 »
Ok, dann brauchst Du die URL eines Dokuments. Die bekommst Du mit HttpURL der Klasse Document.

Beispiel:This agent gets the Notes and HTTP URLs for a document in the current database. The agent varies the display depending on whether access is through Notes (the HTTP URL is blank) or HTTP protocols.
import lotus.domino.*;
import java.io.PrintWriter;

public class JavaAgent extends AgentBase {

  public void NotesMain() {

    try {
      Session session = getSession();
      AgentContext agentContext = session.getAgentContext();

      // (Your code goes here)
      Database db = agentContext.getCurrentDatabase();
      DocumentCollection dc = db.getAllDocuments();
      Document doc = dc.getFirstDocument();
     
      // Get URLs
      String notesURL = doc.getNotesURL();
      String httpURL = doc.getHttpURL();
     
      // Assume local if http is blank and print info for notes
      if (httpURL.length() == 0) {
        System.out.println("NotesURL = " + notesURL);
        System.out.println("Http URL = None");
      }
     
      // If http exists print info for both assuming output to browser
      else {
        PrintWriter pw = getAgentOutput();
        pw.println("NotesURL = " + notesURL);
        pw.println("<BR>HttpURL = " + httpURL);
      }

    } catch(Exception e) {
      e.printStackTrace();
    }
  }
}


Andreas

Offline Sanjou

  • Frischling
  • *
  • Beiträge: 30
  • Geschlecht: Weiblich
Re: gegenwärtiges Notes-Programmverzeichnis
« Antwort #15 am: 26.10.06 - 08:25:59 »
ja cool... dann teste ich das gleich mal....

danke schön!

Ich hoffe irgendwann kann ich auch mal bei einem Problem helfen... ::)

Offline LN4ever

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 505
  • Geschlecht: Männlich
Re: gegenwärtiges Notes-Programmverzeichnis
« Antwort #16 am: 26.10.06 - 09:09:30 »
Lieber Bernhard,

wenn Notes irgendwo nur draufkopiert (und nicht installiert ist), wirst du immer Schwierigkeiten haben, Links und Verknüpfungen zu öffnen.

Gruß

Norbert
Situs vilate in isse tabernit.

Offline koehlerbv

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: gegenwärtiges Notes-Programmverzeichnis
« Antwort #17 am: 26.10.06 - 09:30:53 »
Hallo Norbert,

ich wollte damit auch nur den "worst case", oder besser den schlampigsten Fall als Extrem darstellen. Und wer sowas macht statt ordentlich zu installlieren, der hat natürlich auch das Recht verwirkt, standardisierte Verfahren wie das Öffnen via Links benutzen zu dürfen.

Ich hatte dabei genau auf so ein Code-Beispiel gehofft, wie es Ulrich gepostet hat (danke, eknori!), da ich mir tatsächlich nicht ganz sicher war, ob und wie man in diesem worst case ermitteln kann, aus welchem Directory nun das laufende Programm gestartet wurde.

Bernhard

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: gegenwärtiges Notes-Programmverzeichnis
« Antwort #18 am: 26.10.06 - 11:07:51 »
Für mein Verständnis gehen hier ein paar Sachen ein bischen durcheinander.

Du kannst aus einem Java Programm mit verschiedenen Arten mit Notes kommunizieren:
- Notes Java Api über Corba oder "lokal" *
- Verbindung über irgendeine Form von HttpConnection
- Webservices
- Sockets
- Java RMI

Der erste Punkt ist der gebräuchlichste und meist einfachste.
Vermutlich macht es gerade für Leute, die dies zum ersten Mal machen Sinn eine Library zu benutzen, die das vereinfacht (aber einen leider auch bestimmte Möglichkeiten aus der Notes Api beraubt).
Hier bietet sich Domingo an. Vor allen hat das auch ein Mini-Tutorial dabei:
http://domingo.sourceforge.net/getting-started.html

Mir ist Domingo oft zu "intrusiv", d.h. ich kann mit den Notes Klassen nur noch über Domingo kommunizieren und bestimmte Dinge sind da nicht da die in den normalen Notes Klassen da sind. Für viele Standard-Fälle ist Domingo aber eine prima Lösung . Und ehrlichgesagt könnte ich auch Domingo erweitern oder forken (es ist openSource).

Eine andere interessante Möglichkeit bietet Java RMI. Du willst aus einem Agenten heraus Daten an ein Java Programm übertragen und eine Antwort bekommen, dass du im Java Agenten weiterverarbeitest.
Z.B. in diesem Buch wird das gut erklärt: http://www.javabuch.de/
Die Versionen sind nicht so das Problem. Du kannst z.B. einen Java1.3 Client über Java RMI mit einem Server in Java5 sprechen lassen, der wiederum das externe Programm "wrappered".
Gebräuchliche Alternativen sind:
- Eine Webserver-Anwendung schreiben, die mit der Anwendung spricht. Der Domino Agent kommuniziert dann über http mit dieser Anwendung auf Tomcat oder sowas in der Art.
- Webservices.

Hoffe das hilft.

Wenn ich Zeit hätte, könnte ich für dieses ganze Zeugs mal Beispiele ins Netz packen. Ich hab das (teilweise mit anderen) alles schon gemacht.

Gruß Axel


* lokal ist ein anderes Wort für "die bereitgestellte Java Kommunikationsschicht ist ein dünner JNI-Wrapper um die traditionellen, in C geschriebene "Remote Procedure Call" Funktionalität. Bereitgestellt heisst: Du brauchst dich nicht zu kümmern. Für den Anwendungsprogrammierer ist das von der API erstmal so ähnlich wie LotusScript, wobei ein paar Dinge sollte man wissen um Probleme zu vermeiden.
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline Sanjou

  • Frischling
  • *
  • Beiträge: 30
  • Geschlecht: Weiblich
Re: gegenwärtiges Notes-Programmverzeichnis
« Antwort #19 am: 27.10.06 - 07:35:10 »
mmmh... ich glaube ich hab das mit dem Öffnen des Dokuments im Client noch nicht so ganz verstanden...  :-[

also ich hole mir die Session und die Datenbank, das klappt auch alles. Dann berechne ich anhand der ID die notesURL, das klappt auch. Da hab ich dann folgendes drinstehen:

notesURL: noes://willi@FGANServer@FGAN@DE/__C12571D90029F418.nsf/0/2614BEA4C5B4DFF181256AE4007BA294?OpenDocumentt

aber wie rufe ich jetzt diese notesURL auf, ohne das ich den Pfad zur Notes.exe brauche?
Ich habe echt keine Ahnung, vielleicht sitze ich auch einfach nur schon zu lange dran??? :-:
In der Designer - Hilfe habe ich leider auch nichts dazu gefunden....

Danke schonmal!

LG
Sandra

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz