Zum Inhalt

Import aus weiteren Programmen

Manchmal liegen externe Daten als einfache Excel-Tabelle vor. ENBREA kann Daten direkt aus einfachen Excel-Tabellen importieren. Unterstützt werden die Formate XLSX und CSV. Excel muss dazu nicht installiert sein.

Wie funktioniert der Import?

Der Workflow besteht grob aus zwei Schritten:

  1. Das ECF Tool for Excel liest direkt aus einer Excel-Datei oder CSV-Datei und generiert ECF-Dateien.

  2. Das ECF Tool for ENBREA importiert die ECF-Dateien nach ENBREA.

Mit dem PowerShell-Modul PSEnbrea können beide Schritte mit einem einzigen Befehl ausgeführt werden.

Installieren

  1. Falls noch nicht geschehen, bitte auf dem Computer die .NET Core Laufzeitumgebung, PowerShell 7, das PowerShell-Modul PSEnbrea installieren und einen Zeitraum in ENBREA anlegen. Was genau hierfür zu tun ist, steht im Kapitel Voraussetzungen.

  2. Im Windows-Explorer ein neues Verzeichnis c:\enbrea anlegen (das Verzeichnis kann natürlich auch anders heißen).

  3. PowerShell 7 über das Windows-Menü starten: Start > Windows Powershell > Windows Powershell

  4. Mit folgendem Befehl in das soeben angelegte Verzeichnis wechseln:

    cd c:\enbrea
    
  5. Nun den folgenden PowerShell-Befehl eintippen:

    Initialize-EnbreaImport enbrea.json
    

    Es wird jetzt eine Konfigurationsdatei enbrea.json angelegt, die als Vorlage für die weitere Konfiguration dient.

  6. Bitte folgenden PowerShell-Befehl eintippen:

    Install-EcfTools enbrea,excel
    

    Es werden das ECF Tool for ENBREA und das ECF Tool for Excel installiert.

Konfigurieren

Die gesamte Konfiguration des Imports befindet sich in der Textdatei enbrea.json. Diese Datei in einem Texteditor öffnen und die gewünschten Eigenschaften überschreiben.

Die folgenden Eigenschaften müssen angepasst werden. Sie konfigurieren den individuellen Zugang zu ENBREA:

Eigenschaft Bedeutung
Enbrea.EcfImport.IdentityServiceUrl URL zum ENBREA Identity Service
Enbrea.EcfImport.IdentityUserName ENBREA Benutzername
Enbrea.EcfImport.IdentityPassword ENBREA Kennwort
Enbrea.EcfImport.SchoolServiceUrl URL zum ENBREA School Service
Enbrea.EcfImport.SchoolTermId ID des ENBREA-Zeitraums, in den importiert werden soll. Die ID des Zeitraums ist in der Adressleiste des Browsers sichtbar, während man an der ENBREA-Instanz angemeldet ist.

Bei einem Zugriff auf eine XLSX-Datei müssen folgende Eigenschaften ebenfalls angepasst werden:

Eigenschaft Bedeutung
Excel.EcfExport.SourceProvider Wert = XLSX
Excel.EcfExport.SourceFileName Dateiname der XLSX-Datei
Excel.EcfExport.XlsMapping Abbildung der Tabellenspalten (siehe Beispiel)

Bei einem Zugriff auf eine CSV-Datei müssen folgende Eigenschaften ebenfalls angepasst werden:

Eigenschaft Bedeutung
Excel.EcfExport.SourceProvider Wert = CSV
Excel.EcfExport.SourceFileName Dateiname der CSV-Datei
Excel.EcfExport.CsvMapping Abbildung der Tabellenspalten (siehe Beispiel)

Alle anderen Eigenschaften sind schon vorkonfiguriert, können aber natürlich jederzeit überschrieben werden.

Bitte beachten

Der Backslash (= umgedrehter Schrägstrich) in Dateipfaden muss in einer JSON-Datei stets gedoppelt werden, also \\ statt \.

Das Ergebnis für den Import aus einer XLSX-Datei könnte wie folgt aussehen:

{
    "Excel" : {
        "EcfExport": {
            "TargetFolderName": "excel\\ecf-export",
            "SourceProvider" : "Xlsx",
            "SourceFileName": "excel\\beispiel.xlsx",
            "XlsFirstRowNumber": 2,
            "XlsMappings": [
                { "FromHeader": "A",  "ToHeader": "Vorname" },
                { "FromHeader": "B",  "ToHeader": "Nachname" },
                { "FromHeader": "C",  "ToHeader": "Klasse" }
            ],         
    },
    "Enbrea" : {
        "EcfImport": 
        {
            "IdentityServiceUrl" : "https://enbrea.beispiel.de/identity",
            "IdentityUserName" : "importbenutzer",
            "IdentityPassword" : "qwertz",
            "SchoolServiceUrl" : "https://enbrea.beispiel.de/school",
            "SchoolTermId" : "9067eff1-6817-4e59-855c-9ace4e51f139",
            "Files" : [
                { "Name" : "CourseCategories", "KeyHeaders":"Code" },
                { "Name" : "CourseFlags", "KeyHeaders":"Code" },
                { "Name" : "CourseTypes", "KeyHeaders":"Code" },
                { "Name" : "EducationalAreas", "KeyHeaders":"Code" },
                { "Name" : "EventTypes", "KeyHeaders":"Code" },
                { "Name" : "ExamTypes", "KeyHeaders":"Code" },
                { "Name" : "FormsOfTeaching", "KeyHeaders":"Code" },
                { "Name" : "LessonProfiles", "KeyHeaders":"Code" },
                { "Name" : "LevelOfQualifications", "KeyHeaders":"Code" },
                { "Name" : "ResourceCategories", "KeyHeaders":"Code" },
                { "Name" : "ResourceFlags", "KeyHeaders":"Code" },
                { "Name" : "RoomAbsenceReasons", "KeyHeaders":"Code" },
                { "Name" : "RoomTypes", "KeyHeaders":"Code" },
                { "Name" : "SchoolClassAbsenceReasons", "KeyHeaders":"Id" },
                { "Name" : "SchoolClassFlags", "KeyHeaders":"Code" },
                { "Name" : "SchoolClassLevels", "KeyHeaders":"Code" },
                { "Name" : "SchoolClassProfils", "KeyHeaders":"Code" },
                { "Name" : "SchoolForms", "KeyHeaders":"Code" },
                { "Name" : "SchoolOrganisations", "KeyHeaders":"Code" },
                { "Name" : "SchoolTypes", "KeyHeaders":"Code" },
                { "Name" : "SubjectFocuses", "KeyHeaders":"Code" },
                { "Name" : "SubjectTypes", "KeyHeaders":"Code" },
                { "Name" : "TeacherAbsenceReasons", "KeyHeaders":"Id" },
                { "Name" : "TeacherAbsenceReasonDifferentiations", "KeyHeaders":"Code" },
                { "Name" : "TeacherTypes", "KeyHeaders":"Code" },
                { "Name" : "TimeAccountEntryReasons", "KeyHeaders":"Code" },
                { "Name" : "TimeAccountEntryReportings", "KeyHeaders":"Code" },
                { "Name" : "TimeAccountEntryTypes", "KeyHeaders":"Code" },
                { "Name" : "VacationTypes", "KeyHeaders":"Code" },
                { "Name" : "VocationalField", "KeyHeaders":"Code" },
                { "Name" : "EducationalPrograms", "KeyHeaders":"Code" },
                { "Name" : "TimeFrames", "KeyHeaders":"Code" },
                { "Name" : "Departments", "KeyHeaders":"Code" },
                { "Name" : "Rooms", "KeyHeaders":"Code" },
                { "Name" : "RoomAbsences", "KeyHeaders":"Id" },
                { "Name" : "Subjects", "KeyHeaders":"Code" },
                { "Name" : "EducationalContents", "KeyHeaders":"Code" },
                { "Name" : "EducationalMaterials", "KeyHeaders":"Code" },
                { "Name" : "SubjectLearningField", "KeyHeaders":"Code" },
                { "Name" : "Teachers", "KeyHeaders":"Code" },
                { "Name" : "TeacherAbsences", "KeyHeaders":"Id" },
                { "Name" : "Students", "KeyHeaders":"LastName;FirstName;Birthdate" },
                { "Name" : "StudentAbsences", "KeyHeaders":"Id" },
                { "Name" : "StudentSubjects", "KeyHeaders":"Id" }
                { "Name" : "SchoolClasses", "KeyHeaders":"Code" },
                { "Name" : "SchoolClassAbsences", "KeyHeaders":"Id" },
                { "Name" : "Courses", "KeyHeaders":"Id", "DeleteStrategy" : "DeleteRemaining" },
                { "Name" : "Announcements", "KeyHeaders":"Id", "DeleteStrategy" : "DeleteRemaining" },
                { "Name" : "ScheduledLessons", "KeyHeaders":"Id", "DeleteStrategy" : "DeleteRemaining" },
                { "Name" : "SubstituteLessons", "KeyHeaders":"Id", "DeleteStrategy" : "DeleteRemaining" },
                { "Name" : "LessonGaps", "KeyHeaders":"Id", "DeleteStrategy" : "DeleteRemaining" },
                { "Name" : "Vacations", "KeyHeaders":"Id", "DeleteStrategy" : "DeleteRemaining" }
            ]
        }
    }
}

Das Ergebnis für den Import aus einer CSV-Datei könnte wie folgt aussehen:

{
    "Excel" : {
        "EcfExport": {
            "TargetFolderName": "excel\\ecf-export",
            "SourceProvider" : "CSV",
            "SourceFileName": "excel\\beispiel.csv",
            "CsvMappings": [
                { "Vorname": "VNAME",  "ToHeader": "Vorname" },
                { "Nachname": "NNAME",  "ToHeader": "Nachname" },
                { "Klassenname": "KLASSE",  "ToHeader": "Klasse" }
            ],         
    },
    "Enbrea" : {
        "EcfImport": 
        {
            "IdentityServiceUrl" : "https://enbrea.beispiel.de/identity",
            "IdentityUserName" : "importbenutzer",
            "IdentityPassword" : "qwertz",
            "SchoolServiceUrl" : "https://enbrea.beispiel.de/school",
            "SchoolTermId" : "9067eff1-6817-4e59-855c-9ace4e51f139",
            "Files" : [
                { "Name" : "CourseCategories", "KeyHeaders":"Code" },
                { "Name" : "CourseFlags", "KeyHeaders":"Code" },
                { "Name" : "CourseTypes", "KeyHeaders":"Code" },
                { "Name" : "EducationalAreas", "KeyHeaders":"Code" },
                { "Name" : "EventTypes", "KeyHeaders":"Code" },
                { "Name" : "ExamTypes", "KeyHeaders":"Code" },
                { "Name" : "FormsOfTeaching", "KeyHeaders":"Code" },
                { "Name" : "LessonProfiles", "KeyHeaders":"Code" },
                { "Name" : "LevelOfQualifications", "KeyHeaders":"Code" },
                { "Name" : "ResourceCategories", "KeyHeaders":"Code" },
                { "Name" : "ResourceFlags", "KeyHeaders":"Code" },
                { "Name" : "RoomAbsenceReasons", "KeyHeaders":"Code" },
                { "Name" : "RoomTypes", "KeyHeaders":"Code" },
                { "Name" : "SchoolClassAbsenceReasons", "KeyHeaders":"Id" },
                { "Name" : "SchoolClassFlags", "KeyHeaders":"Code" },
                { "Name" : "SchoolClassLevels", "KeyHeaders":"Code" },
                { "Name" : "SchoolClassProfils", "KeyHeaders":"Code" },
                { "Name" : "SchoolForms", "KeyHeaders":"Code" },
                { "Name" : "SchoolOrganisations", "KeyHeaders":"Code" },
                { "Name" : "SchoolTypes", "KeyHeaders":"Code" },
                { "Name" : "SubjectFocuses", "KeyHeaders":"Code" },
                { "Name" : "SubjectTypes", "KeyHeaders":"Code" },
                { "Name" : "TeacherAbsenceReasons", "KeyHeaders":"Id" },
                { "Name" : "TeacherAbsenceReasonDifferentiations", "KeyHeaders":"Code" },
                { "Name" : "TeacherTypes", "KeyHeaders":"Code" },
                { "Name" : "TimeAccountEntryReasons", "KeyHeaders":"Code" },
                { "Name" : "TimeAccountEntryReportings", "KeyHeaders":"Code" },
                { "Name" : "TimeAccountEntryTypes", "KeyHeaders":"Code" },
                { "Name" : "VacationTypes", "KeyHeaders":"Code" },
                { "Name" : "VocationalField", "KeyHeaders":"Code" },
                { "Name" : "EducationalPrograms", "KeyHeaders":"Code" },
                { "Name" : "TimeFrames", "KeyHeaders":"Code" },
                { "Name" : "Departments", "KeyHeaders":"Code" },
                { "Name" : "Rooms", "KeyHeaders":"Code" },
                { "Name" : "RoomAbsences", "KeyHeaders":"Id" },
                { "Name" : "Subjects", "KeyHeaders":"Code" },
                { "Name" : "EducationalContents", "KeyHeaders":"Code" },
                { "Name" : "EducationalMaterials", "KeyHeaders":"Code" },
                { "Name" : "SubjectLearningField", "KeyHeaders":"Code" },
                { "Name" : "Teachers", "KeyHeaders":"Code" },
                { "Name" : "TeacherAbsences", "KeyHeaders":"Id" },
                { "Name" : "Students", "KeyHeaders":"LastName;FirstName;Birthdate" },
                { "Name" : "StudentAbsences", "KeyHeaders":"Id" },
                { "Name" : "StudentSubjects", "KeyHeaders":"Id" }
                { "Name" : "SchoolClasses", "KeyHeaders":"Code" },
                { "Name" : "SchoolClassAbsences", "KeyHeaders":"Id" },
                { "Name" : "Courses", "KeyHeaders":"Id", "DeleteStrategy" : "DeleteRemaining" },
                { "Name" : "Announcements", "KeyHeaders":"Id", "DeleteStrategy" : "DeleteRemaining" },
                { "Name" : "ScheduledLessons", "KeyHeaders":"Id", "DeleteStrategy" : "DeleteRemaining" },
                { "Name" : "SubstituteLessons", "KeyHeaders":"Id", "DeleteStrategy" : "DeleteRemaining" },
                { "Name" : "LessonGaps", "KeyHeaders":"Id", "DeleteStrategy" : "DeleteRemaining" },
                { "Name" : "Vacations", "KeyHeaders":"Id", "DeleteStrategy" : "DeleteRemaining" }
            ]
        }
    }
}

Importierbare Felder

Feld Format
Vorname Text
Mittelname Text
Nachname Text
Geburtstag yyyy-MM-dd oder dd.MM.yyyy
Rufname Text
Geschlecht Text
Mögliche Einträge: W, w, M, m, D, d
Anrede Text
Klasse Text
Klassenkürzel entsprechend der Angabe im Stundenplanprogramm
Fach1
..
Fach20
Text
Fachkürzel entsprechend der Eintragung im Stundenplanprogramm
Id Text
Die hinterlegte ID muss eindeutig sein und wird beim erneuten Import genutzt um Dopplungen zu vermeiden, die Daten aber zu aktualisieren.
Du kannst eine FremdID oder eine eigene ID (gebildetet aus Vorname.Nachname.Geburtstag als Beispiel) verwenden, diese ID wird in der Oberfläche jedoch nicht dargestellt.

Testen

  1. PowerShell 7 über das Windows-Menü starten: Start > Windows Powershell > Windows Powershell

  2. Mit folgendem Befehl in unser ENBREA-Verzeichnis wechseln:

    cd c:\enbrea
    
  3. Folgenden PowerShell-Befehl eintippen:

    Start-EnbreaImport excel enbrea.json
    

Die Daten werden ins ECF-Format übersetzt und anschließend nach ENBREA übertragen.

Automation

Die Synchronisation zwischen Excel und ENBREA kann natürlich automatisiert werden. Tipps zur Automation per BATCH-Datei oder Windows-Aufgabenplanung sind im Kapitel Automation zu finden.