Das Notes Forum

Lotus Notes / Domino Sonstiges => Java und .NET mit Notes/Domino => Thema gestartet von: Sebastianh am 23.08.10 - 15:51:51

Titel: aktuellen Benutzernamen auslesen
Beitrag von: Sebastianh am 23.08.10 - 15:51:51
Hallo,

wie kann ich, aus einem PlugIn / einer View heraus den aktuellen (am Client angemeldeten) Nutzer auslesen) Die Client API (http://public.dhe.ibm.com/software/dw/lotus/Domino-Designer/JavaDocs/NotesClientJavaUIAPIs/v851/index.html) stellt mir dazu keine Methode bereit, oder ich bin zu blind, diese zu sehen?
CurrentDocument und CurrentView lassen sich doch auch auslesen, warum nicht CurrentUser?

Grüße,

Sebastian
Titel: Re: aktuellen Benutzernamen auslesen
Beitrag von: koehlerbv am 23.08.10 - 15:54:51
NotesSession.UserName. Läuft der Code via Browser auf dem Domino, dann NotesSession.EffectiveUsername.

Bernhard
Titel: Re: aktuellen Benutzernamen auslesen
Beitrag von: Sebastianh am 23.08.10 - 16:16:10
ok, da hab ich mich vielleicht nicht ganz richtig ausgedrückt. Ich habe zu dem Zeitpunkt an dem ich den am Client angemeldeten Benutzer abfragen will, natürlich bereits eine Session, die ich als Admin "ausführe" (und mit der ich "meine" Operationen ausführe. Ich will halt wissen, welcher Benutzer sich grade einen NotesClient aufgemacht hat. An die Session die im Client auf ist, kommt man ja leider so ohne weiteres nicht ran, oder?


Titel: Re: aktuellen Benutzernamen auslesen
Beitrag von: koehlerbv am 23.08.10 - 16:38:28
Jetzt sehe ich noch weniger durch. Wo und als was läuft Dein Code, und wessen Client-Angaben willst Du genau wissen?

Bernhard
Titel: Re: aktuellen Benutzernamen auslesen
Beitrag von: Sebastianh am 23.08.10 - 16:50:05
Also,

mein Code ist ein Sidebar-Plugin, welches Notes Daten des aktuell angemeldeten Benutzers abgreift, und diese an eine andere Anwendung weiterreicht. Um intern mit den Daten "arbeiten" zu können, bin ich (in meinem Plugin) als Admin am Dominoserver angemeldet.
Da sich der Benutzer aber gegenüber der Zweitanwendung ebenfalls authentifizieren muss, muss ich wissen, welcher Benutzer momentan mit dem NotesClient arbeitet, um sicherzustellen, dass in beiden Anwendungen der selbe Benutzer angemeldet ist. (die zweite Anwendung liefert auch Daten zurück, die in einer CA angezeigt werden, aber eben nur dann, wenn ein Benutzer mit entsprechenden Berechtigungen angemeldet ist, daher ist ein Abgleich der (Benutzer-)Daten zwingend erforderlich)
War das so verständlich?
Titel: Re: aktuellen Benutzernamen auslesen
Beitrag von: Sebastianh am 24.08.10 - 15:00:33
Habe es jetzt so gelöst, dass im Notesclient ein Agent läuft, der über den AgentContext den Benutzer ausliest, diesen dann via RMI an meine Java Anwendung gibt, die dann wiederrum vom PlugIn via RMI aufgerufen wird, und so den Benutzernamen an dieses durchreicht. Ist zwar von hinten durch die Brust mit der Faust ins Auge, aber es funktioniert. Jetzt wäre es noch ganz praktisch, wenn ich den Agenten aus meinem externen Javaprogramm aufrufen könnte. Ich meine das schonmal irgendwo gesehen zu haben, finde es allerdings nicht mehr wieder. Weiss hier jemand Rat?
Titel: Re: aktuellen Benutzernamen auslesen
Beitrag von: flaite am 25.08.10 - 11:52:40
Ist deine externe Java-Anwendung auf jedem Client deployed?
Sofern die User-Id im PATH des OS des Client steht, der Notes Client geöffnet ist und eine Sicherheitseinstellung entsprechend gesetzt ist, käme keine weitere Passwort-Abfrage, wenn dieser Agent aufgerufen wird.
Ist deine Java Anwendung nicht auf dem Client hast du Probleme, den Agenten mit dem NotesBenutzer starten zu lassen.
Hoffe das ist einigermassen nachvollziehbar. Hab wenig Zeit.
Titel: Re: aktuellen Benutzernamen auslesen
Beitrag von: Sebastianh am 25.08.10 - 12:43:38
ich hatte eigentlich vor den Agenten auf dem Server (meiner Anwendung) laufen zu lassen. Aber Deine Ausführungen bringen mich dazu, Ihn im Client auszuführen.

Wenn ich mir allerdings wie folgt eine neue Instanz des Agenten anlege:
Code
LittleAgent la = new LittleAgent();
la.run() // oder auch alternativ: la.runNotes();
bekomme ich über beide run-Methoden nur einen NullPointer zurück:
Code
ava.lang.NullPointerException
	at lotus.domino.AgentBase.runNotes(Unknown Source)
	at lotus.domino.NotesThread.run(Unknown Source)
	at de.xxx.xxx.views.SideBarView$1.widgetSelected(SideBarView.java:199)
	at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:228)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1003)
        ...
Was fehlt dem Agenten denn noch?

edit: auch der Aufruf der agent.NotesMain(); führt zu einem NullPointer. Wieder scheint der Event zu fehlen. Irgendwie blicke ich da noch nicht ganz durch!

edit2: das mit dem Event war irreführend!
Code
Session session = getSession();
AgentContext agentContext = session.getAgentContext();
getSession() liefert hier null zurück. Wie komme ich überhaupt von extern irgendwie an die Session? (womit ich eigentlich wieder beim Anfangsproblem wäre, der Kreis scheint sich zu schliessen!)
Titel: Re: aktuellen Benutzernamen auslesen
Beitrag von: Sebastianh am 09.11.10 - 14:15:37
inzwischen ist es ein wenig her, dass ich eine Lösung gefunden hab, aber der Vollständigkeit halber hier mein Code, der mich zur gewünschten Lösung führte:
Code
	public static String getCurrentNotesUserName(){
		NotesSessionJob job = new NotesSessionJob("getCurrentNotesUserJob"){
			protected IStatus runInNotesThread(Session session,
					IProgressMonitor monitor) throws NotesException {
				setProperty(new QualifiedName(QUALIFIED_NAME_QUALIFIER, "NotesUser"), session.getUserName());
				return Status.OK_STATUS;
			}
        };
     job.schedule();
     try {
		job.join();
	} catch (InterruptedException e) {
		logger.debug("Fehler bei der Notes-Kommunikation");
	}
     Object ret = job.getProperty(new QualifiedName(QUALIFIED_NAME_QUALIFIER, "NotesUser"));
     return (String)ret;
	}