Der Arbeitszeugnis-Ge­ne­ra­tor: Ein Open Source Pro­jekt

Als Pflichtbestandteil meiner schulischen Ausbildung zum Informationstechnischen Assistenten (ITA) mache ich seit dem 9. Mai 2016 ein Praktikum bei der BROCKHAUS AG. Meine Hauptaufgabe ist es zusammen mit einem anderen Praktikanten, einen Arbeitszeugnis-Generator zu programmieren, welcher als Open-Source-Projekt veröffentlicht werden soll.

Ist das Beschäf­ti­gungs­the­ra­pie?

Es ist verständlich, dass man als Praktikant nicht an den größten und wichtigsten Projekten arbeiten kann. Dies liegt aber nicht unbedingt daran, dass die Unternehmen eine solche Aufgabe an Praktikanten geben wollen. Es kann auch daran liegen, dass die momentanen Projekte keine Aufgaben haben, die von einem Praktikanten übernommen werden können. Oder vielleicht traut man sich als Praktikant solche Aufgaben nicht zu. Dennoch ist es der BROCKHAUS AG wichtig, dass Praktikanten einen Arbeitsalltag erleben, der so nah wie möglich an dem der normalen Mitarbeiter ist. Also wieso nicht ein Projekt wie dieses? Mir fallen spontan keine plausiblen Gründe ein, warum ich – wie in anderen Betrieben – einfach nur neben den Mitarbeitern sitzen und zuschauen soll. Mit dieser Aufgabe habe ich ein Projekt, welches ich alleine bearbeiten kann und dabei sogar noch was lerne.

Der Generator

Wie der Name schon sagt soll das Programm ein Arbeitszeugnis generieren. Dazu gibt man Daten zur Person und zur Arbeit ein. Danach kann man die Arbeit der Person bewerten und zwischen mehreren Textvarianten auswählen. Mithilfe eines Word-Dokuments wird dann ein Zeugnis mit Fließtext erstellt.

Die Vorlage, auf welcher die Zeugnisse basieren, können, genau wie die Texte, vollkommen frei angepasst werden. Damit ist jedem die Möglichkeit gegeben die Texte so anzupassen, wie es gewünscht wird.

Was kann denn daran schon so schwer sein?

Das war die erste Frage die ich mir stellte, als wir das Projekt „Arbeitszeugnis-Generator“ bekommen haben. Da wir nicht die ersten waren, die mit dieser Aufgabe betraut wurden, haben wir die Vorarbeit der letzten Praktikanten bekommen. Mit diesem Code traten die ersten Schwierigkeiten auf: Der Code war nicht kommentiert, ungeordnet und ich habe kaum etwas verstanden. Im Verlauf des ersten Tages wurde mir klar, wie begrenzt mein Wissen über das Programmieren ist. Da half nur eins: Lesen und Lernen. Nach einigen Tagen Arbeit an diesem Code haben wir uns entschlossen, das Projekt neu aufzusetzen und Ordnung hinein zu bringen.

MVP-Pattern und Windows Forms

Das MVP-Pattern war dann die erste Wahl. Dadurch erreichten wir eine gute Trennung der UI, der Logik und der Daten. Dies verträgt sich jedoch nicht so gut mit WinForms, was wir aus erster Hand von den festangestellten Kollegen erfahren durften.

Das MVP (Model View Presenter) Pattern sorgt, bei richtiger Umsetzung dafür, dass die Klassen der Datenhaltung nichts von der UI kennen und Anders rum. Die Verknüpfung passiert durch den Presenter, der die Logik enthält und durch Databindings. (Wer mehr darüber erfahren will klickt hier.)

Die Databindings machten aber nicht das was wir uns erhofft hatten. Das führte dazu, dass wir diese strikte Trennung nicht einhalten konnten. Der Presenter war nun dafür zuständig, dass die View die Daten aus den Models kennt, damit diese angezeigt werden können.

Von der Maske zum Dokument

Der erste Gedanke war, ein Word-Dokument mit Lesezeichen zu bestücken, die dann mit den Daten aus der Eingabemaske Überschrieben werden sollten. Diese „unsichtbaren“ Lesezeichen waren so gesetzt, dass sie kein Text beinhalteten, damit wir uns die Mühe sparen konnten, Text zu ersetzen. Das Open-XML-Framwork hat uns dabei gute Dienste geleistet, weil es damit einfach ist, Lesezeichen auszulesen und die Textstellen zu verändern.

Nach dem beenden der Textbearbeitungsfunktionen waren aber schon vier Wochen vorbei und mein Praktikumskollege verlies das Team. Von hier an arbeitete ich alleine an dem Projekt weiter.

Ich habe vom Ausbildungsleiter danach den Tipp bekommen, dass es besser wäre mit Marken zu arbeiten, die dann ersetzt werden. „{Anfangsdatum}“ sollte dann zu „09.05.2016“ werden. Auch da dachte ich mir wieder: Was kann denn daran so schwer sein? Ich habe mich im Internet etwas informiert und mich entschieden die Ersetzung mit Regex (Regulären Ausdrücken) vorzunehmen. Dies hatte den Vorteil, dass ich die unschöne Variante mit Open XML nicht mehr benutzen musste. Der große Nachteil war aber, dass man nie wissen kann, wie Word seine Dokumente intern abspeichert. So kann die Marke {Vorname} gerne mal als „{“, „Vorname“ und „}“ gespeichert werden, was es fast unmöglich macht, sie richtig Auszulesen.

Mogeln bringt keine Vor­tei­le

Je mehr ich versuchte dem Programm das Erkennen der Marken beizubringen, desto ehrgeiziger wurde ich. Ich wollte unter allen Umständen die Textbearbeitung mit Regex beibehalten und habe viel Zeit damit verbracht, zu schauen, wie ich das schaffe. Als ich dann gefragt wurde, warum ich an meiner Regex-Lösung festhielt, wusste ich keine Antwort. Ich realisierte zu spät, dass ich meinen Ehrgeiz falsch eingesetzt hatte.

Diese Variante hat aber im Endeffekt ein großes Problem mit sich gebracht, weswegen die letzte Lösung war, die Serienbrief-Felder auszunutzen und das Dokument wie einen Serienbrief zu behandeln.

Zum GitHub Repository.

Dominik Turnschek

Praktikant bei BROCKHAUS AG
Dominik Turnschek macht als Bestandteil seiner schulischen Ausbildung zum Informationstechnischen Assistenten (ITA) ein Praktikum bei der BROCKHAUS AG.

Letzte Artikel von Dominik Turnschek (Alle anzeigen)

<< Vorheriger Beitrag
Nächster Beitrag >>

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.