Table of Contents

Stellvertreter-Unterstützung

Informationen

  • Kategorien: Sonstiges
  • Version: 21.0.0.11226
  • Veröffentlichungsdatum: Donnerstag, 13. September 2018
  • Entwickler: Eiteljörge
  • Benötigt Datenbankänderung: Ja
  • Betreff: Stellvertreter-Unterstützung

Beschreibung

Die Stellvertreter-Unterstützung erlaubt die Umschaltung eines Benutzers auf einen anderen Benutzer, damit der angemeldete Benutzer Aufgaben für den zu vertretenden Benutzer erledigen kann.

Die Umschaltung zu den vertretenden Benutzer erfolgt ohne eine erneute Anmeldung.

Die Stellvertreter-Unterstützung wird über ein Klassenformel-Event unterstützt. Folgende Funktionen stehen dafür bereit:

  • Menüpunkt 'Stellvertretung'
  • Aufruf des Klassenformel-Events onEvent_Representation
  • Funktion SelectOneOfNDialog() zur Auswahl eines Benutzer
  • Funktion SwitchRepresentation() zur Benutzer-Umschaltung im interaktiven Modus
  • Funktion SwitchRepresentationNI() zur Benutzer-Umschaltung im nicht-interaktiven Modus (Web-Service)

Folgende Funktionalitäten müssen von der Klassenformel selbst ausgeführt werden:

  • Verwaltung der Stellvertretungen und ihre Gültigkeiten
  • Logging der Stellvertretervorgänge

Der typische Ablauf ist folgender:

  • Der Benutzer am Bildschirm klickt den Menüpunkt 'Stellvertretung'.

  • Die Klassenformel onEvent_Representation wird aufgerufen.

  • Die Klassenformel sucht alle gültigen Stellvertretung aus der eigenen Stellvertreterverwaltung für den Benutzer heraus.

  • Die Klassenformel ruft die Funktion SelectOneOfNDialog() auf und übergibt ihr alle gefundenen Stellvertretungen.

  • Es öffnet sich der Auswahldialog, welche alle möglichen Stellvertretungen listet.

  • Der Benutzer wählt eine Stellvertretung aus.

  • Die Klassenformel ruft die Funktion SwitchRepresentation() mit der ausgewählten Stellvertreter (Benutzer-ID des Stellvertretenden) auf.

  • Der Benutzer wird vom angemeldeten Benutzer auf den Benutzer des zu Vertretenden umgeschaltet.

  • Der angemeldete Benutzer arbeitet nun im Kontext des zu vertretenden Benutzer.

  • Der Benutzer schaltet auf seinen Kontext zurück in dem er wieder den Menüpunkt 'Stellvertretung' anklickt.

  • Ablauf wie oben. Der Auswahldialog öffnet sich erneut.

  • Im Auswahldialog gibt es eine Schaltfläche, mit der man die Vertretung beenden kann. Dies klickt der Benutzer an.

  • Die Klassenformel ruft die Funktion SwitchRepresentation() mit einer leeren Benutzer-ID auf.

  • Der Benutzer wird vom Benutzer des zu Vertretenden auf den angemeldeten Benutzer umgeschaltet.

  • Der angemeldete Benutzer arbeitet nun wieder ini seinem eigenen Kontext.

Der angemeldete Benutzer sowie der vertretende Benutzer werden am Objekt gespeichert. Somit ist es zu sehen, wenn ein Vertreter ein Objekt angelegt oder bearbeitet hat.

Es wird der Vertretung nicht der gesamte Kontext des Vertretenden zur Verfügung gestellt. So wird aus Datenschutz nicht auf die Chronik und Favoriten des Vertretenden umgeschaltet.

Der Menüpunkt 'Stellvertretung' wird nur freigeschaltet, wenn die Klassenformel onEvent_Representation vorhanden ist.

Bilder

Stellvertreter-Unterstützung

Beispielcode

void onEvent_Representation()
{
    // Schaltflächen
    var string $asButtonText[1];
    var int $anButtonStyle[1];
    var string $asButtonImage[1];

    // Daten
    var string  $asUserId[];
    var string  $asFirstNameColumn[];
    var string  $asLastNameColumn[];
    var string  $asEndColumn[];
    var int  $nCount;
    var int  $iInitializeSelection;
    var int  $nIdx;

    // Ergebnisse
    var int  $iSelection;
    var int  $iClickedButton;

    // Die Schaltflächen definieren.
    //
    $asButtonText[0]  = "&Stellvertreten";
    $anButtonStyle[0] = #System.Dialog.SelectOneOfN.ButtonStyle.NeedSelection | #System.Dialog.SelectOneOfN.ButtonStyle.DefaultButton;
    $asButtonImage[0] = "person";

    if ( IsRepresentingUser() )
    {
        ReSize( $asButtonText, 2 );
        ReSize( $anButtonStyle, 2 );
        ReSize( $asButtonImage, 2 );

        $asButtonText[1] = "Stellvertretung &beenden";
        $anButtonStyle[1] = #System.Dialog.SelectOneOfN.ButtonStyle.RightAlign;
        $asButtonImage[1] = "cancel";
    }

    // Die Stellvertreterdaten bereitstellen.
    //
    // Typischerweise kommen diese Daten über die Stellvertreterverwaltung
    // aus der Datenbank.
    //
    $nCount = 2;
    ReSize( $asUserId, $nCount );
    ReSize( $asFirstNameColumn, $nCount );
    ReSize( $asLastNameColumn, $nCount );
    ReSize( $asEndColumn, $nCount );
    $nIdx = 0;

    $asUserId[$nIdx] = "OSchulz";
    $asLastNameColumn[$nIdx] = "Schulz";
    $asFirstNameColumn[$nIdx] = "Otto";
    $asEndColumn[$nIdx] = "31.12.2018 17:30";
    $nIdx++;

    $asUserId[$nIdx] = "TMeier";
    $asLastNameColumn[$nIdx] = "Meier";
    $asFirstNameColumn[$nIdx] = "Thomas";
    $asEndColumn[$nIdx] = "13.08.2018 00:00";
    $iInitializeSelection = $nIdx;   // Meier soll vorausgewählt sein
    $nIdx++;

    // Den Auswahltdialog öffnen.
    //
    $iSelection = SelectOneOfNDialog(	// $iSelection: Ausgewählter Eintrag
        6,				// SaveID - eindeutige ID im Projekt: hier für Stellvertreterauswahldialog
        "Stellvertreter wählen ...", 	// Dialogtitel
        0,				// Flags: z.B. #System.Dialog.SelectOneOfN.DisableCancel
        $asButtonText,		// Text im Button. Definiert auch die Anzahl der Buttons.
        $anButtonStyle,		// Button-Flags
        $asButtonImage,		// Symbol im Button
        $iClickedButton,		// Rückgabewert: der geklickte Button
        $iInitializeSelection,		// auszuwählender Eintrag direkt nach dem Öffnen        
        "Name",			// Erste Spalte: Überschrift
        $asLastNameColumn,		// Erste Spalte: Spaltenwerte
        "Vorname",			// Zweite Spalte: Überschrift
        $asFirstNameColumn,		// Zweite Spalte: Spaltenwerte
        "Ende",			// Dritte Spalte: Überschrift
        $asEndColumn			// Zweite Spalte: Spaltenwerte
    );

    // Auswahlt auswerten und Aktion ausführen.
    //
    if ( $iClickedButton == 0 )
    {
        // Eine Stellvertretung wurde ausgewählt.
        // Auf den vertretenden Benutzer umschalten.
        //
        SwitchRepresentation( $asUserId[$iSelection] );
    }
    else if ( $iClickedButton == 1 )
    {
        // Stellvertretung soll beendet werden.
        // Auf den angemeldeten Benutzer umschalten.
        //
        SwitchRepresentation( "" );
    }
    else if ( $iClickedButton == -1 )
    {
        // Stellvertretungauswahl wurde abgebrochen.
        // Nichts machen.
        //
        ;
    }
}