Inaktivitätsverwaltung für Benutzer
Mithilfe eines Skriptes können Sie die Inaktivität pro Benutzer einstellen.
/*
Wenn Sie auf unterschiedliche Timeouts mit unterschiedlichen Benutzern reagieren wollen und nicht die UI-Nummer berücksichtigen wollen, gehen Sie wie folgt vor:
1) Setzen Sie die "Ausführung Timeout" auf z.B. 5 Minuten und "keine Aktion".
2) Bauen Sie eine Verbindung zum Inaktivitätswarnung und starten Sie den Logout-Prozess
*/
main()
{
dpConnect("wockCBLogout",
myUiDpName()+".Warning");
}
wockCBLogout(string sDPE, bool bWaring)
{
if(!globalExists("logoutThread"))
{
//Erstelle Managerglobale Variable
addGlobal("logoutThread", INT_VAR);
delay(0,100);
logoutThread=-1;
}
if( bWaring && getUserName() != "root")
{
/* Zeige Logout-Infotext. Der Text "lableLogout" muss im HMI-Panel existieren*/
setValue("labelLogout", "visible", true);
/* Starte Layout verzögert, wenn keine Benutzerinteraktion stattfindet */
logoutThread = startThread("doLogout");
}
else if(!bWaring)
//Beende verzögertes Layout
{
synchronized(logoutThread)
{
if(logoutThread!=-1)
stopThread(logoutThread);
//Blende Logout-Text aus
setValue("labelLogout", "visible", false);
logoutThread=-1;
}
}
}
doLogout()
{
//Warte eine Minute vor Logout
delay(60);
synchronized(logoutThread)
{
//Logout
STD_LogoutCurrentUser();
logoutThread=-1;
}
}
/*
Wenn Sie auf unterschiedliche Timeouts mit unterschiedlichen Benutzern reagieren wollen und nicht die UI-Nummer berücksichtigen wollen, gehen Sie wie folgt vor:
1) Setzen Sie die "Ausführung Timeout" auf z.B. 5 Minuten und "keine Aktion".
2) Bauen Sie eine Verbindung zum Inaktivitätswarnung und starten Sie den Logout-Prozess.
Es wird zuerst überprüft ob eine benutzerdefinierte Einstellung existiert*/
main()
{
if(dpExists("_uss_InactivityTimeOut"))
//wurde eine benutzerdefinierte Einstellung
konfiguriert?
{
string sUserName = getUserName();
dyn_string
dsFormat,dsErg;
langString lsName;
if(uss_getSpecificUserSetting(sUserName,
"InactivityTimeOut", dsFormat, dsErg, lsName) == 0)
{
if(dynlen(dsErg) >= 1)
sRule = dsErg[1];
dsRuleParts = strsplit(sRule, "<=");//e.g.
0<=25<=99
if(dynlen(dsRuleParts) >= 3)
{
iMinutes = (int)dsRuleParts[3];
if(iMinutes > 0)
//Setup der Inaktivitätsüberwachung
dpSet(myUiDpName+".Inactivity.WarningTimeout",iMinutes);
}
}
}
dpConnect("wockCBLogout", myUiDpName()+".Warning");
}
wockCBLogout(string sDPE, bool bWaring)
{
if(!globalExists("logoutThread"))
{
//Erstelle Managerglobale Variable
addGlobal("logoutThread", INT_VAR);
delay(0,100);
logoutThread=-1;
}
if( bWaring && getUserName() != "root")
{
/* Zeige Logout-Infotext. Der Text "lableLogout" muss im HMI-Panel
existieren*/
setValue("labelLogout", "visible", true);
/* Starte Layout verzögert, wenn keine Benutzerinteraktion
stattfindet */
logoutThread = startThread("doLogout");
}
else if(!bWaring)
//Beende verzögertes Layout
{
synchronized(logoutThread)
{
if(logoutThread!=-1)
stopThread(logoutThread);
//Blende Logout-Text aus
setValue("labelLogout", "visible", false);
logoutThread=-1;
}
}
}
doLogout()
{
//Warte eine Minute vor Logout
delay(60);
synchronized(logoutThread)
{
//Logout
STD_LogoutCurrentUser();
logoutThread=-1;
}
}