Skip to main content

CSV Import

Spezifikation CSV-Aufbau für Personenimport

Als Feldtrennung muss ";" verwendet werden

Description Config Expected
Header Am einfachsten gelangt man zu einer CSV-Vorlage, indem man eine Person exportiert. Das durch den Export erhaltene CSV-File kann anschliessend angepasst und dann als Import-CSV verwendet werden.
Grundsätzlich muss das der Header des CSV-Files wie folgt aussehen:


Die Reihenfolge ist zwingend, wird eine Spalte verschoben, gelöscht, oder hinzugefügt ist der Import nicht mehr möglich.

Wird der Header (die oben angezeigten 4 Zeilen) nach unten verschoben, werden nur die Daten unterhalb des Headers importiert. Sollten sich Daten darüber befinden werden diese ignoriert.
date Ist editierbar und spielt derzeit keine Rolle.
language Ist ein Pflichtfeld und muss befüllt werden, Möglichkeiten "de", "fr", "en", "it". Die erfasste Sprache definiert in welcher Sprache die Merkmale (OE/Tätigkeit) im System gegengeprüft oder importiert werden.
encoding "ansi" Definiert die Zeichenkodierung (erlaubt die eindeutige Zuordnung von Schriftzeichen - darf nicht geändert werden)
person-id System-ID des Benutzer. Wird vom System automatisch vergeben und darf nicht angepasst werden. Wird beim aktualisieren einer Person als Identifikation verwendet.
status enabled = aktiviert
archived = archiviert
disabled = deaktiviert
name Pflichtfeld
prename Pflichtfeld
username Optionale Identifikation Pflichtfeld
password Neue Person:
  • Wird hier ein Passwort gesetzt kann sich der User damit einloggen.
  • Wird hier kein Passwort definiert (empfohlen) muss der Benutzer im Loginprozess ein neues Passwort erstellen mittels der "Passwort vergessen" Funktion.
Vorhandene Person aktualisieren:
  • Bei bestehenden Benutzern bleibt das bestehende PW in der DB unberührt, wenn das Feld in der Liste leer ist.
  • Passwörter können upgedatet werden, indem in die Excel-Liste ein neues PW eingetragen wird. Das alte PW wird überschrieben.
email Optionale Identifikation Es handelt sich um ein Pflichtfeld, es wird geprüft ob es sich beim Eintrag um eine Emailadresse handelt.
personal-id Optionale Identifikation Es gibt keine Mindestlänge
Maximallänge ist 255 Zeichen
Nicht zu verwechseln mit "person-id"
Muss nicht eindeutig sein
role Es gibt folgende Möglichkeiten, es handelt sich um ein Pflichtfeld
  • learner
  • default-subadministrator
  • administrator

Niedrige Rollen können keine höheren Rollen importieren oder ändern!
language Es handelt sich um ein Pflichtfeld. Vorhandene Sprachen (de, en, fr, it).
orgunit, jobdescription (orgunits/jobdescription) for Admin
  • OE/Tätigkeit können beim Import leer sein. (Vorsicht: nach leeren OE/Tätigkeiten kann nicht gesucht werden)
  • Ist eine OE/Tätigkeit in der Liste, aber noch nicht im System vorhanden, dann wird diese neu angelegt.
  • Ist eine neue OE/Tätigkeit in der Liste, im System ist jedoch eine andere hinterlegt, wird die alte entfernt und die neue hinzugefügt, die OE/Tätigkeit wird durch den Import ausgetauscht.
  • Möchte man eine zweite OE/Tätigkeit im System ergänzen muss auch die alte OE/Tätigkeit in der Liste vorhanden sein. Die Erfassung von mehreren muss mit dem Zeichen " | " getrennt werden.
  • Möchte man eine Pfad einer OE/Tätigkeit im System erfassen, muss dies mit dem Zeichen " / " erfolgen.
is_deletable Definiert ob die angelegte Person mit der Einstellung "löschbar ja/nein" erstellt wird.
  • 0 = Nein (Person ist nicht löschbar)
  • 1 = ja (Person ist löschbar)
change_password Definiert ob die angelegte Person mit der Einstellung "PW-ändern ja/nein" erstellt wird.
Es handelt sich um ein Pflichtfeld, und folgende Einstellungen sind möglich:
  • 0 = Nein (Person muss beim nächsten Login das PW nicht ändern)
  • 1 = ja (Person muss beim nächsten Login das PW ändern)
  • leer = keine Änderung

Bei einem Export sind die Felder in "change_password" leer.

Speicherung unter OSX

Speicherung von Listen unter OSX in Excel: "Windows Comma Separated" wählen.


System-Konfigurationen

Die Konfiguration für die Standardpasswortvergabe und die Identifzierungsmöglichkeiten werden vom Systemadmin unter: Default php im Parameter "person_import" vorgenommen.

Übersetzung von OE/Tätigkeit:

  • Eine OE/Tätigkeit besteht aus einem Identifier, für den es Übersetzungen geben kann.
  • Übersetzungen müssen im System in der Merkmalsverwaltung bei Bedarf eingetragen werden.
  • Sind keine Übersetzungen vorhanden, wird der Identifiername verwendet.
  • OE werden mit Pfad und Übersetzung in der entsprechend gewählte Exportsprache ausgegeben. So können beim Import entsprechend Anpassungen an der Übersetzung sauber nachgeführt werden. 
    Dies erfolgt nur in der gewählten Sprache des Exports.\

Vorhandene Person ändern:

Mit dieser ID wird die Person eindeutig identifiziert. Ist die ID bereits im System vorhanden, werden die vorhanden Personendaten mit den neuen Daten aus der Liste überschrieben.

Ist die ID noch nicht im System oder das Feld leer, kann die Person über drei weitere Felder identifiziert werden.

Identifizierungsmöglichkeiten werden in folgender Priorität geprüft:

  1. "person_id" (Definition siehe "SpezifikatioSV-Aufbau")
  2. "personal_id" (Definition siehe "SpezifikatioSV-Aufbau")
  3. "email" (Definition siehe "SpezifikatioSV-Aufbau")
  4. "username" (Definition siehe "SpezifikatioSV-Aufbau")

Ablauf Fehlerhandling:

  • Validierung File und Header des CSV
  • Inhaltliche Fehler im CSV
  • Validerung Ergebnis Export
  • Fehlerhandling DB:
    • Die Prüfungen zwischen der Importliste und dem System, geschieht auf verschiedenen Ebenen. Bei der Prüfung in der Datenbank, wird ein Fehler auf dem GUI dargestellt, aber nicht der Grund.
    • Dafür gibt es zwei Tabellen in der Datenbank. In der Tabelle "trc_import_data" wird der Grund (Zeile/Spalte) des fehlerhaften Imports ausgewiesen.
    • Folgende relevante Tabellen gibt es:
      • trc_import_data
      • trc_import_option

Error Messages

if (error_msg === 'orgunits_not_accepted') {
                validatorData.headline = auxiliary.gt('Dateiüberprüfung fehlgeschlagen');
                validatorData.text = auxiliary.gt('Organisationseinheiten nicht akzeptiert!');
                validatorResult.push(validatorData);
                validatorData = [];
            }
            if (error_msg === 'too_many_header_lines') {
                validatorData.headline = auxiliary.gt('Dateiüberprüfung fehlgeschlagen');
                validatorData.text = auxiliary.gt('Falsche Anzahl Zeilen im Tabellen-Header!');
                validatorResult.push(validatorData);
                validatorData = [];
            }
            if (error_msg === 'header_fields_invalide') {
                validatorData.headline = auxiliary.gt('Dateiüberprüfung fehlgeschlagen');
                validatorData.text = auxiliary.gt('Ungültige Felder im Tabellen-Header!');
                validatorResult.push(validatorData);
                validatorData = [];
            }
            if (error_msg === 'no_person_header_found') {
                validatorData.headline = auxiliary.gt('Dateiüberprüfung fehlgeschlagen');
                validatorData.text = auxiliary.gt('Bitte überprüfen Sie den Tabellen-Header!');
                validatorResult.push(validatorData);
                validatorData = [];
            }
            if (error_msg === 'no_valide_person_found') {
                validatorData.headline = auxiliary.gt('Fehler');
                validatorData.text = auxiliary.gt('Keine gültigen Personen gefunden!');
                validatorResult.push(validatorData);
                validatorData = [];
            }
            if (error_msg === 'wrong_person_status') {
                validatorData.headline = auxiliary.gt('Fehler');
                validatorData.text = auxiliary.gt('Fehlerhafter Personenstatus!');
                validatorResult.push(validatorData);
                validatorData = [];
            }
            if (error_msg === 'wrong_person_username') {
                validatorData.headline = auxiliary.gt('Fehler');
                validatorData.text = auxiliary.gt('Fehlerhafter Benutzername!');
                validatorResult.push(validatorData);
                validatorData = [];
            }
            if (error_msg === 'wrong_person_role') {
                validatorData.headline = auxiliary.gt('Fehler');
                validatorData.text = auxiliary.gt('Fehlerhafte Benutzerrolle');
                validatorResult.push(validatorData);
                validatorData = [];
            }
            if (error_msg === 'wrong_person_personal_id') {
                validatorData.headline = auxiliary.gt('Fehler');
                validatorData.text = auxiliary.gt('Fehlerhafte Personalnummer');
                validatorResult.push(validatorData);
                validatorData = [];
            }
            if (error_msg === 'wrong_person_language') {
                validatorData.headline = auxiliary.gt('Fehler');
                validatorData.text = auxiliary.gt('Fehlerhafte Benutzersprache');
                validatorResult.push(validatorData);
                validatorData = [];
            }
            if (error_msg === 'wrong_person_is_deletable') {
                validatorData.headline = auxiliary.gt('Fehler');
                validatorData.text = auxiliary.gt('Nicht erlaubte Einträge in "Ist löschbar"!');
                validatorResult.push(validatorData);
                validatorData = [];
            }
            if (error_msg === 'duplicate_person_id') {
                validatorData.headline = auxiliary.gt('Fehler');
                validatorData.text = auxiliary.gt('Doppelte Personen-ID!');
                validatorResult.push(validatorData);
                validatorData = [];
            }
            if (error_msg === 'empty_username') {
                validatorData.headline = auxiliary.gt('Fehler');
                validatorData.text = auxiliary.gt('Benutzername ist leer!');
                validatorResult.push(validatorData);
                validatorData = [];
            }
            if (error_msg === 'duplicate_username') {
                validatorData.headline = auxiliary.gt('Fehler');
                validatorData.text = auxiliary.gt('Doppelter Benutzername!');
                validatorResult.push(validatorData);
                validatorData = [];
            }
            if (error_msg === 'duplicate_personal_id') {
                validatorData.headline = auxiliary.gt('Fehler');
                validatorData.text = auxiliary.gt('Doppelte Personalnummer!');
                validatorResult.push(validatorData);
                validatorData = [];
            }
            if (error_msg === 'jobdescriptions_not_accepted') {
                validatorData.headline = auxiliary.gt('Fehler');
                validatorData.text = auxiliary.gt('Nicht erlaubte Einträge in "Tätigkeiten"!');
                validatorResult.push(validatorData);
                validatorData = [];
            }
            if (error_msg === 'orgunits_not_accepted') {
                validatorData.headline = auxiliary.gt('Fehler');
                validatorData.text = auxiliary.gt('Nicht erlaubte Einträge in "Organisationseinheiten"!');
                validatorResult.push(validatorData);
                validatorData = [];
            }
            if (error_msg === 'role_not_accepted') {
                validatorData.headline = auxiliary.gt('Fehler');
                validatorData.text = auxiliary.gt('Nicht erlaubte Einträge in "Benutzerrollen"!');
                validatorResult.push(validatorData);
                validatorData = [];
            }