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:
-
Das ECF Tool for Excel liest direkt aus einer Excel-Datei oder CSV-Datei und generiert ECF-Dateien.
-
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¶
-
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.
-
Im Windows-Explorer ein neues Verzeichnis
c:\enbrea
anlegen (das Verzeichnis kann natürlich auch anders heißen). -
PowerShell 7 über das Windows-Menü starten:
Start > Windows Powershell > Windows Powershell
-
Mit folgendem Befehl in das soeben angelegte Verzeichnis wechseln:
cd c:\enbrea
-
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. -
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.SyncHubUrl | 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/syncHub",
"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/syncHub",
"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¶
-
PowerShell 7 über das Windows-Menü starten:
Start > Windows Powershell > Windows Powershell
-
Mit folgendem Befehl in unser ENBREA-Verzeichnis wechseln:
cd c:\enbrea
-
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.
Import aus der LUSD¶
Nutzen Sie die LUSD, benötigen Sie eine CSV-Exportdatei. Anleitung:
Rufen Sie den Abfrageassistent auf!
Wählen Sie Datenquelle > Kurse aus! Klicken Sie auf Hinzufügen und vergeben Sie einen Namen für Ihre Abfrage.
Fügen Sie Felder für Ihre Abfrage hinzu.
Über die Lupe oben rechts im Fenster können Sie alle Schüler der Abfrage hinzufügen (Auswählen > gewünschte Schulformen > Alle Übernehmen) Klicken Sie unten rechts im Fenster auf Excel um den Report aufzurufen