"[Gelöst]" Active Sessions in message ausgeben

17. August 2013 11:43

Hallo beisammen,

steh hier voll auf dem Schlauch.
Möchte alle aktuell angemeldeten User in einer Message ausgeben.
Leider bringt er mir nur den ersten.
Bin nicht der Held in NAV und bitte um kurze Unterstützung.


IF ActiveSession.FIND('-') THEN BEGIN
REPEAT
User.GET(ActiveSession."User SID");
WITH ActiveSession DO BEGIN
SETFILTER("User SID",User."User Security ID");
ActiveSession.MARK:=FIND('-');
END;
UNTIL ActiveSession.NEXT = 0;
User.MARKEDONLY:=TRUE;
MESSAGE('Aktuelle Anmeldungen: ' + User."Full Name",FORMAT(User) + '\');
END;

DANKE!!

Grüße
Bernd
Zuletzt geändert von bkonle am 20. August 2013 15:43, insgesamt 1-mal geändert.

Re: Active Sessions in message ausgeben

17. August 2013 13:33

Leider bringt er mir nur den ersten.

Das ist der, der am Anfang mit GET aufgerufen wurde. User.MARKEDONLY ist in diesem Zusammenhang ohne Wirkung.

ActiveSession.MARK:=FIND('-'); und User.MARKEDONLY:=TRUE; ergibt zusammen auch keinen Sinn. Wenn man das so macht, muss man entweder die User markieren und danach alle markierten Usernamen entweder in einer zweiten Repeatschleife zusammenstellen oder besser dies gleich beim Auffinden in einer Textvariablen merken ( wenn es nicht zuviele sind und alle zusammen die 1024 Byte Grenze überschreiten (Full Name hat maximale Länge 80),dann muss man ggf. ein Array aufbauen. Ich gehe davon aus, dass nicht eine Message pro User erscheinen soll.

Re: Active Sessions in message ausgeben

17. August 2013 13:40

Hallo Kai,

danke für die INfo.
Ja, ich dachte mir schon dass ich es irgendwie in ein Array packen muss, habe aber leider keine Ahnung wie genau ich da vorgehen soll.
Damit er für jeden Benutzer eine Message bringt, da hatte ich schon hinbekommen, aber wie du auch erkannt hast, möchte ich natürlich alle Benutzer in 1 Message untereinander ausgeben.

Mein Grundgerüst ist ja so:

IF ActiveSession.FIND('-') THEN BEGIN
User.GET(ActiveSession."User SID");
MESSAGE('Aktuelle Anmeldungen: ' + FORMAT(ActiveSession.COUNT) + '\' + '\'+
'Folgende Benutzer sind angemeldet: ' + '\' + '- ' + User."Full Name" + '\' )
END ELSE
MESSAGE('Derzeit keine Anmeldungen');

Wobei die ELSE sowieso egal wäre, denn es ist ja grundsätzlich immer jemand angemeldet.

Aber wie packe ich das alles jetzt in ein Array und lass es dann ausgeben?
Es sind höchstens 20 User die gleichzeitig angemeldet sind.

Viele Grüße und danke schon mal.

Bernd

Re: Active Sessions in message ausgeben

17. August 2013 21:45

Bitte denke daran, Codezeilen mit Codetags einzuschliessen,damit das im Beitrag besser lesbar ist.

Bei so vielen Usern ist das als Message ungeeignet. Wesentlich besser sieht es aus, wenn man die Tabellendaten dann einfach direkt anzeigt. Das kann man entweder über markieren und filtern lösen oder alternativ alle angemeldeten User in eine temporäre Instanz der Usertabelle schreiben und diese dann anzeigen.

Hier bzw. hier stehen Infos zum Einsatz von temporären Tabellen für solche Zwecke.

Re: Active Sessions in message ausgeben

17. August 2013 22:40

Hallo Kai,

ups, sorry, danke für den Tip, werde das nächste mal in Code einschliessen.

Du hast recht, denn es werden auch evtl. mit der Zeit mehr User werden, dann Versuch ich das mit einer temp-Datei.

Vielen Dank!

Grüsse Bernd

Re: Active Sessions in message ausgeben

19. August 2013 19:58

Hallo,

ok, ich raff das nicht. Mit den Temporären TAbellen ist klar, jedoch komm ich einfach nicht weiter, da ich ja 2 temporäre Tabellen habe.
Zum Einen die Active Session und zum Anderen die User Tabelle.
Aber welche Temp Tabelle ruf ich denn nun auf?

Wäre echt um Hilfe Dankbar.

lg Bernd

Re: Active Sessions in message ausgeben

19. August 2013 21:56

bkonle hat geschrieben: Mit den Temporären TAbellen ist klar, jedoch komm ich einfach nicht weiter, da ich ja 2 temporäre Tabellen habe.

Das hast du völlig missverstanden, die sind beide NICHT temporär. Die durchlaufenen Tabellen sind Systemtabellen in der Datenbank, die automatisch erzeugt werden.
Gemeint hatte ich eine temporäre Instanz der Usertabelle (also eine die im Arbeitsspeicher liegt), die die gefundenen User aufnimmt, damit man diese dann gemeinsam anzeigen kann.

So in etwa sieht das dann aus:

Code:
UserTemp.DELETEALL;  // das darf man natürlich NUR mit der temporären Instanz machen.
                                   //  Siehe Punkt Deklaration in Natalie's Artikel oben und NIE vergessen

IF ActiveSession.FINDSET THEN BEGIN
  REPEAT
    User.GET(ActiveSession."User SID"); // Aufruf des Users in der realen Systemtabelle
    UserTemp := User;  // Temporäre Instanz der Usertabelle übernimmt die Werte vom real gefundenen User
    IF UserTemp.INSERT THEN;  // Einfügen in die temporäre Instanz mit IF um Insertfehler bei doppelten "USER SID" zu vermeiden
  UNTIL
   ActiveSession.NEXT = 0;

   //ActiveUsers ist eine Pagevariable für eine neue Page für die User-Tabelle mit SourceTableTemporary = Yes und Editable= No
   CLEAR(ActiveUsers); 
   ActiveUsers.SETTABLEVIEW(UserTemp);  // Anzeigen der Datensätze der temporären Instanz
   ActiveUsers.RUN;
END ELSE
  MESSAGE('Derzeit keine Anmeldungen');

Re: Active Sessions in message ausgeben

20. August 2013 10:21

Natürlich erst im Test-System testen. Wenn man Anfänger in NAV ist, sollte man mit temporäre Tabellen erstmal verstehen statt drauf los zu programmieren. Das ist hochgradig riskant und kannst damit im schlimmsten Fall das System zerstören. (deleteall auf einer tabelle wo das property temporary nicht gesetzt wurde.)

Re: Active Sessions in message ausgeben

20. August 2013 11:39

JanGD hat geschrieben:Natürlich erst im Test-System testen. Wenn man Anfänger in NAV ist, sollte man mit temporäre Tabellen erstmal verstehen statt drauf los zu programmieren. Das ist hochgradig riskant und kannst damit im schlimmsten Fall das System zerstören. (deleteall auf einer tabelle wo das property temporary nicht gesetzt wurde.)

Nicht nur am Anfang empfiehlt sich daher immer, zu prüfen, ob die Tabelleninstanz wirklich temporär ist, bevor man Daten löscht.

Re: Active Sessions in message ausgeben

20. August 2013 15:40

Hallo Kai,

herzlichen Dank, jetzt ist der Knoten aufgegangen und habe das Prinzip der Temp - Tabellen verstanden.

Danke auch an Jan!!

Viele Grüße
Bernd