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

Abbildung 1. Inactivity-Datenpunkt und Inaktivitätswarnung

*/

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;
  }
}