27. Januar 2016 21:38
Hallo,
folgendes wäre auch möglich:
- Ergänze die Tabelle 91 "User Setup" um ein DateTime Feld mit Namen "Letzte Aktivität" um die letzte Aktivität eines Users zu speichern.
- Bau dir nach dieser Anleitung eine "Session Manager" Page:
http://www.comporsys.de/dynamics-nav-bl ... n-manager/ Die fertig umgebaute Page hänge ich diesem Post an. Somit kannst du dir die nächsten Schritte sparen. Diese enthält auch eine Action um die Session richtig zu beenden. Wenn man nämlich einfach nur die Zeile löscht, wie im Blog beschrieben, passiert beim User gar nichts.- Ergänze die "Session Manager" Page um die Globale Variable "Leerlaufzeit" vom Datentyp "Duration". Lege ein Feld an, welches auf diese Variable verweist.
- Ergänze die "Session Manager" Page um folgenden Code im OnAfterGetRecord Trigger:
- Code:
CLEAR(Leerlaufzeit);
IF UserSetup.GET("User ID") AND (UserSetup."Letzte Aktivität" <> 0DT) THEN
Leerlaufzeit := CURRENTDATETIME - UserSetup."Letzte Aktivität";
- Ergänze die "Session Manager" Page um folgende Funktion:
- Code:
Funktionsname: LogLastActivityTime
Lokale Variable in der Funktion: "UserSetup" vom Datentyp "Record". Subtyp="User Setup"
- Code:
IF NOT UserSetup.GET(USERID) THEN
EXIT
ELSE BEGIN
UserSetup."Letzte Aktivität" := CURRENTDATETIME;
UserSetup.MODIFY;
END;
So, nun müsste man nur noch an den Stellen wo viel gearbeitet wird die Funktion von der "Session Manager" Page aufrufen. Z.B. in den OnAfterGetRecord Triggern der gut genutzten Pages.
Allerdings geht dies auch etwas einfacher; und zwar über die Codeunit 1.
Ruf die Funktion in folgenden Triggern auf:
GetSystemIndicator //Wird nach dem Login aufgerufen
OnDatabaseInsert
OnDatabaseModify
OnDatabaseDelete
OnDatabaseRename
Die 4 letzten Trigger durchlaufen aber nur wenn die entsprechenden Tabellen im Aktivitätenprotokoll mitgeloggt werden.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.