WinCC Unified Wechsele Benutzer

Paul_Weber

Level-2
Beiträge
7
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich habe einen Button eingefügt, mit dem ich den Benutzer wechseln möchte. Das funktioniert auch soweit super.
Nur wie kann ich auswerten, ob die Anmeldung erfolgreich war oder ob das Passwort falsch eingegeben wurde?
Ich meine, es gibt diesen catch (err)-Bereich, aber egal, was ich dort mache, ich bekomme keine Infos oder Fehler-IDs heraus.

await HMIRuntime.UI.UserManagement.SysFct.ChangeUser(benutzername, passwort);

} catch (err) {
// Fehlermeldung in ein Tag schreiben
const errorText = err.message || String(err);
HMIRuntime.Tags.SysFct.SetTagValue("AnmeldeError", errorText);

}

Danke im voraus
TIA V20

Viele grüße
Paul
 
Soweit ich weiß nur indem du nach ein paar Milisekunden prüfst ob der aktuell angemeldete Benutzer dem eingegebenen Benutzernamen entspricht.
Ich hab mir dazu mal folgendes zusammen gebastelt.
Gewinnt sicher keinen Schönheitspreis, funktioniert aber ¯\_(ツ)_/¯

Javascript:
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();
}
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Eine weitere Möglichkeit ist die Option Audit. Im Audit werden alle Anmeldeversuche mit Protokolliert auch die fehlgeschlagen Versuche.

Es gibt die interne Variable @UserName die den Angemeldeten Benutzer enthält.

Wenn Du die Variable auf Änderung z.B. über ein E/A-Feld überprüfst kannst Du damit eine Meldung mit dem alten und neunen Benutzer ausgeben
 
Zurück
Oben