export async function Schaltfläche_1_OnDown(item, x, y, modifiers, trigger) {
let logonResultText = "none";
let errMsg;
let lcid = HMIRuntime.Language;
let username,
passwort;
try {
//Benutzername lesen
username = Screen.Items("eaChangeUser_Username").ProcessValue;
if (username === null) {
logonResultText = HMIRuntime.Resources.TextLists("@Default.90104_LogonLogoffUser_LogonResponseText").Item(4).Item(lcid);
HMIRuntime.Trace("90104_LogonLogoffUser | Benutzername ist leer. ResultText: " + logonResultText + " | " + typeof(logonResultText), HMIRuntime.Trace.Enums.hmiSeverity.Info);
Screen.Items("txtBoxChangeUser_State").Text = logonResultText;
return
}
//Passwort einlesen
try {
passwort = UI.SysFct.CreateGetAndClearScreenItemCommand("./eaChangeUser_Passwort");
} catch (ex) {
HMIRuntime.Trace("90104_LogonLogoffUser | Passwort ungültig, Grund: " + ex, HMIRuntime.Trace.Enums.hmiSeverity.Info);
}
if (Screen.Items("eaChangeUser_Passwort").ProcessValue == null) {
logonResultText = HMIRuntime.Resources.TextLists("@Default.90104_LogonLogoffUser_LogonResponseText").Item(1).Item(lcid);
HMIRuntime.Trace("90104_LogonLogoffUser | Passwort ist leer. ResultText: " + logonResultText, HMIRuntime.Trace.Enums.hmiSeverity.Info);
Screen.Items("txtBoxChangeUser_State").Text = logonResultText;
return
}
//Ändere den Benutzer
HMIRuntime.Trace("90104_LogonLogoffUser | Versuche Benutzer " + username + " einzuloggen. Passwort-Datentyp: " + typeof(passwort) + " | Wert: " + Screen.Items("eaChangeUser_Passwort").ProcessValue, HMIRuntime.Trace.Enums.hmiSeverity.Info);
HMIRuntime.UI.UserManagement.SysFct.ChangeUser(username, passwort)
.then(() => {
HMIRuntime.Timers.SetTimeout(() => {
//Prüfen ob der Benutzer korrekt eingeloggt oder abgelehnt wurde
//Hinweis: ChangeUser() resolved auch wemm Benutzer oder Passwort falsch war
if (Tags("@UserName").Read() == username) {
HMIRuntime.Trace("90104_LogonLogoffUser | Benutzer " + username + " erfolgreich eingeloggt.", HMIRuntime.Trace.Enums.hmiSeverity.Info);
logonResultText = HMIRuntime.Resources.TextLists("@Default.90104_LogonLogoffUser_LogonResponseText").Item(2).Item(lcid);
//Nach erfolgreichem Wechsel des Benutzers den Reset der Spracheinstellung auf Default rückgängig machen (kann man anscheinend nicht unterdrücken).
HMIRuntime.Language = lcid;
} else {
HMIRuntime.Trace("90104_LogonLogoffUser | Benutzer " + username + " oder Passwort falsch.", HMIRuntime.Trace.Enums.hmiSeverity.Info);
logonResultText = HMIRuntime.Resources.TextLists("@Default.90104_LogonLogoffUser_LogonResponseText").Item(3).Item(lcid);
}
Screen.Items("txtBoxChangeUser_State").Text = logonResultText;
//Aktualisieren der amgezeigten Benutzerrollen
try {
let roles = HMIRuntime.UserManagement.GetRolesFromUser();
if (roles.length > 0) {
let strRoles = '';
roles.forEach((roleName) => {
strRoles += roleName + '\n'
});
HMIRuntime.Trace("90104_LogonLogoffUser | The current user is in role(s): " + strRoles);
Screen.Items("txtBoxCurrentUser_Roles").Text = strRoles;
} else {
HMIRuntime.Trace("90104_LogonLogoffUser | User has no roles.");
Screen.Items("txtBoxCurrentUser_Roles").Text = "";
}
} catch (ex) {
HMIRuntime.Trace("90104_LogonLogoffUser | Ausgabe der Benutzerrollen fehlgeschlagen, Grund: " + ex, HMIRuntime.Trace.Enums.hmiSeverity.Error);
}
}, 200);
})
.catch((ex) => {
errMsg = HMIRuntime.GetDetailedErrorDescription(errorCode);
HMIRuntime.Trace("90104_LogonLogoffUser | Benutzer " + username + " konnte nicht eingeloggt werden, Grund: " + errMsg + " Fehlercode: " + ex, HMIRuntime.Trace.Enums.hmiSeverity.Info);
logonResultText = "logon failed, Grund: " + errMsg;
})
.finally(() => {
HMIRuntime.Trace("90104_LogonLogoffUser | Schreibe folgenden Rückmeldetext: " + logonResultText, HMIRuntime.Trace.Enums.hmiSeverity.Info);
Screen.Items("txtBoxChangeUser_State").Text = logonResultText;
});
} catch (ex) {
HMIRuntime.Trace("90104_LogonLogoffUser | Einloggen des Benutzers fehlgeschlagen. Grund: " + ex, HMIRuntime.Trace.Enums.hmiSeverity.Error);
logonResultText = "logon failed";
Screen.Items("txtBoxChangeUser_State").Text = logonResultText;
}
//Screen.CurrentWindow.Close();
}