Compare commits
45 Commits
671ade10eb
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
5152e4f4a9
|
|||
|
94cc181278
|
|||
|
8d20bd105b
|
|||
|
117722250c
|
|||
|
fab6b215fc
|
|||
|
6652d99925
|
|||
|
758a8ad419
|
|||
|
731c03f447
|
|||
|
c40b18d8cf
|
|||
|
4528ff1318
|
|||
|
faa1e09655
|
|||
|
1f71dfb55f
|
|||
|
6208a9c29c
|
|||
|
872c78079f
|
|||
|
4ee7b22db6
|
|||
|
ce8b1ce5fa
|
|||
|
5b03fdbebc
|
|||
|
2a8951ccc1
|
|||
|
f71dc2433b
|
|||
|
fc43ee2dae
|
|||
|
5aba8eb989
|
|||
|
fc62425c6c
|
|||
|
eff6248883
|
|||
|
c0d8984cf4
|
|||
|
75d459193d
|
|||
|
92e34eec14
|
|||
|
ee9e249154
|
|||
|
929f80d66b
|
|||
|
0ad308b1db
|
|||
|
c5a544750e
|
|||
|
e92946cb2f
|
|||
|
e38d48c264
|
|||
|
caa27488f6
|
|||
|
9abe58e56a
|
|||
|
df1d876e13
|
|||
|
e6d3794cc0
|
|||
|
ebc2a2d8b7
|
|||
|
e9818c9607
|
|||
|
6473a42146
|
|||
|
6416c4484c
|
|||
|
e2db47a588
|
|||
|
00f5f28ed6
|
|||
|
8e3491491c
|
|||
|
5425914ae1
|
|||
|
538a225a90
|
@@ -33,61 +33,60 @@ Die \ac{ELN} könnte schlicht die von TYPO3 vergebene UID sein.
|
|||||||
Smartphone ist am sinnvollsten, da Feedback von Webseite damit möglich ist.
|
Smartphone ist am sinnvollsten, da Feedback von Webseite damit möglich ist.
|
||||||
Backup-Funktion, die \ac{ELN} händisch einzugeben. Das ginge dann auch mit einem Handscanner.
|
Backup-Funktion, die \ac{ELN} händisch einzugeben. Das ginge dann auch mit einem Handscanner.
|
||||||
|
|
||||||
\paragraph*{Welche Fallbacks soll es geben, sollte ein Code nicht scanbar sein? Z.B.: Den Code- Inhalt in Text unter dem Code, der auch von Hand eintippbar sei.}
|
\paragraph*{Welche Fallbacks soll es geben, sollte ein Code nicht scanbar sein? Z.B.: Den Code-Inhalt in Text unter dem Code, der auch von Hand eintippbar sei.}
|
||||||
Die \ac{ELN} muss auch unter dem qr code stehen.
|
Die \ac{ELN} muss auch unter dem QR-Code stehen.
|
||||||
|
|
||||||
\paragraph*{Gegen welche Missbrauchsszenarien sollte der QR-Code geschützt sein? Sollte ggf. ein Passwort nach dem Einscannen verlangt werden? ->Diskurs über versch. Authentifizierungsmethoden und Abwägung über Aufwand der dadurch entsteht.}
|
\paragraph*{Gegen welche Missbrauchsszenarien sollte der QR-Code geschützt sein? Sollte ggf. ein Passwort nach dem Einscannen verlangt werden? ->Diskurs über versch. Authentifizierungsmethoden und Abwägung über Aufwand der dadurch entsteht.}
|
||||||
Mitarbeiter authentifizieren sich mit einem Frontend-Nutzer. Dieser Nutzer ist Teil einer Mitarbeiter-Nutzergruppe.
|
Mitarbeiter authentifizieren sich mit einem Frontend-Nutzer. Dieser Nutzer ist Teil einer Mitarbeiter-Nutzergruppe.
|
||||||
|
|
||||||
\paragraph*{Gibt es im Lager Wlan?}
|
\paragraph*{Gibt es im Lager Wlan?}
|
||||||
Out of scope
|
Out of scope.
|
||||||
|
|
||||||
\paragraph*{Wie wollen Sie Weinanmeldungen zwischen Jahresauswahlproben im Frontend trennen? Wichtig: Aktuelle Proben nach Anmeldeschluss sollten immer noch sichtbar sein und alte Proben ggf. gar nicht mehr angezeigt werden.}
|
\paragraph*{Wie wollen Sie Weinanmeldungen zwischen Jahresauswahlproben im Frontend trennen? Wichtig: Aktuelle Proben nach Anmeldeschluss sollten immer noch sichtbar sein und alte Proben ggf. gar nicht mehr angezeigt werden.}
|
||||||
Es gibt eine Liste mit Jahresauswahlproben.
|
Es gibt eine Liste mit Jahresauswahlproben.
|
||||||
Da werden verschiedene aufgelistet.
|
Da werden verschiedene aufgelistet.
|
||||||
Backenduser können die Anmeldung (Weine an Jahresauswahlproben anmelden) an- und abschalten.
|
Backend-User können die Anmeldung (Weine an Jahresauswahlproben anmelden) an- und abschalten.
|
||||||
Vergangene Proben werden nicht angezeigt.
|
Vergangene Proben werden nicht angezeigt.
|
||||||
Die Probe gilt als vergangen, wenn die Proben probiert wurden.
|
Die Probe gilt als vergangen, wenn die Proben probiert wurden.
|
||||||
Die Anmeldemöglichkeit und \enquote{Probe ist vorbei}-Feststellung im Anmeldetool ist ein Clone vom „active until“ im „access-„panel. Mit Dateselector.
|
Die Anmeldemöglichkeit und \enquote{Probe ist vorbei}-Feststellung im Anmeldetool ist ein Clone vom „active until“ im „access-„panel. Mit Dateselector.
|
||||||
|
|
||||||
\paragraph*{Was soll der Kunde beim Versand selbst machen?}
|
\paragraph*{Was soll der Kunde beim Versand selbst machen?}
|
||||||
Wenn weinland-mosel-mitglied:
|
Wenn Weinland-Mosel-Mitglied:
|
||||||
Ggf account erstellen mit Mitgliedsnummer <schon implememtiert> <muss händisch von WM freigeschalten werden>
|
Ggf Account erstellen mit Mitgliedsnummer <schon implememtiert> <muss händisch von WM freigeschalten werden>.
|
||||||
In account einloggen
|
In Account einloggen.
|
||||||
|
|
||||||
Wenn Nichtmitglied:
|
Wenn Nichtmitglied:
|
||||||
Ggf account erstellen ohne Mitgliedsnummer <muss händisch freigeschalten werden>
|
Ggf. Account erstellen ohne Mitgliedsnummer <muss händisch freigeschalten werden>
|
||||||
|
|
||||||
Eine Jahresauswahlprobe auswählen
|
Eine Jahresauswahlprobe auswählen.
|
||||||
Einen Wein anmelden, Webform zu Weindaten ausfüllen.
|
Einen Wein anmelden, Webform zu Weindaten ausfüllen.
|
||||||
PDF downloaden, ausdrucken im Paket dem Wein beilegen.
|
PDF downloaden, ausdrucken im Paket dem Wein beilegen.
|
||||||
Das PDF muss Daten zum Wein beinhalten und den qr-code mit der \ac{ELN}. (zur Zuordnung)
|
Das PDF muss Daten zum Wein beinhalten und den QR-Code mit der \ac{ELN}. (zur Zuordnung)
|
||||||
Nummernschwund, falls Weine gelöscht werden, ist kein Problem.
|
Nummernschwund, falls Weine gelöscht werden, ist kein Problem.
|
||||||
|
|
||||||
Adressierung wird selbst gemacht.
|
Adressierung wird selbst gemacht.
|
||||||
Frankierung auch.
|
Frankierung auch.
|
||||||
|
|
||||||
\paragraph*{In welcher Form sollten Mitarbeiter die ausstehenden und eingegangenen Weine sehen? Reicht eine einfache Liste, oder sind Export- und Filtermöglichkeiten erwünscht? Wenn ja: Welche Filter (auch Sortierungen)? Welche Exportformate?}
|
\paragraph*{In welcher Form sollten Mitarbeiter die ausstehenden und eingegangenen Weine sehen? Reicht eine einfache Liste, oder sind Export- und Filtermöglichkeiten erwünscht? Wenn ja: Welche Filter (auch Sortierungen)? Welche Exportformate?}
|
||||||
- CSV soll ausgebbar sein
|
- CSV soll ausgebbar sein.
|
||||||
- Filter nicht notwendig, aber probenspezifisch
|
- Filter nicht notwendig, aber probenspezifisch.
|
||||||
|
|
||||||
\paragraph*{Wenn nun ein Wein als “eingegangen” vermerkt ist, sollte ein Mitarbeiter das rückgängig machen können? Sollte ein Mitarbeiter Weine löschen können? Wenn eines der beiden ja: Einzeln, oder als Bulk-Action? (Bulk-Actions sind teuer/aufwändig umzusetzen)}
|
\paragraph*{Wenn nun ein Wein als “eingegangen” vermerkt ist, sollte ein Mitarbeiter das rückgängig machen können? Sollte ein Mitarbeiter Weine löschen können? Wenn eines der beiden ja: Einzeln, oder als Bulk-Action? (Bulk-Actions sind teuer/aufwändig umzusetzen)}
|
||||||
- Was TYPO3 by-default kann, nichts eigenes bauen
|
- Was TYPO3 by-default kann, nichts eigenes bauen.
|
||||||
|
|
||||||
\paragraph*{Welche Informationen soll der Kunde über seine Sendunge(n) sehen?}
|
\paragraph*{Welche Informationen soll der Kunde über seine Sendunge(n) sehen?}
|
||||||
- ob sie eingegangen ist, mit emailbenachrichtigung
|
- Ob sie eingegangen ist, mit Emailbenachrichtigung.
|
||||||
|
|
||||||
\paragraph*{Soll auch ein Kunde in der Lage sein, seine eigene Weinsendung(en) aus dem System zu löschen oder zu verändern? (Eventuell vertippt man sich) Wenn ja, bis wann? Bis zur Eingangsbestätigung?}
|
\paragraph*{Soll auch ein Kunde in der Lage sein, seine eigene Weinsendung(en) aus dem System zu löschen oder zu verändern? (Eventuell vertippt man sich) Wenn ja, bis wann? Bis zur Eingangsbestätigung?}
|
||||||
Nach Einreichung (nicht Eingang bei WM) nicht mehr veränderbar und auch nicht löschbar.
|
Nach Einreichung (nicht Eingang bei WM) nicht mehr veränderbar und auch nicht löschbar.
|
||||||
|
|
||||||
\paragraph*{Die \ac{ELN} ist eine inkrementell erhöhte Ganzzahl. Ist der tatsächliche Wert dieser wichtig, oder ist es lediglich wichtig, dass sie eindeutig ist? Der einfachste/günstigste Weg wäre es, sie in der Datenbank als “auto\_increment” zu deklarieren. Dann hätte man niemals, auch über x Auswahlproben hinweggehend, die selbe \ac{ELN} zwei mal. Das verkürzt und vereinfacht die Entwicklung, den entstehenden Code und die Nutzererfahrung auf Seiten von Weinland Mosel.}
|
\paragraph*{Die \ac{ELN} ist eine inkrementell erhöhte Ganzzahl. Ist der tatsächliche Wert dieser wichtig, oder ist es lediglich wichtig, dass sie eindeutig ist? Der einfachste/günstigste Weg wäre es, sie in der Datenbank als “auto\_increment” zu deklarieren. Dann hätte man niemals, auch über x Auswahlproben hinweggehend, die selbe \ac{ELN} zwei mal. Das verkürzt und vereinfacht die Entwicklung, den entstehenden Code und die Nutzererfahrung auf Seiten von \ac{WM}.}
|
||||||
- siehe oben
|
- Siehe oben.
|
||||||
|
|
||||||
|
|
||||||
\paragraph*{Weiteres}
|
\paragraph*{Weiteres}
|
||||||
Es soll einen Single-View für Weine geben, der anhand einer \ac{ELN} aufrufbar ist. Hier werden bekannte Details gezeigt.
|
Es soll einen Single-View für Weine geben, der anhand einer \ac{ELN} aufrufbar ist. Hier werden bekannte Details gezeigt.
|
||||||
|
|
||||||
\paragraph*{Zum Formular, das Winzer ausfüllen:}
|
\paragraph*{Zum Formular, das Winzer ausfüllen:}
|
||||||
Das Formular besteht zwei Schritten:
|
Das Formular besteht zwei Schritten:
|
||||||
Schritt 1: Daten ausfüllen
|
Schritt 1: Daten ausfüllen.
|
||||||
Schritt 2: Zusammenfassung anzeigen entweder zurück, weiter bearbeiten, oder submit \enquote{wein verbindlich anmelden}
|
Schritt 2: Zusammenfassung anzeigen entweder zurück, weiter bearbeiten, oder submit \enquote{Wein verbindlich anmelden}.
|
||||||
|
|||||||
@@ -47,5 +47,4 @@ Die \ac{ELN} ist eine inkrementell erhöhte Ganzzahl.
|
|||||||
Ist der tatsächliche Wert dieser wichtig, oder ist es lediglich wichtig, dass sie
|
Ist der tatsächliche Wert dieser wichtig, oder ist es lediglich wichtig, dass sie
|
||||||
eindeutig ist? Der einfachste/günstigste Weg wäre es, sie in der Datenbank als \enquote{auto\_increment} zu deklarieren.
|
eindeutig ist? Der einfachste/günstigste Weg wäre es, sie in der Datenbank als \enquote{auto\_increment} zu deklarieren.
|
||||||
Dann hätte man niemals, auch über x Auswahlproben hinweggehend, die selbe \ac{ELN} zwei mal.
|
Dann hätte man niemals, auch über x Auswahlproben hinweggehend, die selbe \ac{ELN} zwei mal.
|
||||||
Das verkürzt und vereinfacht die Entwicklung, den entstehenden Code, und die Nutzererfahrung auf Seiten von Weinland Mosel.
|
Das verkürzt und vereinfacht die Entwicklung, den entstehenden Code, und die Nutzererfahrung auf Seiten von \ac{WM}.
|
||||||
|
|
||||||
|
|||||||
@@ -1,48 +1,47 @@
|
|||||||
\chapter{Pflichtenheft}
|
\chapter{Pflichtenheft}
|
||||||
\label{chap:anhang-pflichtenheft}
|
\label{chap:anhang-pflichtenheft}
|
||||||
|
\includepdf[pages=-]{images/pflichtenheft.pdf}
|
||||||
\begin{table}[htbp]
|
%
|
||||||
\centering
|
%\begin{table}[htbp]
|
||||||
\begin{tabular}{|l|l|}
|
% \centering
|
||||||
\hline
|
% \begin{tabular}{|l|l|}
|
||||||
\textbf{Art der Anforderung} & \textbf{Beschreibung}\\
|
% \hline
|
||||||
\hline
|
% \textbf{Art der Anforderung} & \textbf{Beschreibung}\\
|
||||||
\hline
|
% \hline
|
||||||
Constraint & Einbau in brown-field TYPO3\\\hdashline
|
% \hline
|
||||||
Constraint & Kunden-UI im Frontend\\\hdashline
|
% Randbedingung & Einbau in brown-field TYPO3\\\hdashline
|
||||||
\ac{FA} & \makecell[l]{Mitglieder bei \ac{WM} können sich einen\\Nutzeraccount erstellen}\\\hdashline
|
% Randbedingung & Kunden-UI im Frontend\\\hdashline
|
||||||
\ac{FA} & \makecell[l]{Nicht-Mitglieder bei \ac{WM} können sich\\einen Nutzeraccount erstellen}\\\hdashline
|
% \ac{FA} & \makecell[l]{Mitglieder bei \ac{WM} können sich einen\\Nutzeraccount erstellen}\\\hdashline
|
||||||
\ac{FA} & \makecell[l]{Angemeldete Nutzer sehen eine Übersicht\\aller aktiven Jahresauswahlproben}\\\hdashline
|
% \ac{FA} & \makecell[l]{Nichtmitglieder bei \ac{WM} können sich\\einen Nutzeraccount erstellen}\\\hdashline
|
||||||
\ac{FA} & \makecell[l]{Angemeldete Nutzer können mehrere Weine\\bei aktiven Jahresauswahlproben anmelden}\\\hdashline
|
% \ac{FA} & \makecell[l]{Angemeldete Nutzer sehen eine Übersicht\\aller aktiven Jahresauswahlproben}\\\hdashline
|
||||||
\ac{FA} & \makecell[l]{Eine Weinanmeldung frägt Weindaten mit\\einem Webform ab}\\\hdashline
|
% \ac{FA} & \makecell[l]{Angemeldete Nutzer können mehrere Weine\\bei aktiven Jahresauswahlproben anmelden}\\\hdashline
|
||||||
\ac{FA} & \makecell[l]{Vor Abschluss des Formulars wird eine\\Übersicht der Daten gezeigt}\\\hdashline
|
% \ac{FA} & \makecell[l]{Eine Weinanmeldung frägt Weindaten mit\\einem Webform ab}\\\hdashline
|
||||||
\ac{FA} & \makecell[l]{Das Formular lässt sich mit einem\\\enquote{Jetzt verbindlich anmelden}-Button abschicken}\\\hdashline
|
% \ac{FA} & \makecell[l]{Vor Abschluss des Formulars wird eine\\Übersicht der Daten gezeigt}\\\hdashline
|
||||||
\ac{FA} & \makecell[l]{Angemeldete Nutzer sehen angemeldete\\Weine für Jahresauswahlproben inklusive Versandstatus}\\\hdashline
|
% \ac{FA} & \makecell[l]{Das Formular lässt sich mit einem\\\enquote{Jetzt verbindlich anmelden}-Button abschicken}\\\hdashline
|
||||||
\ac{FA} & \makecell[l]{Für angemeldete Weine lassen sich\\PDF-Dateien herunterladen, die die \ac{ELN} als\\Barcode und eine Beschreibung des Weines\\enthalten}\\\hdashline
|
% \ac{FA} & \makecell[l]{Angemeldete Nutzer sehen angemeldete\\Weine für Jahresauswahlproben inklusive Versandstatus}\\\hdashline
|
||||||
\ac{NFA} & \makecell[l]{Das Formular mit Weindaten und dem\\QR-Code lässt sich auch direkt nach\\ Anmeldung eines Weines herunterladen}\\\hdashline
|
% \ac{FA} & \makecell[l]{Für angemeldete Weine lassen sich\\PDF-Dateien herunterladen, die die \ac{ELN} als\\Barcode und eine Beschreibung des Weines\\enthalten}\\\hdashline
|
||||||
\ac{FA} & \makecell[l]{Mitarbeiter von \ac{WM} können eingetragene\\Weine als TYPO3-Objekte manipulieren}\\\hdashline
|
% \ac{NFA} & \makecell[l]{Das Formular mit Weindaten und dem\\QR-Code lässt sich auch direkt nach\\ Anmeldung eines Weines herunterladen}\\\hdashline
|
||||||
\ac{FA} & \makecell[l]{Mitarbeiter von \ac{WM} können Jahresauswahlproben\\im Backend zeitgesteuert für Anmeldungen\\freigeben}\\\hdashline
|
% \ac{FA} & \makecell[l]{Mitarbeiter von \ac{WM} können eingetragene\\Weine als TYPO3-Objekte manipulieren}\\\hdashline
|
||||||
\ac{FA} & \makecell[l]{Mitarbeiter von \ac{WM} können Jahresauswahlproben\\im Backend zeitgesteuert für die Einsicht\\freigeben}\\\hdashline
|
% \ac{FA} & \makecell[l]{Mitarbeiter von \ac{WM} können Jahresauswahlproben\\im Backend zeitgesteuert für Anmeldungen\\freigeben}\\\hdashline
|
||||||
\ac{FA} & \makecell[l]{Mitarbeiter von \ac{WM} können einen\\gesicherten API-Link anhand einer \ac{ELN} aufrufen\\um einen Wein als \enquote{eingegangen} zu markieren}\\\hdashline
|
% \ac{FA} & \makecell[l]{Mitarbeiter von \ac{WM} können Jahresauswahlproben\\im Backend zeitgesteuert für die Einsicht\\freigeben}\\\hdashline
|
||||||
\ac{FA} & \makecell[l]{Wird ein Wein via dem QR-Code als \enquote{eingegangen}\\markiert, bekommt das Weingut eine Email}\\\hdashline
|
% \ac{FA} & \makecell[l]{Mitarbeiter von \ac{WM} können einen\\gesicherten API-Link anhand einer \ac{ELN} aufrufen\\um einen Wein als \enquote{eingegangen} zu markieren}\\\hdashline
|
||||||
\ac{NFA} & \makecell[l]{Der API-Link ist mittels eines API-Keys gesichert}\\
|
% \ac{FA} & \makecell[l]{Wird ein Wein via dem QR-Code als \enquote{eingegangen}\\markiert, bekommt das Weingut eine Email}\\\hdashline
|
||||||
\hline
|
% \ac{NFA} & \makecell[l]{Der API-Link ist mittels der TYPO3-Frontend-Nutzer\\Authentifizierung gesichert}\\
|
||||||
\end{tabular}
|
% \hline
|
||||||
\end{table}
|
% \end{tabular}
|
||||||
\begin{table}[htbp]
|
%\end{table}
|
||||||
\centering
|
%\begin{table}[htbp]
|
||||||
\begin{tabular}{|l|l|}
|
% \centering
|
||||||
\hline
|
% \begin{tabular}{|l|l|}
|
||||||
\textbf{Art der Anforderung} & \textbf{Beschreibung}\\
|
% \hline
|
||||||
\hline
|
% \textbf{Art der Anforderung} & \textbf{Beschreibung}\\
|
||||||
\hline
|
% \hline
|
||||||
\ac{NFA} & \makecell[l]{Der API-Key wird in POST-Daten übergeben}\\\hdashline
|
% \hline
|
||||||
\ac{NFA} & \makecell[l]{Die \ac{ELN} wird url-kodiert übergeben}\\\hdashline
|
% \ac{NFA} & \makecell[l]{Die \ac{ELN} wird beim Einscannen\\von QR-Codes Url-kodiert übergeben}\\\hdashline
|
||||||
\ac{FA} & \makecell[l]{Mitarbeiter von \ac{WM} können\\den API-Key im Backend verändern}\\\hdashline
|
% \ac{NFA} & \makecell[l]{Nach Aufruf eines API-Links wird\\gezeigt, weilcher Wein gescannt wurde}\\\hdashline
|
||||||
\ac{NFA} & \makecell[l]{Nach Aufruf eines API-Links wird\\gezeigt, weilcher Wein gescannt wurde}\\\hdashline
|
% \ac{FA} & \makecell[l]{Es gibt einen Single-View für\\Weine, der über eine \ac{ELN} in der URL erreichbar ist}\\\hdashline
|
||||||
\ac{FA} & \makecell[l]{Es gibt einen Single-View für\\Weine, der über eine \ac{ELN} in der URL erreichbar ist}\\\hdashline
|
% \ac{NFA} & \makecell[l]{Der Wein-Single-View zeigt bekannte Weindaten}\\\hdashline
|
||||||
\ac{NFA} & \makecell[l]{Der Wein-Single-View zeigt bekannte Weindaten}\\\hdashline
|
% \ac{FA} & \makecell[l]{Mitarbeiter von \ac{WM} können Weineintragungen\\je nach Jahresauswahlprobe als CSV exportieren}\\
|
||||||
\ac{FA} & \makecell[l]{Mitarbeiter von \ac{WM} können Weineintragungen\\je nach Jahresauswahlprobe als CSV exportieren}\\
|
% \hline
|
||||||
\hline
|
% \end{tabular}
|
||||||
\end{tabular}
|
%\end{table}
|
||||||
\end{table}
|
|
||||||
|
|||||||
@@ -9,4 +9,3 @@
|
|||||||
\input{chapters/konzeption-entwicklung}
|
\input{chapters/konzeption-entwicklung}
|
||||||
\input{chapters/ergebnisse}
|
\input{chapters/ergebnisse}
|
||||||
\input{chapters/fazit}
|
\input{chapters/fazit}
|
||||||
\input{chapters/ausblick}
|
|
||||||
|
|||||||
@@ -1,36 +1,37 @@
|
|||||||
\chapter{Anforderungserfassung}
|
\chapter{Anforderungserfassung}
|
||||||
\label{chap:anforderungserfassung}
|
\label{chap:anforderungserfassung}
|
||||||
Obwohl bereits ein grober Anriss des Zielsystems bekannt ist, ist es unabdinglich eine Anforderungsanalyse durchzuführen,
|
Obwohl bereits ein grober Anriss des Zielsystems bekannt ist, ist es unabdinglich eine Anforderungsanalyse durchzuführen,
|
||||||
dies um Details auszuarbeiten \cite{bib:christoph-ebert-vorwort-systematisches-re}.
|
um Details auszuarbeiten \cite{bib:christoph-ebert-systematisches-re}.
|
||||||
Hierbei ist es wichtig, kein exzessives Pflichtenheft aufzubauen, denn letztendlich zählt nur, was dem Kunden geliefert wird.
|
Hierbei ist es wichtig, kein exzessives Pflichtenheft aufzubauen, denn letztendlich zählt nur, was dem Kunden geliefert wird.
|
||||||
Nicht, wie viele gar nicht benötigte Anforderungen umgesetzt wurden.
|
Nicht, wie viele gar nicht benötigte Anforderungen umgesetzt wurden.
|
||||||
\enquote{\textit{Zu viele oder falsche Anforderungen ruinieren Budgets, Termine und die Qualität.}}
|
\quotecite{Zu viele oder falsche Anforderungen ruinieren Budgets, Termine und die Qualität.}
|
||||||
\cite{bib:christoph-ebert-vorwort-systematisches-re}.
|
\cite[S. viii]{bib:christoph-ebert-systematisches-re}.
|
||||||
Die Anforderungen eines Produktes sind in drei Kategorien einzuteilen: \acp{FA}, \acp{NFA}
|
Die Anforderungen eines Produktes sind in drei Kategorien einzuteilen: \acp{FA}, \acp{NFA}
|
||||||
und Constraints \cite{bib:heinemann-vorlesung-re}.
|
und Randbedingungen \cite{bib:heinemann-vorlesung-re}.
|
||||||
Wie oben erwähnt, sind bereits die Constraints und einige funktionale und nichtfunktionale Anforderungen bekannt. Diese sind:
|
Wie oben erwähnt, sind bereits die Randbedingungen und einige funktionale und nichtfunktionale Anforderungen bekannt. Diese sind:
|
||||||
\begin{table}[htbp]
|
\begin{table}[htbp]
|
||||||
\centering
|
\centering
|
||||||
\begin{tabular}{|l|l|}
|
\begin{tabular}{|l|l|}
|
||||||
\hline
|
\hline
|
||||||
\textbf{Art der Anforderung} & \textbf{Beschreibung}\\
|
\textbf{Art der Anforderung} & \textbf{Anforderungsbeschreibung}\\
|
||||||
\hline
|
\hline
|
||||||
\hline
|
\hline
|
||||||
Constraint & Einbau in brown-field TYPO3\\
|
\ac{NFA} & \makecell[l]{Angaben zum Weingut des Weines\\sollen aus dem Accountdatensatz anstatt\\aus dem Web-Formular kommen.}\\
|
||||||
\hdashline
|
\hdashline
|
||||||
Constraint & Mitarbeiter-UI in TYPO3-Backend\\
|
\ac{NFA} & \makecell[l]{Aus dem Papierformular soll ein\\Web-Formular werden.}\\
|
||||||
\hdashline
|
\hdashline
|
||||||
Constraint & Nutzer-UI im Frontend\\
|
\ac{FA} & \makecell[l]{Beim Erstellen einer Weinteilnahme\\soll ein QR-Code als PDF generiert werden,\\der den Wein identifiziert.}\\
|
||||||
\hdashline
|
\hdashline
|
||||||
\ac{NFA} & \makecell[l]{Aus dem Papierformular soll ein\\Webformular werden}\\
|
\ac{FA} & \makecell[l]{Durch scannen des QR-Codes auf dem\\mit einer Weinteilnahme erstellten PDFs soll\\dem Wein der Status \enquote{eingegangen}\\ zugewiesen werden.}\\
|
||||||
\hdashline
|
\hdashline
|
||||||
\ac{NFA} & \makecell[l]{Angaben zum Weingut des Weines\\sollen aus dem Accountdatensatz anstatt\\aus dem Webform kommen}\\
|
Randbedingung & Einbau in Brown-Field TYPO3\\
|
||||||
\hdashline
|
\hdashline
|
||||||
\ac{NFA} & \makecell[l]{Registrierte Weinteilnahmen\\bestehen aus einem Wein und einem Zustand\\(Ausstehend,Eingegangen,Abgelehnt).}\\
|
Randbedingung & Mitarbeiter-UI in TYPO3-Backend\\
|
||||||
\hdashline
|
\hdashline
|
||||||
\ac{FA} & \makecell[l]{Beim Erstellen einer Weinteilnahme\\soll ein QR-Code als PDF generiert werden,\\der den Wein identifiziert}\\
|
Randbedingung & Nutzer-UI im Frontend\\
|
||||||
|
\hdashline
|
||||||
|
\ac{NFA} & \makecell[l]{Registrierte Weinteilnahmen\\bestehen aus einem Wein und einem Zustand\\(ausstehend,eingegangen,abgelehnt).}\\
|
||||||
\hdashline
|
\hdashline
|
||||||
\ac{FA} & \makecell[l]{Durch scannen des QR-Codes auf dem\\mit einer Weinteilnahme erstellten PDFs soll\\dem Wein der Status \enquote{Eingegangen}\\ zugewiesen werden}\\
|
|
||||||
\hline
|
\hline
|
||||||
\end{tabular}
|
\end{tabular}
|
||||||
\caption{Initial bekannte Anforderungen}
|
\caption{Initial bekannte Anforderungen}
|
||||||
@@ -42,13 +43,13 @@ Um nähere Anforderungen zu ermitteln, werden die Befragungstechniken \enquote{I
|
|||||||
|
|
||||||
\section{Interview mit Product Owner}
|
\section{Interview mit Product Owner}
|
||||||
Zunächst wird ein Interview mit dem \ac{PO} geführt. Ziel dieses Interviews ist
|
Zunächst wird ein Interview mit dem \ac{PO} geführt. Ziel dieses Interviews ist
|
||||||
es, konkrete Fragen zu Anforderungen zu beantworten und somit konkrete Anforderungen zu formulieren.
|
es, konkrete Fragen zu Anforderungen zu klären und somit klare Anforderungen zu formulieren.
|
||||||
Aufgrund der individuellen Gesprächsführung wurde sich für ein \enquote{Teil-standardisiertes Interview}
|
Aufgrund der individuellen Gesprächsführung wurde sich für ein \enquote{teil-standardisiertes Interview}
|
||||||
entschieden. Bei einem Teil-standardisiertem Interview gibt es vordefinierte Fragen,
|
entschieden. Bei einem teil-standardisiertem Interview gibt es vordefinierte Fragen,
|
||||||
aber auch Freiraum für Improvisation und Persönlichkeit.
|
aber auch Freiraum für Improvisation und Persönlichkeit.
|
||||||
Für ein gutes Interview ist gute Vorbereitung unabdinglich. Daher wurden bereits sämtliche wichtigen Fragen
|
Für ein gutes Interview ist Vorbereitung wichtig. Daher wurden bereits sämtliche wichtigen Fragen
|
||||||
in einem Fragebogen festgehalten. Dieser Interview-Fragebogen liegt in \fullref{chap:anhang-interview-fragebogen} anbei.
|
in einem Fragebogen festgehalten. Dieser Interview-Fragebogen liegt in \fullref{chap:anhang-interview-fragebogen} anbei.
|
||||||
Ebenso ist Vorbereitung auf Seiten des Interviewteilnehmers wichtig, weshalb das Interview einen Tag zuvor angesprochen wurde.
|
Ebenso ist Vorbereitung auf Seiten des Interview-Teilnehmers wichtig, weshalb das Interview einen Tag zuvor angesprochen wurde.
|
||||||
Um möglichst objektive und unvorbeeinflusste Antworten zu gewährleisten wird darauf geachtet,
|
Um möglichst objektive und unvorbeeinflusste Antworten zu gewährleisten wird darauf geachtet,
|
||||||
keine Suggestivfragen zu stellen
|
keine Suggestivfragen zu stellen
|
||||||
\cite{bib:kleine-re-fibel}.
|
\cite{bib:kleine-re-fibel}.
|
||||||
@@ -56,25 +57,27 @@ keine Suggestivfragen zu stellen
|
|||||||
\section{Online-Fragebögen für Stakeholder}
|
\section{Online-Fragebögen für Stakeholder}
|
||||||
Um Fragebögen für Stakeholder formulieren zu können, muss zunächst bekannt sein, wer die Stakeholder sind.
|
Um Fragebögen für Stakeholder formulieren zu können, muss zunächst bekannt sein, wer die Stakeholder sind.
|
||||||
\quotecite{Ein Stakeholder eines Systems ist eine Person oder Organisation, welche (direkt oder indirekt)
|
\quotecite{Ein Stakeholder eines Systems ist eine Person oder Organisation, welche (direkt oder indirekt)
|
||||||
Einfluss auf die Anforderungen des betrachteten Systems hat.} \cite{bib:basiswissen-re}.
|
\break{}Einfluss auf die Anforderungen des betrachteten Systems hat.}
|
||||||
|
\break\cite[S. 9]{bib:kleine-re-fibel}.
|
||||||
Daraus ergeben sich die Stakeholdergruppen: \enquote{Mitarbeiter \ac{WM}} und \enquote{teilnehmende Weingüter}.
|
Daraus ergeben sich die Stakeholdergruppen: \enquote{Mitarbeiter \ac{WM}} und \enquote{teilnehmende Weingüter}.
|
||||||
Jede dieser Stakeholdergruppen sieht das System aus einer anderen Perspektive \cite{bib:kleine-re-fibel}.
|
Jede dieser Stakeholdergruppen sieht das System aus einer anderen Perspektive
|
||||||
|
\break\cite{bib:kleine-re-fibel}.
|
||||||
Daher ist es wichtig, Einblicke und Bedürfnisse aller Stakeholdergruppen einzuholen
|
Daher ist es wichtig, Einblicke und Bedürfnisse aller Stakeholdergruppen einzuholen
|
||||||
und die individuellen Perspektiven und Bedürfnisse dieser beim Entwurf der Fragebögen zu berücksichtigen.
|
und die individuellen Perspektiven und Bedürfnisse dieser beim Entwurf der Fragebögen zu berücksichtigen.
|
||||||
Ebenso ist es wichtig, die wichtigsten Fragen am Anfang zu stellen, da Formulare nicht immer vollständig ausgefüllt werden
|
Ebenso ist es wichtig, die relevantesten Fragen am Anfang zu stellen, da Formulare nicht immer vollständig ausgefüllt werden
|
||||||
\cite{bib:kleine-re-fibel}. Somit sind auch bei einem nur teilweise ausgefüllten Fragebogen die wichtigsten
|
\cite{bib:kleine-re-fibel}. Somit sind auch bei einem nur teilweise ausgefüllten Fragebogen die wichtigsten
|
||||||
Fragen beantwortet.
|
Fragen beantwortet.
|
||||||
Sämtliche Fragen an die Stakeholdergruppe \enquote{Mitarbeiter \ac{WM}} wurden bereits im Interview mit dem \ac{PO}
|
Sämtliche Fragen an die Stakeholdergruppe \enquote{Mitarbeiter \ac{WM}} wurden bereits im Interview mit dem \ac{PO}
|
||||||
beantwortet und als Anforderungen festgehalten. Der \ac{PO} repräsentiert in diesem Falle
|
beantwortet und als Anforderungen festgehalten. Der \ac{PO} repräsentiert in diesem Falle
|
||||||
die Stakeholdergruppe \enquote{Mitarbeiter \ac{WM}} und steht seit geraumer Zeit mit \ac{WM} im
|
die Stakeholdergruppe \enquote{Mitarbeiter \ac{WM}} und steht seit geraumer Zeit mit \ac{WM} in
|
||||||
persönlichen, engen Austausch. Daher gibt es keine offenen Fragen, die diese Stakeholdergruppe
|
persönlichem, engen Austausch. Daher gibt es keine offenen Fragen, die diese Stakeholdergruppe
|
||||||
beantworten könnte. Somit fällt ein Onlinefragebogen für die Stakeholdergruppe \enquote{Mitarbeiter \ac{WM}} weg.
|
beantworten könnte. Somit fällt ein Onlinefragebogen für die Stakeholdergruppe \enquote{Mitarbeiter \ac{WM}} weg.
|
||||||
Der Fragebogen der Stakeholdergruppe \enquote{teilnehmende Weingüter} liegt im Anhang unter
|
Der Fragebogen der Stakeholdergruppe \enquote{teilnehmende Weingüter} liegt im Anhang unter
|
||||||
\fullref{chap:anhang-fragebogen-extern} bei.
|
\fullref{chap:anhang-fragebogen-extern} bei.
|
||||||
Um den Aufwand und somit die Hemmschwelle des Ausfüllens
|
Um den Aufwand und somit die Hemmschwelle des Ausfüllens
|
||||||
eines solchen Online-Fragebogens zu minimieren, gibt es lediglich sechs quantitative Fragen
|
eines solchen Online-Fragebogens zu minimieren, werden lediglich sechs quantitative Fragen
|
||||||
zuzüglich einem optionalen Freitextfeld, um sonstige Wünsche zum Ausdruck zu bringen.
|
zuzüglich einem optionalen Freitextfeld, um sonstige Wünsche zum Ausdruck zu bringen, gestellt.
|
||||||
Eine Anmeldung über Google ist nicht erforderlich.
|
Eine Anmeldung über Google für Google-Forms ist nicht erforderlich.
|
||||||
Der Link zu diesem Online-Fragebogen wurde \ac{WM} mit der Bitte um Weitergabe an
|
Der Link zu diesem Online-Fragebogen wurde \ac{WM} mit der Bitte um Weitergabe an
|
||||||
die Probenteilnehmer übergeben.
|
die Probenteilnehmer übergeben.
|
||||||
|
|
||||||
@@ -82,43 +85,40 @@ die Probenteilnehmer übergeben.
|
|||||||
Aus dem Interview mit dem \ac{PO} ergibt sich ein Pflichtenheft.
|
Aus dem Interview mit dem \ac{PO} ergibt sich ein Pflichtenheft.
|
||||||
Das Pflichtenheft und das Protokoll zum Interview sind im Anhang unter je
|
Das Pflichtenheft und das Protokoll zum Interview sind im Anhang unter je
|
||||||
\fullref{chap:anhang-pflichtenheft} und \fullref{chap:anhang-interview-protokoll} zu finden.
|
\fullref{chap:anhang-pflichtenheft} und \fullref{chap:anhang-interview-protokoll} zu finden.
|
||||||
|
Ergebnisse dieses Interviews sind zahlreiche Anforderungen und Ideen. Eine der wichtigen Erkenntnisse stellt das
|
||||||
Ergebnis dieses Interviews sind zahlreiche Anforderungen und Ideen. Eine der wichtigsten Ideen stellt das
|
|
||||||
projektbezogene, wöchentliche Statusmeeting dar: Jeden Donnerstag soll um 9:30 Uhr der aktuelle Stand
|
projektbezogene, wöchentliche Statusmeeting dar: Jeden Donnerstag soll um 9:30 Uhr der aktuelle Stand
|
||||||
des Projektes vorgestellt, diskutiert und Rücksprache gehalten werden.
|
des Projektes dem \ac{PO} vorgestellt und mit ihm diskutiert und Rücksprache gehalten werden. Ziel dessen ist unter anderem
|
||||||
|
die pragmatische Korrektheit laufend zu überprüfen und ggf. Anforderungen zu überarbeiten.
|
||||||
Die wichtigsten Erkenntnisse des Interviews sind:
|
Diese Idee wurde unmittelbar nach Beendigung des Interviews vorgeschlagen und entzieht sich somit dem Transkript.
|
||||||
|
\clearpage
|
||||||
|
Weitere wichtige Erkenntnisse dieses Interviews sind:
|
||||||
\begin{description}
|
\begin{description}
|
||||||
\item[Endgerät für Scanning und Scanneranwendung]\hfill\\
|
\item[Endgerät für Scanning und Scanneranwendung]\hfill\\
|
||||||
Gescannt wird von Mobiltelefonen mit einer QR-Code-App wie QRBot.
|
Gescannt wird von Mobiltelefonen mit einer QR-Code-App wie QRBot.
|
||||||
QRBot ermöglicht es Nutzern für jeden aufgerufenen QR-Code eine Vorlagen-URL aufzurufen,
|
QRBot ermöglicht es Nutzern für jeden aufgerufenen QR-Code eine Vorlagen-URL aufzurufen,
|
||||||
um den gescannten Wert als Teil der Url, z.B. als Get-Parameter, zu übergeben \cite{bib:qrbot}.
|
um den gescannten Wert als Teil der URL zu übergeben \cite{bib:qrbot}.
|
||||||
Das ist prädestiniert für API-ähnliche Webseitenaufrufe, um Weine einzuchecken.
|
Das ist prädestiniert für API-ähnliche Webseitenaufrufe, um Weine einzuchecken.
|
||||||
\item[Trennung von Weinen nach Jahresauswahlproben im Frontend]\hfill\\
|
\item[Trennung von Weinen nach Jahresauswahlproben im Frontend]\hfill\\
|
||||||
Da es $n$ Jahresauswahlproben gibt und Weine immer genau einer Jahresauswahlprobe zugeordnet sein müssen, macht es wenig
|
Da es $n$ Jahresauswahlproben gibt und Weine immer genau einer Jahresauswahlprobe zugeordnet sein müssen, macht es wenig
|
||||||
Sinn alle Weine eines Nutzers auf einmal anzuzeigen. So ist es eine Anforderung, dass die
|
Sinn alle Weine eines Nutzers auf einmal anzuzeigen. So ist es eine Anforderung, dass die
|
||||||
Weinansicht in zwei Ebenen unterteilt ist: Die erste Ebene soll eine Auflistung aller Jahresauswahlprobe sein
|
Weinansicht in zwei Ebenen unterteilt ist: Die erste Ebene soll eine Auflistung aller Jahresauswahlproben sein
|
||||||
und in der Einzelansicht der Jahresauswahlproben sollen alle Weine aufgelistet sein, die dieser Jahresauswahlprobe angehören.
|
und in der Einzelansicht der Jahresauswahlproben sollen alle Weine aufgelistet sein, die dieser Jahresauswahlprobe angehören.
|
||||||
Diese Weine sind ebenso anklickbar und führen zu einer Einzelansicht der Weine.
|
Diese Weine sind ebenso anklickbar und führen zu einer Einzelansicht der Weine.
|
||||||
\item[Genaue Nutzerführung für Teilnehmer]\hfill\\
|
|
||||||
Die exakten Schritte, die ein Teilnehmer tätigen muss, um verschiedene Prozesse zu durchlaufen.
|
|
||||||
Diese Prozesse sind in \fullref{chap:umsetzung} detailliert beschrieben.
|
|
||||||
\item[Nutzerführung für \ac{WM}-Angestellte]\hfill\\
|
\item[Nutzerführung für \ac{WM}-Angestellte]\hfill\\
|
||||||
Gescanne QR-Codes von Weinen sollen den Wein als eingegangen markieren und anschließend dem
|
Gescanne QR-Codes von Weinen sollen den Wein als eingegangen markieren und anschließend dem
|
||||||
Mitarbeiter zeigen, welcher Wein eingechecked wurde. Somit dient das Scannen eines Codes ebenso zur
|
Mitarbeiter zeigen, welcher Wein eingecheckt wurde. Somit dient das Scannen eines Codes ebenso zur
|
||||||
Einsicht der Details der gelagerten Flaschen.
|
Einsicht der Details der gelagerten Flaschen.
|
||||||
Es soll ein Backendmodul geben, das für den Export von CSV-Daten zuständig ist.
|
Es soll ein Backendmodul \cite{bib:typo3-docs-modules} geben, das für den Export von CSV-Daten zuständig ist.
|
||||||
Sonstige Aktionen sind im TYPO3-Backend mit nativen Werkzeugen erreichbar.
|
Sonstige Aktionen sind im TYPO3-Backend mit nativen Werkzeugen erreichbar.
|
||||||
\item[Verschiedene Web-Ansichten]\hfill
|
\item[Verschiedene Web-Ansichten]\hfill
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item Jahreauswahlproben-ListView
|
\item Jahresauswahlproben-Listenansicht
|
||||||
\item Jahreauswahlproben-SingleView
|
\item Jahresauswahlproben-Detailansicht
|
||||||
\item Wein-Registrierungsformular
|
\item Wein-Registrierungsformular
|
||||||
\item PDF-Url für Versandbriefe
|
\item PDF-URL für Versandbriefe
|
||||||
\item Registrierungsseite mit mehreren Schritten
|
\item Registrierungsseite mit mehreren Schritten
|
||||||
\item Mitarbeiter-Seite für gescannte QR-Codes
|
\item Mitarbeiterseite für gescannte QR-Codes
|
||||||
\item Listenansicht der Jahresauswahlproben im CSV-Exporter im Backend
|
\item Listen- und Detailansicht der Jahresauswahlproben im CSV-Exporter im Backend
|
||||||
\item Detailansicht der Jahresauswahlprobe im CSV-Exporter im Backend
|
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
\end{description}
|
\end{description}
|
||||||
@@ -127,22 +127,21 @@ Der Online-Fragebogen für teilnehmende Weingüter wurde über einen Monat hinwe
|
|||||||
gibt es keine Bedürfnisse dieser Herkunft zu präsentieren.
|
gibt es keine Bedürfnisse dieser Herkunft zu präsentieren.
|
||||||
\\
|
\\
|
||||||
\\
|
\\
|
||||||
Aus der Anforderugserfassung ergibt sich als Pendant zu \fullref{fig:geschaeftsprozess-vorher}
|
Aus der Anforderugserfassung ergibt sich als Pendant zu \enpointy{\textit{\ref{fig:geschaeftsprozess-vorher} Geschäftsprozess Jahresauswahlprobe: vor der Digitalisierung}} % Der Name hat linebreaks drin, also geht fullref nicht gut...
|
||||||
der gewünschte Geschäftsprozess der Jahresauswahlprobe nach Fertigstellung dieses Projektes.
|
der gewünschte Geschäftsprozess der Jahresauswahlprobe nach Fertigstellung dieses Projektes.
|
||||||
Hierbei ist es wichtig, die Schnittstelle zwischen den gleichbleibenden Arbeitsschritten und den zu digitalisierenden
|
Hierbei ist es wichtig, die Schnittstelle zwischen den gleichbleibenden Arbeitsschritten und den zu digitalisierenden
|
||||||
Arbeitsschritten zu beachten. Diese Schnittstelle sollte unverändert bleiben,
|
Arbeitsschritten zu beachten. Diese Schnittstelle sollte unverändert bleiben,
|
||||||
um eine nahtlose Integration in den restlichen, bestehenden Workflow von \ac{WM} zu gewährleisten.
|
um eine nahtlose Integration in den restlichen, bestehenden Workflow von \ac{WM} zu gewährleisten.
|
||||||
Diese Schnittstelle stellt eine Excel-Tabelle dar. Zuvor wurde diese Excel-Tabelle von Hand aus den
|
Diese Schnittstelle stellt eine Excel-Tabelle dar. Zuvor wurde diese Excel-Tabelle von Hand, aus den
|
||||||
Anmeldeformularen erstellt. Nach Fertigstellung dieses Projektes soll diese Tabelle in Form
|
Anmeldeformularen, erstellt. Nach Fertigstellung dieses Projektes soll diese Tabelle in Form
|
||||||
von CSV-Daten aus dem Redaktionssystem exportiert werden können. Diese können Mitarbeiter von \ac{WM} in Excel
|
von CSV-Daten aus dem Redaktionssystem exportiert werden können. Diese können Mitarbeiter von \ac{WM} in Excel
|
||||||
importieren und in kommenden Planungsschritten der Jahresauswahlprobe ohne Umstellung weiter verwenden.
|
importieren und in kommenden Planungsschritten der Jahresauswahlprobe ohne Umstellung weiter verwenden.
|
||||||
Das ist wichtig, da solche Umstellungen, ohne nennenswerte Verbesserungen des restlichen, von dieser
|
Das ist wichtig, da solche Umstellungen, ohne nennenswerte Verbesserungen des restlichen, von dieser
|
||||||
Ausarbeitung unberührten Workflows, Zeit kostet, ohne Vorteile zu erbringen.
|
Ausarbeitung unberührten Workflows, Zeit kosten, ohne Vorteile zu erbringen.
|
||||||
Dieser Zeitverlust würde den durch die Digitalisierung erzielten Gewinn schädigen.
|
Dieser Zeitverlust würde den durch die Digitalisierung erzielten Vorteil schmälern.
|
||||||
|
|
||||||
\begin{nicepic}
|
\begin{nicepic}
|
||||||
\includegraphics[width=1\textwidth]{images/geschäftsprozess-nachher.png}
|
\includegraphics[width=1\textwidth]{images/geschäftsprozess-nachher.png}
|
||||||
\captionof{figure}{Geschäftsprozess Jahresauswahlprobe: vor der Digitalisierung}
|
\captionof{figure}{Geschäftsprozess Jahresauswahlprobe: nach der Digitalisierung, Quelle: Eigene Darstellung}
|
||||||
\caption*{Quelle: Eigene Darstellung}
|
|
||||||
\label{fig:geschaeftsprozess-nachher}
|
\label{fig:geschaeftsprozess-nachher}
|
||||||
\end{nicepic}
|
\end{nicepic}
|
||||||
|
|||||||
@@ -1,20 +0,0 @@
|
|||||||
\chapter{Ausblick}
|
|
||||||
\label{chap:ausblick}
|
|
||||||
In Ausblick nach der Umsetzung der Anmeldung und Zustellung von Weinen für Weinproben des Regionalverbunds für Weine
|
|
||||||
der Weinregion Mosel als TYPO3-Extension gilt es diese TYPO3-Extension um Funktionalität zu erweitern, sodass der gesamte
|
|
||||||
Geschäftsprozess der Jahresauswahlprobe abgedeckt ist.
|
|
||||||
|
|
||||||
\begin{nicepic}
|
|
||||||
\includegraphics[width=1\textwidth]{images/geschäftsprozess-ausblick.png}
|
|
||||||
\captionof{figure}{Geschäftsprozess Jahresauswahlprobe: Ausblick}
|
|
||||||
\caption*{Quelle: Eigene Darstellung}
|
|
||||||
\label{fig:geschaeftsprozess-ausblick}
|
|
||||||
\end{nicepic}
|
|
||||||
|
|
||||||
Der vom Kunden langfristig erwünschte Zustand ist, dass der gesamte Geschäftsprozess der Jahresauswahlprobe teilautomatisiert wird.
|
|
||||||
Das betrifft auch, aber nicht nur, das Aufteilen von Jahresauswahlproben in Tische und Flights, das sichere Sammeln und Auswerten
|
|
||||||
der Bewertungen und das Publizieren der daraus resultierenden Ergebnisse.
|
|
||||||
Auch ist es angedacht die Weinanmeldung zu Jahresauswahlproben um komplexe Funktionalität zu erweitern, die sicherstellen soll, dass
|
|
||||||
nicht gegen kategorische Restriktionen verstoßen werden kann. Somit soll vermieden werden, dass Weinanmeldungen
|
|
||||||
aufgrund von fehlerhaften Anmeldungen abgelehnt werden. Ein triviales Beispiel hierfür wäre ein Wein mit zu hohem Restzuckeranteil
|
|
||||||
in einer Wettbewerbskategorie für trockene Weine.
|
|
||||||
@@ -2,51 +2,48 @@
|
|||||||
\label{chap:einleitung}
|
\label{chap:einleitung}
|
||||||
Der Regionalverband für Weine \ac{WM} lässt Weine in organisierten Weinproben, sog. Jahresauswahlproben, von Juroren bewerten.
|
Der Regionalverband für Weine \ac{WM} lässt Weine in organisierten Weinproben, sog. Jahresauswahlproben, von Juroren bewerten.
|
||||||
Teilnehmende Weingüter registrieren ihre Weine in verschiedenen Kategorien und schicken diese auf dem Postweg ein.
|
Teilnehmende Weingüter registrieren ihre Weine in verschiedenen Kategorien und schicken diese auf dem Postweg ein.
|
||||||
Dieser Prozess bildet sich in Form ausgedruckter Formulare, die von Hand ausgefüllt und von Hand in eine
|
Dieser Prozess bildet sich in Form ausgedruckter Formulare ab, die von Hand ausgefüllt und von Hand in eine
|
||||||
Excel-Tabelle übertragen werden, ab.
|
Excel-Tabelle übertragen werden.
|
||||||
|
|
||||||
\section{Problemstellung}
|
\section{Problemstellung}
|
||||||
\label{chap:einleitung-problemstellung}
|
\label{chap:einleitung-problemstellung}
|
||||||
Die Teilnehmenden Weingüter schicken ihre Weine zusammen mit Formularen über den Postweg zu \ac{WM}.
|
Die teilnehmenden Weingüter schicken ihre Weine zusammen mit Formularen über den Postweg zu \ac{WM}.
|
||||||
Es ist der Normalfall, dass ein teilnehmendes Weingut \emph{mehrere} Weine zur Bewertung anbringt.
|
Es ist der Normalfall, dass ein teilnehmendes Weingut \emph{mehrere} Weine zur Bewertung anbringt.
|
||||||
In diesem Fall ist für jeden anzumeldenden Wein ein solches Formular erneut auszufüllen.
|
In diesem Fall ist für jeden anzumeldenden Wein ein solches Formular erneut auszufüllen.
|
||||||
Hierbei werden sämtliche auf das Weingut bezogene Daten redundant ausgefüllt. Diese Daten sind redudant, da sie keine
|
Hierbei werden sämtliche auf das Weingut bezogene Daten redundant ausgefüllt.
|
||||||
Eigenschaften der Weine, sondern die des Weingutes selbst sind.
|
Das ist so, weil diese Daten zwischen den Weinen gleich bleiben.
|
||||||
Da sich das Weingut zwischen den Weinen nicht ändert,
|
|
||||||
ändern sich die darauf bezogenen Daten auch nicht. Sie müssen aber für jeden Wein erneut ausgefüllt werden.
|
|
||||||
Abgesehen davon, dass solche Redundanzen auf Weinguts- und Verbandsseite die hedonische Qualität schädigen,
|
Abgesehen davon, dass solche Redundanzen auf Weinguts- und Verbandsseite die hedonische Qualität schädigen,
|
||||||
bietet so ein Workflow Freiraum für Fehler und Inkonsistenzen.
|
bietet ein solcher Workflow Freiraum für Fehler und Inkonsistenzen.
|
||||||
Dieser Workflow, mit den zuvor genannten Nachteilen, wird auf Verbandsseiten, nach Zustellung der Weine, weiter fortgeführt:
|
Dieser Workflow, mit den zuvor genannten Nachteilen, wird auf Verbandsseite, nach Zustellung der Weine, weiter fortgeführt:
|
||||||
\ac{WM} erfährt erstmalig mit der Zustellung eines Weines von dessen Teilnahme. Das erschwert die Planung der Logistik,
|
\ac{WM} erfährt erstmalig mit der Zustellung eines Weines von dessen Teilnahme. Das erschwert die Planung der Logistik,
|
||||||
da im Voraus keine konkrete Zahl der zu erwartenden Flaschen bekannt ist. Geht eine Flasche auf dem Postweg verloren,
|
da im Voraus keine konkrete Anzahl der zu erwartenden Flaschen bekannt ist. Geht eine Flasche auf dem Postweg verloren,
|
||||||
könnte das unbemerkt bleiben, da der Prozess für das Weingut mit dem Versand endet und der Prozess für \ac{WM}
|
könnte das unbemerkt bleiben, da der Prozess für das Weingut mit dem Versand endet und der Prozess für \ac{WM}
|
||||||
erst mit dem Erhalt des der Flasche beiliegendem Formulares beginnt.
|
erst mit dem Erhalt des der Flasche beiliegendem Formulares beginnt.
|
||||||
Der Postweg stellt somit eine Lücke zwischen diesen Prozessen dar.
|
Der Postweg stellt somit eine Diskontinuität zwischen diesen Prozessen dar.
|
||||||
Kommt ein teilnehmender Wein bei \ac{WM} an, wird das beiliegende Formular von Hand in eine Excel-Tabelle übertragen.
|
Kommt ein teilnehmender Wein bei \ac{WM} an, wird das beiliegende Formular von Hand in eine Excel-Tabelle übertragen.
|
||||||
Diese Schnittstelle ist besonders resourcenaufwändig und fehleranfällig, da es oft vorkommt, dass die teils
|
Diese Schnittstelle ist besonders resourcenaufwändig und fehleranfällig, da es oft vorkommt, dass die teils
|
||||||
dysgraphisch verfassten Formulare nur schwer, mehrdeutig, oder gar nicht dechiffriert werden können.
|
dysgraphisch verfassten Formulare nur schwer, mehrdeutig, oder gar nicht dechiffriert werden können.
|
||||||
In diesem Prozess wird der Teilnahme des Weines eine inkrementell aufsteigende \ac{ELN} zugewiesen,
|
In diesem Prozess wird der Teilnahme des Weines eine inkrementell aufsteigende \ac{ELN} zugewiesen,
|
||||||
die anschließend in Form eines Aufklebers an der Flasche befestigt wird. Anschließend wird die Flasche im Lager verstaut.
|
die anschließend in Form eines Aufklebers auf der Flasche angebracht wird. Darauffolgend wird die Flasche im Lager verstaut.
|
||||||
|
|
||||||
\begin{nicepic}
|
\begin{nicepic}
|
||||||
\includegraphics[width=1\textwidth]{images/geschäftsprozess-vorher.png}
|
\includegraphics[width=1\textwidth]{images/geschäftsprozess-vorher.png}
|
||||||
\captionof{figure}{Geschäftsprozess Jahresauswahlprobe: vor der Digitalisierung}
|
\captionof{figure}{Geschäftsprozess Jahresauswahlprobe:\\vor der Digitalisierung, Quelle: Eigene Darstellung}
|
||||||
\caption*{Quelle: Eigene Darstellung}
|
|
||||||
\label{fig:geschaeftsprozess-vorher}
|
\label{fig:geschaeftsprozess-vorher}
|
||||||
\end{nicepic}
|
\end{nicepic}
|
||||||
|
|
||||||
\section{Zielsetzung}
|
\section{Zielsetzung}
|
||||||
\label{chap:einleitung-zielsetzung}
|
\label{chap:einleitung-zielsetzung}
|
||||||
Ziel dieser Arbeit ist es, in Erfahrung zu bringen, wie der zuvor genannte Prozess bestmöglichst,
|
Ziel dieser Arbeit ist es, in Erfahrung zu bringen, wie der zuvor genannte Prozess bestmöglichst,
|
||||||
im Rahmen bestimmter Constraints und funktionalen- sowie nichtfunktionalen Anforderungen, digitalisiert werden kann.
|
im Rahmen bestimmter Randbedingungen und funktionalen- sowie nichtfunktionalen Anforderungen, digitalisiert werden kann.
|
||||||
Während die Constraints bereits bekannt sind, werden detaillierte Anforderungen
|
Während die Randbedingungen bereits bekannt sind, werden detaillierte Anforderungen
|
||||||
im Rahmen der Anforderungstechnik ausgearbeitet \cite{bib:heinemann-vorlesung-re}.
|
im Rahmen der Anforderungstechnik ausgearbeitet \cite{bib:heinemann-vorlesung-re}.
|
||||||
Die Constraints besagen, dass der Anmeldeprozess in die existierende Internetpräsenz des Weinverbandes integriert werden muss.
|
Die Randbedingungen besagen, dass der Anmeldeprozess in die existierende Internetpräsenz des Weinverbandes integriert werden muss.
|
||||||
Bei dieser Internetpräsenz handelt es sich um ein TYPO3-Redaktionssystem.
|
Bei dieser Internetpräsenz handelt es sich um ein TYPO3-Redaktionssystem.
|
||||||
Sämtliche Interaktionen zwischen Akteuren, die nicht \ac{WM} oder dem System zugehörig sind,
|
Sämtliche Interaktionen zwischen Akteuren, die nicht \ac{WM} oder dem Softwaresystem zugehörig sind,
|
||||||
müssen im Frontend der Webseite stattfinden. Oberflächen für Mitarbeiter von \ac{WM} dürfen
|
müssen im Frontend der Webseite stattfinden, da das Backend den Redakteuren und Administratoren vorbehalten ist.
|
||||||
in der TYPO3-Backend-Oberfläche implementiert werden.
|
Oberflächen für Mitarbeiter von \ac{WM} dürfen in der TYPO3-Backend-Oberfläche implementiert werden.
|
||||||
\\
|
\\
|
||||||
\\
|
\\
|
||||||
Somit lautet die \textbf{Forschungsfrage}:\\
|
Somit lautet die \textbf{Forschungsfrage}:\\
|
||||||
\textit{Wie kann die Anmeldung und Zustellung von Weinen für Weinproben des Regionalverbunds für Weine in der Weinregion Mosel effizient und profitabel durch eine TYPO3-Erweiterung realisiert werden?}
|
\enquote{\textit{Wie kann die Anmeldung und Zustellung von Weinen für Weinproben des Regionalverbunds für Weine in der Weinregion Mosel effizient und profitabel durch eine TYPO3-Erweiterung realisiert werden?}}
|
||||||
|
|||||||
@@ -3,15 +3,17 @@
|
|||||||
|
|
||||||
\section{Praktische Ergebnisse}
|
\section{Praktische Ergebnisse}
|
||||||
Die TYPO3-Erweiterung ist umgesetzt und erfüllt die vereinbarten Anforderungen.
|
Die TYPO3-Erweiterung ist umgesetzt und erfüllt die vereinbarten Anforderungen.
|
||||||
Mitglieder und nicht-Mitgleder können Teilnehmernutzer anlegen und Weine zu Jahresauswahlproben anmelden.
|
Mitglieder und Nichtmitgleder können Teilnehmernutzer anlegen und Weine zu Jahresauswahlproben anmelden.
|
||||||
Teilnehmer bekommen ein PDF-Dokument mit einem QR-Code zur späteren Zuordnung bereitgestellt.
|
Teilnehmer bekommen ein PDF-Dokument mit Weindaten und einem QR-Code zur späteren Zuordnung bereitgestellt.
|
||||||
\ac{WM}-Mitarbeiter können diesen QR-Code einscannen, um Weine als \enquote{angekommen} zu markieren.
|
\ac{WM}-Mitarbeiter können diesen QR-Code einscannen, um Weine als \enquote{angekommen} zu markieren.
|
||||||
Redakteure von \ac{WM} können Zugriffsrechte und Verhalten der Jahresauswahlproben auf verschiede Weisen einschränken.
|
Redakteure von \ac{WM} können Zugriffsrechte und Verhalten der Jahresauswahlproben auf verschiede Weisen einschränken.
|
||||||
Sie können den Sichtbarkeitszeitraum, den Anmeldezeitraum und den Probezeitraum, der definiert ab
|
Sie können den Sichtbarkeitszeitraum, den Anmeldezeitraum und den Probezeitraum festlegen, der definiert ab
|
||||||
wann teilnehmende Weine öffentlich sind, festlegen.
|
wann teilnehmende Weine öffentlich sind.
|
||||||
Sie können Jahresauswahlproben und damit deren Anmeldeformulare, auf festgelegte Wettebwerbskategorien beschränken.
|
Sie können Jahresauswahlproben und damit deren Anmeldeformulare auf festgelegte Probenkategorien beschränken.
|
||||||
Mitarbeiter können Weindatensätze, getrennt nach Jahresauswahlproben, als CSV-Dokument exportieren und somit
|
Mitarbeiter können Weindatensätze, getrennt nach Jahresauswahlproben, als CSV-Dokumente exportieren und somit
|
||||||
den verbleibenden Geschäftsprozess wie gehabt fortsetzen.
|
den verbleibenden Geschäftsprozess wie gehabt fortsetzen.
|
||||||
|
Praktische Präsentationen gegenüber dem \ac{PO} bestätigen die Umsetzung der Anforderungen und stellen die Basis
|
||||||
|
für weitere Iterationen der Entwicklung dar.
|
||||||
|
|
||||||
\section{Forschungsergebnisse}
|
\section{Forschungsergebnisse}
|
||||||
% Recap Forschungsfrage:
|
% Recap Forschungsfrage:
|
||||||
@@ -22,72 +24,116 @@ den verbleibenden Geschäftsprozess wie gehabt fortsetzen.
|
|||||||
Im Zuge dieser Ausarbeitung wurden Teilfragen beantwortet.
|
Im Zuge dieser Ausarbeitung wurden Teilfragen beantwortet.
|
||||||
Diese Antworten zeigen auf, wie die Anmeldung und Zustellung von Weinen für Weinproben des Regionalverbunds
|
Diese Antworten zeigen auf, wie die Anmeldung und Zustellung von Weinen für Weinproben des Regionalverbunds
|
||||||
für Weine in der Weinregion Mosel effizient und profitabel durch eine TYPO3-Erweiterung realisiert werden können.
|
für Weine in der Weinregion Mosel effizient und profitabel durch eine TYPO3-Erweiterung realisiert werden können.
|
||||||
|
\clearpage
|
||||||
|
|
||||||
\paragraph*{Nach welcher Methodik sollten Digitalisierungsprojekte im Maßstab des behandelten Projektes entwickelt werden, um effizient und profitabel zu sein?}
|
\subsection*{Nach welcher Methodik sollten Digitalisierungsprojekte im Maßstab des behandelten Projektes entwickelt werden, um effizient und profitabel zu sein?}
|
||||||
In der Literaturrecherche zur Wahl von Methodiken in der Softwareentwicklung und Digitalisierung
|
In der Literaturrecherche zur Wahl von Methodiken in der Softwareentwicklung und Digitalisierung
|
||||||
im Kontext der effizienten
|
im Kontext der effizienten
|
||||||
und profitablen Umsetzung des hier behandelten Projektes stellten sich komplexe und aufwändige Modelle als
|
und profitablen Umsetzung des hier behandelten Projektes stellten sich komplexe und aufwändige Modelle als
|
||||||
ungeeignet heraus. Vielmehr beeindruckten simple Modelle durch ihren geringen Mehraufwand,
|
ungeeignet heraus. Vielmehr beeindruckten simple, agile Modelle durch ihren geringen Mehraufwand,
|
||||||
der bei kleinen Projekten, wie der Digitalisierung der Anmeldung und Zustellung von Weinen für Weinproben
|
der bei kleinen Projekten, wie der hier beleuchteten Aufgabenstellung, unabdinglich ist, um eine effiziente und profitable
|
||||||
des Regionalverbunds für Weine in der Weinregion Mosel unabdinglich ist, um eine effiziente und profitable
|
|
||||||
Umsetzung gewährleisten zu können.
|
Umsetzung gewährleisten zu können.
|
||||||
|
|
||||||
\paragraph*{Welche QR-Code-Bibliothek ist für das behandelte Projekt gut geeignet?}
|
\subsection*{Welche Anforderungen sind an die TYPO3-Erweiterung gestellt?}
|
||||||
Um die Anmeldung und Zustellung von Weinen für Weinproben des Regionalverbunds für Weine in der Weinregion Mosel
|
Um ein Pflichtenheft für die hier beleuchtete TYPO3-Erweiterung zu erarbeiten,
|
||||||
digital umsetzen zu können, ist lt. Constraints ein QR-Code-Generator notwendig.
|
wurde eine Anforderungsanalyse in Form eines Interviews mit dem \ac{PO} durchgeführt.
|
||||||
|
Auch wurde eine quantitative Studie in Form eines Online-Fragebogens bezüglich der Bedürfnisse der Teilnehmer angestrengt, die ohne Ergebnisse verblieb.
|
||||||
|
Dieses Pflichtenheft zeigt unter anderem auf, dass Mitglieder sowie Nichtmitglieder Teilnehmer sein können,
|
||||||
|
wie die Nutzerführung aussieht, welche Werkzeuge \ac{WM}-Mitarbeitern zur Verfügung stehen und wie verschiedene Schnittstellen aussehen.
|
||||||
|
Auch ist eine wichtige Erkenntnis, dass regelmäßige Statusmeetings mit dem \ac{PO} durchgeführt werden sollten,
|
||||||
|
damit pragmatisch inkorrekte Anforderungen und Merkmale rechtzeitig erkannt und korrigiert werden können.
|
||||||
|
Das vollständige Pflichtenheft liegt im Anhang anbei, unter \fullref{chap:anhang-pflichtenheft}.
|
||||||
|
|
||||||
|
\subsection*{Welche QR-Code-Bibliothek ist für das behandelte Projekt gut geeignet?}
|
||||||
|
Um die Anmeldung und Zustellung von Weinen digital umsetzen zu können, ist lt. Anforderungen ein QR-Code-Generator notwendig.
|
||||||
Generell sollten erwägte Bibliotheken aktiv gepflegt, einen gewissen Grad
|
Generell sollten erwägte Bibliotheken aktiv gepflegt, einen gewissen Grad
|
||||||
an Funktionalität aufweisen und für den angedachten Workflow geeignet sein. Das ist wichtig, damit sich dieser
|
an Funktionalität aufweisen und für den angedachten Workflow geeignet sein. Das ist wichtig, damit sich dieser
|
||||||
effizient und schnell (=kostengünstig) integrieren lässt.
|
effizient, schnell und somit kostengünstig integrieren lässt.
|
||||||
Vergleiche zwischen sechs QR-Code-Bibliotheken legen nahe, dass \textit{chillerlan/php-qrcode} die beste Eignung
|
Vergleiche zwischen sechs QR-Code-Bibliotheken legen nahe, dass \textit{chillerlan/php-qrcode} die beste Eignung
|
||||||
der betrachteten QR-Code-Generatoren aufweist.
|
der betrachteten QR-Code-Generatoren aufweist.
|
||||||
|
|
||||||
%\paragraph*{Wie wird sichergestellt, dass ein digitalisierter Prozess nahtlos mit verbleibenden Prozessen integriert?}
|
\subsection*{Wie wird sichergestellt, dass sich der digitalisierte Teilprozess der Weinanmeldung und -zustellung nahtlos mit dem verbleibenden Prozess integriert?}
|
||||||
%Es ist essenziell, die Schnittstelle zwischen dem digitalisierten Teilprozess und dem verbleibendem analogen Teilprozess
|
Es ist essenziell, die Schnittstelle zwischen dem digitalisierten Teilprozess und dem verbleibenden analogen Teilprozess
|
||||||
%zu schützen. Das wird sichergestellt, indem die Ausgabe des digitalisierten Teilprozesses der Ausgabe des vorherigen,
|
zu schützen. Das wird sichergestellt, indem die Ausgabe des digitalisierten Teilprozesses der Ausgabe des vorherigen,
|
||||||
%analogen Teilprozesses gleicht. Ist das gegeben, kann der neue, digitale Teilprozess effizient in den Geschäftsprozess
|
analogen Teilprozesses gleicht. Ist das gegeben, kann der neue, digitale Teilprozess effizient in den Geschäftsprozess
|
||||||
%der Jahresauswahlproben integriert werden, da die darauf aufbauenden Schritte mit der Ausgabe der digitalisierten Schritte
|
der Jahresauswahlproben integriert werden, dies weil die darauf aufbauenden Schritte mit der Ausgabe der digitalisierten Schritte
|
||||||
%kompatibel sind.
|
kompatibel sind.
|
||||||
%
|
|
||||||
%\paragraph*{Wie können unangemessen hohe Entwicklungskosten vermieden werden?}
|
%\subsection*{Wie können unangemessen hohe Entwicklungskosten vermieden werden?}
|
||||||
%Vermeidbarer Aufwand in der Entwicklung ohne ausreichende Vorteile (Kosten-Nutzen-Rechnung) fällt zulasten der Effizienz.
|
%Vermeidbarer Aufwand in der Entwicklung ohne ausreichende Vorteile (Kosten-Nutzen-Rechnung) fällt zulasten der Effizienz.
|
||||||
\section{Diskussion}
|
\section{Diskussion}
|
||||||
\paragraph*{Nach welcher Methodik sollten Digitalisierungsprojekte im Maßstab des behandelten Projektes entwickelt werden, um effizient und profitabel zu sein?}
|
\subsection*{Nach welcher Methodik sollten Digitalisierungsprojekte im Maßstab des behandelten Projektes entwickelt werden, um effizient und profitabel zu sein?}
|
||||||
Um eine Entwicklungsmethodik für die Umsetzung einer wie in der Problemstellung beschriebenen TYPO3-Extension auszuwählen,
|
Um eine Entwicklungsmethodik für die Umsetzung einer wie in der Problemstellung beschriebenen TYPO3-Erweiterung auszuwählen,
|
||||||
wurde eine Literaturrecherche angestellt.
|
wurde eine Literaturrecherche durchgeführt.
|
||||||
Diese Literaturrecherche lässt darauf schließen, dass sich simple Methodiken, ohne nennenswerten Mehraufwand,
|
Diese Literaturrecherche lässt darauf schließen, dass sich simple, agile Methodiken, ohne nennenswerten Mehraufwand,
|
||||||
gut für die effiziente und profitable Umsetzung kleiner Digitalisierungsprojekte eignen.
|
gut für die effiziente und profitable Umsetzung kleiner Digitalisierungsprojekte, wie dem hier behandelten, eignen.
|
||||||
Somit eignen sich solche Modelle für die Digitalisierung von Anmeldungen und Zustellungen von Weinen für Weinproben
|
Somit empfehlen sich solche Modelle für die Digitalisierung von Anmeldungen und Zustellungen der Weine für Jahresauswahlproben, da hiermit
|
||||||
des Regionalverbunds für Weine in der Weinregion Mosel, um davon zu profitieren.
|
die Umsetzung effizienter und profitabler wird.
|
||||||
Zu Beginn wurde davon ausgegangen, dass agile Entwicklungsmethodiken oder sogar
|
Zu Beginn wurde davon ausgegangen, dass agile Entwicklungsmethodiken oder sogar
|
||||||
\enquote{extreme programming} insbesondere für kleine, zeitkritische Problemstellungen mit dynamischen Anforderungen und somit
|
\enquote{extreme programming} insbesondere für kleine, zeitkritische Problemstellungen mit veränderlichen Anforderungen und somit
|
||||||
auch für die behandelte Problemstellung, geeignet sind. M. Ayman Al Ahmar bestätigt diese Hyptothese.
|
auch für die behandelte Problemstellung, effizient seien. M. Ayman Al Ahmar bestätigt diese Hyptothese.
|
||||||
Ahmar erklärt diese Eignung durch die Agilität des \enquote{extreme programmings}, die die Entwicklungsgeschwindigkeit
|
Ahmar erklärt das durch die Agilität des \enquote{extreme programmings}, die die Entwicklungsgeschwindigkeit
|
||||||
fördert und kurzfristige Änderungen der Anforderungen erlaubt \cite{bib:ayman-al-ahmar}.
|
fördert und kurzfristige Änderungen der Anforderungen effizient gestaltet \cite{bib:ayman-al-ahmar}.
|
||||||
Es muss jedoch berücksichtigt werden, dass sich diese Literaturrecherche explizit auf kleine, zeitkritische Projekte bezieht.
|
Es muss jedoch berücksichtigt werden, dass sich diese Literaturrecherche explizit auf die in dieser Bachelorarbeit beleuchtete Problemstellung bezieht.
|
||||||
Bei Einbezug anderer Projekttypen und -Beschaffenheiten weichen die geeigneten Entwicklungsmethodiken wahrscheinlich ab.
|
Bei Einbezug anderer Projekttypen und -beschaffenheiten weichen die geeigneten Entwicklungsmethodiken wahrscheinlich ab.
|
||||||
Eine Empfehlung für weitere Forschung ist es daher, ähnliche Literaturrecherchen bezüglich
|
Eine Empfehlung für weitere Forschung ist es daher, ähnliche Literaturrecherchen bezüglich
|
||||||
geeigneter Entwicklungsmethodiken für abweichende Projekttypen und -Beschaffenheiten
|
angemessener Entwicklungsmethodiken für abweichende Projekttypen und -beschaffenheiten durchzuführen.
|
||||||
durchzuführen.
|
|
||||||
|
|
||||||
\paragraph*{Welche QR-Code-Bibliothek ist für das behandelte Projekt am besten geeignet?}
|
\subsection*{Welche Anforderungen sind an die TYPO3-Erweiterung gestellt?}
|
||||||
Im Interesse eine geeignete Bibliothek zur Generierung von QR-Codes für die Umsetzung dieses Softwareprojektes zu finden,
|
Um detaillierte Anforderungen an die TYPO3-Erweiterung in Erfahrung zu bringen, wurde eine Anforderungsanalyse durch verschiedene
|
||||||
die sich effizient und schnell (=kostengünstig) integrieren lässt,
|
Befragunstechniken durchgeführt. Die verwendeten Befragunstechniken sind \enquote{Interview} und \enquote{Online-Fragebogen}.
|
||||||
wurden sechs QR-Code-Bibliotheken gegenübergestellt und in drei verschiedenen Bewertungskategorien verglichen.
|
Auch ist es eine wichtige Erkenntnis des Interviews, regelmäßige Statusmeetings mit dem \ac{PO} zu führen.
|
||||||
|
Diese Statusmeetings erlauben das frühzeitige Erkennen und Beheben von pragmatisch inkorrekten Merkmalen und Anforderungen.
|
||||||
|
Es ist wichtig zu erwähnen, dass der Online-Fragebogen unbeantwortet blieb.
|
||||||
|
Das Ergebnis dieser Anforderungsanalyse ist ein detailliertes Pflichtenheft, das die Anforderdungen an die TYPO3-Erweiterung detailliert beschreibt.
|
||||||
|
Dieses zeigt unter anderem auf, dass Mitglieder und Nichtmitglieder Teilnehmer sein können,
|
||||||
|
wie detaillierte Konzepte der Nutzerführung und verschiedene Schnittstellen aussehen und welche Werkzeuge \ac{WM}-Mitarbeitern zur Verfügung stehen.
|
||||||
|
Einige Anforderungen waren bereits im Voraus bekannt. Das ermittelte Pflichtenheft ist eine Erweiterung dieser.
|
||||||
|
Da diese Anforderungsanalyse lediglich die Anmeldung und Zustellung von Weinen betrachtet, ist es empfehlenswert, in weiteren Ausbauten
|
||||||
|
des Jahresauswahlprobenwerkzeuges Forschungen bezüglich darauf aufbauender Anforderungen durchzuführen.
|
||||||
|
|
||||||
|
|
||||||
|
\subsection*{Welche QR-Code-Bibliothek ist für das behandelte Projekt gut geeignet?}
|
||||||
|
Im Interesse eine Bibliothek zur Generierung von QR-Codes für die Umsetzung dieses Softwareprojektes zu finden,
|
||||||
|
die sich effizient, schnell und somit kostengünstig integrieren lässt,
|
||||||
|
wurden sechs QR-Code-Biblio\-theken einander gegenübergestellt und in drei verschiedenen Bewertungskategorien verglichen.
|
||||||
Diese Bewertungskategorien sind \enquote{Funktionalität}, \enquote{Gepflegtheit} und \enquote{Workflow-Eignung}.
|
Diese Bewertungskategorien sind \enquote{Funktionalität}, \enquote{Gepflegtheit} und \enquote{Workflow-Eignung}.
|
||||||
Jede dieser Kategorien wurde mit null bis zehn Punkten bewertet. Jede Bibliothek konnte maximal 30 Punkte erhalten.
|
Jede dieser Kategorien wurde mit null bis zehn Punkten bewertet. Jede Bibliothek konnte maximal 30 Punkte erhalten.
|
||||||
Die Bewertung erfolgte nach subjektiver Einschätzung des Autors, basierend auf Faktoren wie dem Zustand der Github-Seite,
|
Die Bewertung erfolgte nach subjektiver Einschätzung des Autors, basierend auf Faktoren wie dem Zustand der Github-Seite,
|
||||||
der Produktwebseite, den tätigen Entwicklern, der Lizenz, der Beschaffenheit des Projektes, der Dokumentation und dem dort ersichtlichen
|
der Produktwebseite, den tätigen Entwicklern, der Lizenz, der Beschaffenheit des Projektes, der Dokumentation und dem dort ersichtlichen
|
||||||
Funktionsumfang. Dieser Vergleich deutet darauf hin, dass sich \enquote{chillerlan/php-qrcode} mit 30 Gesamtpunkten am besten für
|
Funktionsumfang. Dieser Vergleich deutet darauf hin, dass \enquote{chillerlan/php-qrcode} mit 30 Gesamtpunkten
|
||||||
eine Verwendung in der behandelten Problemstellung eignet. Es wurde davon ausgegangen, dass \enquote{chillerlan/php-qrcode}
|
die beste Eignung der verglichenen Bibliotheken aufweist. Es wurde davon ausgegangen, dass \enquote{chillerlan/php-qrcode} eine gute Wahl sei,
|
||||||
gut geeignet wäre, da die Verwendung dieser Bibliothek firmenintern nahegelegt wurde. Der abgehaltene Vergleich bestätigt
|
da diese Bibliothek bereits firmenintern nahegelegt wurde. Der abgehaltene Vergleich bestätigt
|
||||||
diese Empfehlung. Dieser Erfolg erklärt sich durch ein aktiv gepflegtes Softwareprodukt mit einer Vielzahl an Entwicklern,
|
diese Empfehlung. Dieser Erfolg erklärt sich durch ein aktiv gepflegtes Softwareprodukt mit einer Vielzahl an Entwicklern,
|
||||||
Empfehlungen, Verwendungen, aktueller Versionsunterstützung, guter Dokumentation und projektspezifischer Eignung.
|
Verwendungen, aktueller Versionsunterstützung, guter Dokumentation und projektspezifischer Eignung.
|
||||||
Es muss jedoch beachtet werden, dass dieser Vergleich die projektspezifische Eignung als wichtigen Faktor mit einbezieht.
|
Es muss jedoch beachtet werden, dass dieser Vergleich das spezifische Projekt als wichtigen Faktor mit einbezieht.
|
||||||
Somit ist dieser Vergleich nur gültig, um eine QR-Code-Bibliothek für ein PHP-Projekt mit dem Composer-Paketmanager zu evaluieren.
|
Somit ist dieser Vergleich nur gültig, um eine QR-Code-Bibliothek für ein PHP-Projekt mit dem Composer-Paketmanager zu evaluieren.
|
||||||
Der Autor empfielt ähnliche Vergleiche für andere Arbeitsumgebungen abzuhalten, um zu bestimmen, welche QR-Code-Bibliotheken in anderen
|
Der Autor empfielt ähnliche Vergleiche für andere Arbeitsumgebungen durchzuführen, um zu bestimmen, welche QR-Code-Bibliotheken für andere
|
||||||
Projektkontexten gut geeignet sind. Ebenso nimmt dieser Vergleich nur sechs QR-Code-Bibliotheken in Betracht.
|
Projektkontexte angemessen sind. Ebenso nimmt dieser Vergleich nur sechs QR-Code-Bibliotheken in Betracht.
|
||||||
Eine Forschungsempfehlung ist es, weitere Vergleiche mit mehr Kandidaten durchzuführen.
|
Eine weitere Forschungsempfehlung ist es daher, weitere Vergleiche mit mehr Bibliotheken durchzuführen.
|
||||||
|
|
||||||
%\paragraph*{Wie wird sichergestellt, dass ein digitalisierter Prozess nahtlos mit verbleibenden Prozessen integriert?}
|
\subsection*{Wie wird sichergestellt, dass sich der digitalisierte Teilprozess der Weinanmeldung und -zustellung nahtlos mit dem verbleibenden Prozess integriert?}
|
||||||
|
Im Zuge der praktischen Umsetzung der in dieser Forschungsfrage beschriebenen TYPO3-Erweiterung zeigte sich das Problem
|
||||||
|
der Integration der digitalisierten Weinanmeldung und -zustellung in den restlichen, von dieser Ausarbeitung unberührten
|
||||||
|
Geschäftsprozess der Jahresauswahlprobe.
|
||||||
|
Diese Umsetzung zeigt auf, dass es für eine nahtlose Integration in den existierenden Geschäftsprozess
|
||||||
|
unabdinglich ist, dass die Ausgabe des digitalisierten Teilprozesses der Ausgabe des ersetzten, manuellen Teilprozesses gleicht.
|
||||||
|
Dieser Aspekt wurde zuvor nicht bedacht. Das könnte daran liegen, dass diese Schnittstelle nicht der primäre und auch nicht
|
||||||
|
der sekundäre Fokus in der Umsetzung ist. Sie wird nicht benötigt, damit das umgesetzte Produkt intrinsisch funktioniert,
|
||||||
|
ist aber dennoch unverzichtlich für eine reibungslose, praktische Verwendung.
|
||||||
|
Hierbei muss jedoch berücksichtigt werden, dass es sich um ein einzelnes, konkretes Projekt handelt und sich aus diesem Grund
|
||||||
|
nicht unbedingt allgemeingültige Schlüsse ableiten lassen. Eine Forschungsempfehlung ist es daher, weitere Möglichkeiten
|
||||||
|
zur Integration verschiedener Teilprozesse zu recherchieren und zu evaluieren.
|
||||||
|
|
||||||
%\paragraph*{Wie können unangemessen hohe Entwicklungskosten vermieden werden?}
|
%\subsection*{Welche Endgeräte verwenden Weingüter und was sind ihre Bedürfnisse bezüglich der Jahresauswahlproben?}
|
||||||
|
%Um zu beleuchten, welche Endgeräte Weingüter im Kontext der Weinanmeldung verwenden und was ihre individuellen Bedürfnisse
|
||||||
|
%im Kontext der Jahresauswahlproben sind, wurde versucht eine quantitative Studie in Form eines Online-Formulares abzuhalten.
|
||||||
|
%Dieses Online-Formular wurde über den Zeitraum eines Monats angeboten und mit der Bitte um Weiterleitung an Weingüter an \ac{WM}
|
||||||
|
%übermittelt. Diese quantitative Studie erzielte keine Antworten. Ursprünglich wurde erwartet, dass zumindest einige Kandidaten
|
||||||
|
%an der Studie teilnehmen würden. Es wurde erwartet, dass ca 60\% der Weingüter hauptsächlich Desktopsysteme verwenden.
|
||||||
|
%Eine Möglichkeit, wieso die Studie unbeantwortet blieb, könnten Fehler in der Übermittlung des Fragebogens an die
|
||||||
|
%zugehörige Stakeholdergruppe sein, bzw. vielleicht kam die Einladung zur Teilnahme niemals bei der Stakeholdergruppe an.
|
||||||
|
%Es könnte auch sein, dass die Stakeholdergruppe schlicht kein Interesse an einer Teilnahme hatte.
|
||||||
|
%Daher wird die Forschungsempfehlung ausgesprochen, dieselbe Studie erneut in einer Art und Weise durchzuführen, die eine regere Teilnahme begünstigt.
|
||||||
|
|
||||||
|
%\subsection*{Wie können unangemessen hohe Entwicklungskosten vermieden werden?}
|
||||||
|
|||||||
@@ -1,2 +1,55 @@
|
|||||||
\chapter{Fazit}
|
\chapter{Fazit}
|
||||||
\label{chap:fazit}
|
\label{chap:fazit}
|
||||||
|
Die vorliegende Bachelorarbeit befasste sich mit der Frage: \enquote{Wie kann die Anmeldung und Zustellung von Weinen für Weinproben
|
||||||
|
des Regionalverbunds für Weine in der Weinregion Mosel effizient und profitabel durch eine TYPO3-Erweiterung realisiert werden?}
|
||||||
|
Für die Beantwortung wurde eine Literaturrecherche bezüglich Entwicklungsmethodiken, eine Gegenüberstellung existierender Technik
|
||||||
|
zur Erstellung von QR-Codes, verschiedene Befragungstechniken zur Anforderungserfassung sowie die praktische Umsetzung der
|
||||||
|
TYPO3-Erweiterung angestrengt.
|
||||||
|
\\
|
||||||
|
\\
|
||||||
|
Aus den Ergebnissen lässt sich schließen, dass sich insbesondere \enquote{extreme-programming}-Entwicklungsmethodiken eignen,
|
||||||
|
um das aus der Forschungsfrage hervorgehende Projekt zu realisieren.
|
||||||
|
Es wurde gezeigt, dass sich die Bibliothek \enquote{chillerlan/php-qrcode} aufgrund herausragender Projektpflege und Workflow-Eignung anbietet,
|
||||||
|
die mit dem Projekt verbundenen Anforderungen zu erfüllen, die die Erstellung von QR-Codes beschreiben. Die Umsetzung zeigte,
|
||||||
|
dass es unverzichtlich ist, die Schnittstelle zu den verbleibenden Teilprozessen zu schützen, um eine nahtlose Integration mit diesen zu ermöglichen.
|
||||||
|
Es wurde begründet, dass die Durchführung einer Anforderungsanalyse wichtig ist, um ein ausführliches Pflichtenheft auszuarbeiten
|
||||||
|
und es zeigte sich, dass regelmäßige Statusmeetings mit dem \ac{PO} von Vorteil sind, um die pragmatische Korrektheit laufend zu überprüfen.
|
||||||
|
\\
|
||||||
|
\\
|
||||||
|
Durch diese Forschung wurde somit erwiesen, dass die Anmeldung und Zustellung von Weinen für Weinproben des Regionalverbunds für
|
||||||
|
Weine in der Weinregion Mosel effizient und profitabel durch eine TYPO3-Erweiterung realisiert werden kann, indem für die technische
|
||||||
|
Umsetzung \enquote{extreme-programming}-Entwicklungsmethodiken herangezogen werden, durch eine Anforderungsanalyse ein Pflichtenheft ausgearbeitet wird,
|
||||||
|
der aktuelle Stand regelmäßig in Statusmeetings mit dem \ac{PO} besprochen wird, \enquote{chillerlan/php-qrcode} als QR-Code-Bibliothek verwendet wird
|
||||||
|
und die Schnittstelle zu den verbleibenden Teilprozessen geschützt wird.
|
||||||
|
|
||||||
|
\section{Ausblick}
|
||||||
|
\label{chap:ausblick}
|
||||||
|
Nach der Umsetzung der Anmeldung und Zustellung von Weinen für Jahresauswahlproben,
|
||||||
|
gilt es diese TYPO3-Erweiterung in ihrer Funktionalität zu erweitern, sodass der gesamte
|
||||||
|
Geschäftsprozess der Jahresauswahlprobe abgebildet ist.
|
||||||
|
|
||||||
|
\begin{nicepic}
|
||||||
|
\includegraphics[width=1\textwidth]{images/geschäftsprozess-ausblick.png}
|
||||||
|
\captionof{figure}{Geschäftsprozess Jahresauswahlprobe: Ausblick, Quelle: Eigene Darstellung}
|
||||||
|
\label{fig:geschaeftsprozess-ausblick}
|
||||||
|
\end{nicepic}
|
||||||
|
|
||||||
|
Der vom Kunden langfristig erwünschte Zustand ist, dass der gesamte Geschäftsprozess der Jahresauswahlprobe teilautomatisiert wird.
|
||||||
|
Das betrifft auch, aber nicht nur, das Aufteilen von Jahresauswahlproben in Tische und Flights, das sichere Sammeln und Auswerten
|
||||||
|
der Bewertungen und das Publizieren der daraus resultierenden Ergebnisse. Ein Flight ist eine weitere Unterteilung eines Tisches in der Zeit.
|
||||||
|
So werden pro Tisch immer sechs Weine auf einmal probiert und bewertet.
|
||||||
|
Die Bewertung eines Weines erfolgt derzeit über eine Bepunktung, die im Wertebereich $[0,100]$ auf Papier notiert wird.
|
||||||
|
Anschließend wird mithilfe eines Taschenrechners das arithmetische Mittel der für diesen Wein vergebenen Punkte ausgerechnet.
|
||||||
|
Das so zustandegekommene Ergebnis wird wiederum händisch in die Excel-Tabelle aus vorherigen Schritten übertragen.
|
||||||
|
Ein solch umständliches Verfahren lenkt nicht nur von der eigentlichen Aufgabe der Bewertung ab, sondern stellt eine beachtliche Fehlerquelle dar.
|
||||||
|
Auch ist es angedacht, die Weinanmeldung zu Jahresauswahlproben um komplexe Funktionalität zu erweitern, die sicherstellen soll, dass
|
||||||
|
nicht gegen Restriktionen der jeweiligen Probenkategorien verstoßen werden kann. Somit soll vermieden werden, dass Weinanmeldungen
|
||||||
|
aufgrund von Formfehlern abgelehnt werden.
|
||||||
|
Ein triviales Beispiel hierfür wäre ein Wein mit zu hohem Restzuckeranteil,
|
||||||
|
der in einer Jahresauswahlprobenkategorie für trockene Weine antreten soll.
|
||||||
|
Ziel ist es, dass das Weinanmeldeformular fehlerhafte
|
||||||
|
Anmeldeversuche als solche erkennt und verhindert.
|
||||||
|
Kompliziert wird diese Technik dadurch, dass Kategorien beliebig viele Restriktionen haben können
|
||||||
|
und diese von Redakteuren, im TYPO3-Backend, gepflegt werden sollen. Ein komplexeres, realistisches Beispiel wäre eine
|
||||||
|
Kategorie, die nur vegane Barriqueweine der Rebsorte Merlot zulässt, die einen Mindest- und Maximalrestzuckeranteil, einen Maximalalkoholanteil und
|
||||||
|
einen Maximalpreis erfüllen.
|
||||||
|
|||||||
@@ -2,80 +2,81 @@
|
|||||||
\label{chap:umsetzung}
|
\label{chap:umsetzung}
|
||||||
Infolge der Anforderungsanalyse befasst sich das Kapitel \enquote{Konzeption und Umsetzung}
|
Infolge der Anforderungsanalyse befasst sich das Kapitel \enquote{Konzeption und Umsetzung}
|
||||||
mit der Implementation der Anforderungen in dem
|
mit der Implementation der Anforderungen in dem
|
||||||
Brown-Field Projekt \cite{bib:schwarzer-vorlesung-swa} in Form einer TYPO3-Extension.
|
Brown-Field Projekt \cite{bib:schwarzer-vorlesung-swa} in Form einer TYPO3-\break{}Erweiterung.
|
||||||
Es ist anzumerken, dass das aus \fullref{chap:anforderungserfassung} hervorgehende Pflichtenheft im Rahmen geplanter und
|
Es ist anzumerken, dass das aus \fullref{chap:anforderungserfassung} hervorgehende Pflichtenheft im Rahmen geplanter und
|
||||||
opportunistischer Gespräche mit dem \ac{PO} geringfügige Änderungen erfahren hat.
|
opportunistischer Gespräche mit dem \ac{PO} geringfügige Änderungen erfahren wird.
|
||||||
|
|
||||||
\section{Setup einer TYPO3-Extension}
|
\section{Setup der TYPO3-Erweiterung}
|
||||||
TYPO3-Extensions werden via Composer installiert \cite{bib:typo3-docs-managing-extensions}.
|
TYPO3-Erweiterungen werden via Composer installiert
|
||||||
Um eine TYPO3-Extension zu erstellen, muss also ein Composer-Paket erstellt werden.
|
\break\cite{bib:typo3-docs-managing-extensions}.
|
||||||
|
Um eine TYPO3-Erweiterung zu erstellen, muss also ein Composer-Paket erstellt werden.
|
||||||
Um vermeidbare Komplexität zu verhindern, wird das Composer-Paket, welches die hier betrachtete
|
Um vermeidbare Komplexität zu verhindern, wird das Composer-Paket, welches die hier betrachtete
|
||||||
TYPO3-Extension darstellt, lokal in den versionierten Ordner \enquote{packages} gelegt.
|
TYPO3-Erweiterung darstellt, lokal in den versionierten Ordner \enquote{packages} gelegt.
|
||||||
Dieses Verzeichnis wird als Quelle für Composer-Pakete in der
|
Dieses Verzeichnis wird als Quelle für
|
||||||
|
\break{}Composer-Pakete in der
|
||||||
Haupt-composer.json-Datei hinterlegt.
|
Haupt-composer.json-Datei hinterlegt.
|
||||||
Somit wird ein Composer-Paket nur für dieses Projekt bereitgestellt,
|
Somit wird ein Composer-Paket nur für dieses Projekt bereitgestellt,
|
||||||
ohne den Aufwand zu haben, der üblicherweise mit dem Bereitstellen eines Paketes einhergeht.
|
ohne den Aufwand zu betreiben, der üblicherweise mit dem Bereitstellen eines Paketes einhergeht.
|
||||||
\\
|
\\
|
||||||
\\
|
\\
|
||||||
Um das grundlegende Setup einer Extension effizient durchzuführen, wurde eine
|
Um das grundlegende Setup einer TYPO3-Erweiterung effizient durchzuführen, wird eine
|
||||||
existierende Extension mit vergleichbarem Funktionsumfang kopiert, umbenannt und eingefügt.
|
existierende Erweiterung mit vergleichbarem Funktionsumfang kopiert, angepasst und eingefügt,
|
||||||
Spezifisch ist der \enquote{vergleichbare Funktionsumfang}, dass es Datenmodelle und hochpersonalisierte
|
um eine valide Ordnerstruktur als Ausgangspunkt zu erhalten.
|
||||||
Frontendlogik in Bezug auf die zuvor genannten Datenmodelle gibt.
|
|
||||||
|
|
||||||
\section{Digitization}
|
\section{Digitization}
|
||||||
Die Phase der Digitizion nach Verhoef et al. befasst sich mit der digitalen Abbildung von Objekten der realen Welt
|
Die Phase der Digitization nach Verhoef et al. befasst sich mit der digitalen Abbildung von Objekten aus der realen Welt
|
||||||
in einer Art und Weise, sodass diese elektronisch weiterverarbeitet werden können\\\cite{bib:dougherty, bib:loebbecke}.
|
in einer Art und Weise, die ermöglicht, dass diese elektronisch weiterverarbeitet werden können\break\cite{bib:dougherty, bib:loebbecke}.
|
||||||
Des Weiteren befasst sich diese Phase mit der Automatisierung und Befüllung dieser Daten,
|
Des Weiteren befasst sich diese Phase mit der Automatisierung und Befüllung dieser Daten,
|
||||||
wie zum Beispiel Web-Formularen \cite{bib:verhoef}.
|
wie zum Beispiel durch Web-Formulare \cite{bib:verhoef}.
|
||||||
Das bedeutet, dass in dieser Phase Datenobjekte definiert und implementiert werden.
|
Das bedeutet, dass in dieser Phase Datenobjekte definiert und implementiert werden.
|
||||||
|
Ebenfalls werden anhand der Papier-Formulare Web-Formulare gebaut, damit Nutzer diese Datenobjekte erstellen können.
|
||||||
Ein Datenobjekt besteht nach firmeninternen Konventionen aus zumindest
|
Ein Datenobjekt besteht nach firmeninternen Konventionen aus zumindest
|
||||||
vier Komponenten:
|
vier Komponenten:
|
||||||
\begin{description}
|
\begin{description}
|
||||||
\item{Datenbanktabelle} \\
|
\item{\textbf{Datenbanktabelle}} \\
|
||||||
Die Datenbanktabelle persistiert Informationen.
|
Die Datenbanktabelle persistiert Informationen.
|
||||||
\item{Domain Model} \\
|
\item{\textbf{Domain Model}} \\
|
||||||
Das Domain Model (auch Model genannt) ist eine PHP-Klasse,
|
Das Domain Model (auch Model genannt) ist eine PHP-Klasse,
|
||||||
die jeweils die Daten einer Zeile der Datenbanktabelle abbildet.
|
die jeweils die Daten einer Zeile der Datenbanktabelle abbildet.
|
||||||
\item{Repository} \\
|
\item\textbf{{Repository}} \\
|
||||||
Ein Repository ist eine PHP-Klasse, die die Schnittstelle
|
Ein Repository ist eine PHP-Klasse, die die Schnittstelle
|
||||||
zwischen der Datenbank und der Model-Klasse darstellt.
|
zwischen der Datenbank und der Model-Klasse darstellt.
|
||||||
\item{\ac{TCA}} \\
|
\item{\textbf{\ac{TCA}}} \\
|
||||||
Der \ac{TCA} des Modells definiert, wie diese Objekte im TYPO3-Backend dargestellt werden
|
Der \ac{TCA} des Modells definiert, wie diese Objekte im TYPO3-Backend dargestellt werden
|
||||||
und bearbeitbar sind.
|
und bearbeitbar sind.
|
||||||
\end{description}
|
\end{description}
|
||||||
\cite{bib:typo3-docs-extbase-reference}.
|
\cite{bib:typo3-docs-extbase-reference}.
|
||||||
|
|
||||||
Im Folgenden wurde ein semiformales Diagramm der Objekte und ihren Relationen
|
Im Folgenden wird ein semiformales Diagramm der Objekte und ihren Relationen
|
||||||
angefertigt und in Rücksprache mit dem \ac{PO} finalisiert.
|
angefertigt und in Rücksprache mit dem \ac{PO} finalisiert.
|
||||||
|
|
||||||
\begin{nicepic}
|
\begin{nicepic}
|
||||||
\includegraphics[width=1\textwidth]{images/objektrelationen-weinlandmosel-einlieferungswerkzeug.png}
|
\includegraphics[width=1\textwidth]{images/objektrelationen-weinlandmosel-einlieferungswerkzeug.png}
|
||||||
\captionof{figure}{Objektrelationen}
|
\captionof{figure}{Objektrelationen: Weinland Mosel Jahresauswahlprobenwerkzeug, Quelle: Eigene Darstellung}
|
||||||
\caption*{Quelle: Eigene Darstellung}
|
|
||||||
\label{fig:objektrelationen}
|
\label{fig:objektrelationen}
|
||||||
\end{nicepic}
|
\end{nicepic}
|
||||||
|
|
||||||
Nachdem in Erfahrung gebracht wurde, welche konkreten Datenobjekte benötigt werden,
|
Nachdem in Erfahrung gebracht wird, welche konkreten Datenobjekte benötigt werden,
|
||||||
wurden Attribute dieser Objekte dem Pflichtenheft entnommen. Diese wurden in einem
|
werden Attribute dieser Objekte dem Pflichtenheft entnommen. Diese werden in einem
|
||||||
formalen Klassendiagramm festgehalten und in Rücksprache mit dem \ac{PO}
|
formalen Klassendiagramm festgehalten und in Rücksprache mit dem \ac{PO}
|
||||||
weiter bis zu festen Datentypen und Auswahlmöglichkeiten konkretisiert.
|
weiter bis zu festen Datentypen und Auswahlmöglichkeiten konkretisiert.
|
||||||
Beispielsweise, dass Wettbewerbskategorien durch TYPO3-Categories repräsentiert werden sollen.
|
Beispielsweise dass Probenkategorien durch TYPO3-Categories repräsentiert werden.
|
||||||
Das hat den Vorteil, dass TYPO3-Categories bereits native Bestandteile eines TYPO3-Redaktionssystemes sind
|
Das hat den Vorteil, dass TYPO3-Categories bereits native Bestandteile eines TYPO3-Redaktionssystemes sind
|
||||||
und alle relevanten Attribute anbieten. Diese sind ein Titel,
|
und alle relevanten Attribute anbieten. Diese sind Titel,
|
||||||
eine Parentkategorie und eine Beschreibung.
|
Parentkategorie und Beschreibung.
|
||||||
Das Parent-Attribut ist benötigt, da $n$ dieser Attribute einen Attributbaum bilden
|
Das Parent-Attribut ist nötig, da $n$ dieser Attribute einen Attributbaum bilden
|
||||||
\cite{bib:typo3-docs-sys-category}.
|
\cite{bib:typo3-docs-sys-category}.
|
||||||
Somit ist es möglich, Unterkategorien zu erstellen. Beispiele hierfür sind die
|
Somit ist es möglich, Unterkategorien zu erstellen. Beispiele hierfür sind die
|
||||||
Unterkategorien \enquote{Trockener Riesling} und \enquote{Halbtrockener Riesling} für die Überkategorie
|
Unterkategorien \enquote{Trockener Riesling} und \enquote{Halbtrockener Riesling} für die Überkategorie
|
||||||
\enquote{Riesling}.
|
\enquote{Riesling}.
|
||||||
Rebsorten, Geschmack, Weineigenschaften und Qualität sollen eigene Datentypen
|
Rebsorte, Geschmacksangabe, Weineigenschaften und Qualitätsstufe sollen eigene Datentypen,
|
||||||
anstatt einfacher Zeichenfolgen sein.
|
anstatt einfacher Zeichenfolgen sein.
|
||||||
Ziel dessen ist, dass sich Nutzer für einen vorgefertigten, nominalen Eintrag in einem Dropdown-Menü
|
Ziel dessen ist, dass sich Nutzer für einen vorgefertigten, nominalen Eintrag in einem Dropdown-Menü
|
||||||
entscheiden müssen und diese Auswahlmöglichkeiten immer noch im TYPO3-Backend pflegbar sind.
|
entscheiden müssen und dass diese Auswahlmöglichkeiten im TYPO3-Backend pflegbar sind.
|
||||||
Weinlagen sind im Brown-Field-Projekt bereits vorhanden, also sollen hierfür existierenden Daten
|
Weinlagen sind im Brown-Field-Projekt bereits vorhanden, also sollen hierfür existierende Daten
|
||||||
eingebunden werden.
|
wiederverwendet werden.
|
||||||
Je Wein sollen beliebig viele Weineigenschaften auswählbar sein, Wettbewerbskategorien,
|
Je Wein sollen beliebig viele Weineigenschaften auswählbar sein. Probenkategorie,
|
||||||
Geschmacksrichtung, etc, jeweils nur ein Element.
|
Geschmacksangabe, etc, sind jeweils nur ein Element.
|
||||||
Weitere Notizen zu diesem Gespräch sind im Anhang unter \fullref{chap:anhang-notizen-digitization}
|
Weitere Notizen zu diesem Gespräch sind im Anhang unter \fullref{chap:anhang-notizen-digitization}
|
||||||
zu finden.
|
zu finden.
|
||||||
\\
|
\\
|
||||||
@@ -93,51 +94,48 @@ da zu diesem Zeitpunkt keine erweiterte Auswahllogik für Datenbankanfragen ben
|
|||||||
Wichtig ist hierbei, dass eine Repository-Klasse existiert. Alle unverzichtbaren
|
Wichtig ist hierbei, dass eine Repository-Klasse existiert. Alle unverzichtbaren
|
||||||
Schnittstellen werden über die Basisklasse \enquote{Repository} geerbt
|
Schnittstellen werden über die Basisklasse \enquote{Repository} geerbt
|
||||||
\cite{bib:typo3-docs-extdev-tut-tea-repositories}.
|
\cite{bib:typo3-docs-extdev-tut-tea-repositories}.
|
||||||
Mit Abschluss der Phase der Digitization können alle Datenstrukturen im TYPO3-Backend händisch angelegt,
|
|
||||||
eingesehen, gelöscht und bearbeitet werden.
|
|
||||||
|
|
||||||
|
|
||||||
\subsection{Teilnehmerregistrierung}
|
\subsection{Teilnehmerregistrierung}
|
||||||
Ein essenzieller Teil des Jahresauswahlprobenwerkzeuges ist die Registrierung von Teilnehmern.
|
Ein essenzieller Teil des Jahresauswahlprobenwerkzeuges ist die Registrierung von Teilnehmern.
|
||||||
Dieses Modul repräsentiert den ersten Berührungspunkt der Winzer mit dem System.
|
Dieses Modul repräsentiert den ersten Berührungspunkt der Winzer mit dem System.
|
||||||
Hiervon profitiert \ac{WM}, weil registrierte Benutzer der Webseite eine Grundvorausetzung
|
|
||||||
für die Onlineregistrierung von Weinen zu Jahresauswahlproben sind.
|
|
||||||
Dem Pflichtenheft ist zu entnehmen, dass es zwei Kategorien von Teilnehmerregistrierungen gibt:
|
Dem Pflichtenheft ist zu entnehmen, dass es zwei Kategorien von Teilnehmerregistrierungen gibt:
|
||||||
\begin{enumerate}
|
\begin{enumerate}
|
||||||
\item Nutzer ist \ac{WM}-Mitglied
|
\item Nutzer ist \ac{WM}-Mitglied
|
||||||
\item Nutzer ist kein \ac{WM}-Mitglied
|
\item Nutzer ist kein \ac{WM}-Mitglied
|
||||||
\end{enumerate}
|
\end{enumerate}
|
||||||
Der primäre Unterschied zwischen Mitgliedern und Nicht-Mitgliedern ist, dass Mitglieder bereits einen
|
Der primäre Unterschied zwischen Mitgliedern und Nichtmitgliedern ist, dass Mitglieder bereits einen
|
||||||
Stammdatensatz hinterlegt haben.
|
Stammdatensatz hinterlegt haben.
|
||||||
Dieser Stammdatensatz bildet die Angaben zum Weingut des zu digitalisierendem Anmeldeformulares ab.
|
Dieser Stammdatensatz bildet die Angaben zum Weingut des zu digitalisierenden Anmeldeformulares ab.
|
||||||
Nicht-Mitglieder sind dem System noch gänzlich unbekannt und müssen im Zuge der Registrierung ihres Nutzers
|
Nichtmitglieder sind dem System noch gänzlich unbekannt und müssen im Zuge der Registrierung ihres Nutzers
|
||||||
ihre Stammdaten angeben, während sich Mitglieder lediglich einloggen müssen und eine Schaltfläche
|
ihre Stammdaten angeben, während sich Mitglieder lediglich einloggen müssen und eine Schaltfläche
|
||||||
\enquote{Teilnehmer werden} betätigen.
|
\enquote{Teilnehmer werden} betätigen.
|
||||||
Der mit dem \ac{PO} ausgearbeitete UX-Flow der Registrierung sieht vor, dass der Nutzer zunächst gefragt wird,
|
Der mit dem \ac{PO} ausgearbeitete UX-Flow der Registrierung sieht vor, dass der Nutzer zunächst gefragt wird,
|
||||||
ob er Mitglied sei oder nicht. Hierzu gibt es je einen Button. Ist der Nutzer ein Mitglied,
|
ob er Mitglied sei oder nicht. Hierzu gibt es je einen Button. Ist der Nutzer ein Mitglied,
|
||||||
wird er auf ein Loginform, mit der Option zur Registrierung weitergeleitet.
|
wird er auf ein Loginformular, mit der Option zur Registrierung weitergeleitet.
|
||||||
Nach erfolgreichem Login, wird ein Teilnehmerobjekt erstellt.
|
Nach erfolgreichem Login, wird ein Teilnehmerobjekt erstellt.
|
||||||
Wählt der Nutzer \enquote{Nein, ich bin kein Mitglied} aus, wird er auf ein Registrierungsformular
|
Wählt der Nutzer \enquote{Nein, ich bin kein Mitglied}, wird er auf ein Registrierungsformular
|
||||||
weitergeleitet, um einen Nicht-Mitgliederaccount anzulegen. Im Zuge dieser Registrierung werden
|
weitergeleitet, um einen Nichtmitgliederaccount anzulegen. Im Zuge dieser Registrierung werden
|
||||||
Stammdaten zum Weingut angefragt.
|
Stammdaten zum Weingut angefragt.
|
||||||
Dieser Schritt übersetzt unter anderem den \enquote{Einreicher}-Teil des ursprünglichen Anmeldeformulares,
|
Dieser Schritt übersetzt unter anderem den \enquote{Einreicher}-Teil des ursprünglichen Anmeldeformulares,
|
||||||
anbei in \fullref{chap:anhang-anmeldeformular}.
|
anbei in \fullref{chap:anhang-anmeldeformular}.
|
||||||
|
|
||||||
\begin{nicepic}
|
\begin{nicepic}
|
||||||
\includegraphics[width=0.9\textwidth]{images/ux-flow-registrierung.png}
|
\includegraphics[width=0.6\textwidth]{images/ux-flow-registrierung.png}
|
||||||
\captionof{figure}{UX-Flow: Registrierung}
|
\captionof{figure}{UX-Flow: Registrierung, Quelle: Eigene Darstellung}
|
||||||
\caption*{Quelle: Eigene Darstellung}
|
|
||||||
\label{fig:uxflow-registrierung}
|
\label{fig:uxflow-registrierung}
|
||||||
\end{nicepic}
|
\end{nicepic}
|
||||||
|
|
||||||
Da das Brown-Field-Projekt bereits Accountlogins und -Registrierungen implementiert und nutzt,
|
Da das Brown-Field-Projekt bereits Accountlogins und -registrierungen implementiert und nutzt,
|
||||||
werden auf diese Lösungen zurückgegriffen, um einen einheitlichen Workflow beizubehalten.
|
wird auf diese Lösungen zurückgegriffen, um einen einheitlichen Workflow beizubehalten.
|
||||||
Accountregistrierungen werden über den
|
Accountregistrierungen werden über den
|
||||||
\enquote{femanager} \cite{bib:typo3-docs-femanager} realisiert, während Logins via TYPO3s nativem
|
\enquote{femanager} \cite{bib:typo3-docs-femanager} realisiert, während Logins via TYPO3s nativem
|
||||||
Frontend-Nutzer-Login gelöst werden. Das ist explizit von \enquote{femanager} so angedacht:
|
Frontend-Nutzer-Login gelöst werden. Das ist explizit von \enquote{femanager} angedacht:
|
||||||
\quotecite{Note: Login and a I forgot my password function is part of the core and not part of femanager.}
|
\quotecite{Note: Login and a I forgot my password function is part of the core and not part of femanager.}
|
||||||
\cite{bib:typo3-docs-femanager}.
|
\cite{bib:typo3-docs-femanager}.
|
||||||
Im Folgenden wird der Registrierungsprozess im Detail beschrieben:\\
|
Im Folgenden wird der Registrierungsprozess im Detail beschrieben:
|
||||||
|
\\
|
||||||
|
\\
|
||||||
Grundlegend gibt es drei relevante Nutzerzustände vor der Registrierung:
|
Grundlegend gibt es drei relevante Nutzerzustände vor der Registrierung:
|
||||||
\begin{enumerate}
|
\begin{enumerate}
|
||||||
\item Kein Mitglied
|
\item Kein Mitglied
|
||||||
@@ -150,7 +148,7 @@ Diese Prozesse sehen wie folgt aus:
|
|||||||
Ist ein Nutzer kein Mitglied, so muss er zunächst einen Account erstellen.
|
Ist ein Nutzer kein Mitglied, so muss er zunächst einen Account erstellen.
|
||||||
Anfangs wählt dieser Nutzer \enquote{Ich bin kein Mitglied} auf der Registrierungsseite aus.
|
Anfangs wählt dieser Nutzer \enquote{Ich bin kein Mitglied} auf der Registrierungsseite aus.
|
||||||
Daraufhin navigiert der Browser zu einem Registrierungs-Formular.
|
Daraufhin navigiert der Browser zu einem Registrierungs-Formular.
|
||||||
Hierfür muss eine Email-Adresse und ein Passwort vergeben und den Nutzungsbestimmungen zugestimmt werden.
|
Hierfür muss eine Email-Adresse, ein Passwort vergeben und den Nutzungsbestimmungen zugestimmt werden.
|
||||||
Im Anschluss erhält der Nutzer eine Bestätigungsemail mit einem Aktivierungslink.
|
Im Anschluss erhält der Nutzer eine Bestätigungsemail mit einem Aktivierungslink.
|
||||||
Wird dieser Link geöffnet, wird der Account freigeschalten und ein Login-Feld erscheint.
|
Wird dieser Link geöffnet, wird der Account freigeschalten und ein Login-Feld erscheint.
|
||||||
Nach erfolgreichem Login wird der Nutzer mit einem
|
Nach erfolgreichem Login wird der Nutzer mit einem
|
||||||
@@ -158,7 +156,8 @@ Stammdatenformular konfrontiert. Dabei handelt es sich um Angaben zum teilnehmen
|
|||||||
Wird dieses Formular abgeschickt, ist die Teilnehmerregistrierung abgeschlossen.
|
Wird dieses Formular abgeschickt, ist die Teilnehmerregistrierung abgeschlossen.
|
||||||
|
|
||||||
\subsubsection*{Mitglied, mit Konto}
|
\subsubsection*{Mitglied, mit Konto}
|
||||||
Ist ein Nutzer ein Weinland-Mosel-Mitglied und hat bereits ein Mitgliedskonto, muss dieser auf der Registrierungsseite
|
\label{chap:umsetzung-mitglied-mit-konto}
|
||||||
|
Ist ein Nutzer ein \ac{WM}-Mitglied und hat bereits ein Mitgliedskonto, muss dieser auf der Registrierungsseite
|
||||||
\enquote{Ich bin ein Mitglied} auswählen. An dieser Stelle navigiert der Browser zu einem Login-Formular.
|
\enquote{Ich bin ein Mitglied} auswählen. An dieser Stelle navigiert der Browser zu einem Login-Formular.
|
||||||
Hier kann sich das Mitglied anmelden. Tut es dies erfolgreich, erstellt der Controller einen neuen
|
Hier kann sich das Mitglied anmelden. Tut es dies erfolgreich, erstellt der Controller einen neuen
|
||||||
Teilnehmer-Eintrag für den Frontend-Nutzer und fügt den Frontend-Nutzer der Nutzergruppe \enquote{Teilnehmer} hinzu.
|
Teilnehmer-Eintrag für den Frontend-Nutzer und fügt den Frontend-Nutzer der Nutzergruppe \enquote{Teilnehmer} hinzu.
|
||||||
@@ -169,10 +168,13 @@ Ist ein Nutzer ein Mitglied, hat aber kein Mitgliedskonto, muss dieser auf der R
|
|||||||
\enquote{Ich bin ein Mitglied} auswählen. An dieser Stelle navigiert der Browser zu einem Login-Formular.
|
\enquote{Ich bin ein Mitglied} auswählen. An dieser Stelle navigiert der Browser zu einem Login-Formular.
|
||||||
Auf diesem Login-Formular existiert ein Button \enquote{Jetzt registrieren}, sowie ein Hinsweistext dazu.
|
Auf diesem Login-Formular existiert ein Button \enquote{Jetzt registrieren}, sowie ein Hinsweistext dazu.
|
||||||
Da der Nutzer noch keinen Account hat, muss dieser auf \enquote{Jetzt registrieren} klicken.
|
Da der Nutzer noch keinen Account hat, muss dieser auf \enquote{Jetzt registrieren} klicken.
|
||||||
Daraufhin navigiert der Browser zu einem Registrierungsformular, das eine Email-Adresse, ein Passwort
|
Daraufhin navigiert der Browser zu einem Registrierungsformular, das eine Email-Adresse, eine Mitgliedsnummer, ein Passwort
|
||||||
und die Zustimmung zur Datenverarbeitung benötigt. Ist dieses Formular abgeschickt, erhält das Mitglied
|
und die Zustimmung zur Datenverarbeitung benötigt. Ist dieses Formular abgeschickt, erhält das Mitglied
|
||||||
eine Email mit einem Bestätigungslink. Wird dieser Bestätigungslink angeklickt, wird das Mitgliedskonto
|
eine Email mit einem Bestätigungslink. Wird dieser Bestätigungslink angeklickt,
|
||||||
freigegeben und es öffnet sich ein Login-Formular, beschrieben in \enpointy{Mitglied, mit Konto}.
|
öffnet sich ein Login-Formular, beschrieben in \enpointy{\textit{\nameref{chap:umsetzung-mitglied-mit-konto}}}.
|
||||||
|
Da es sich hierbei um einen Mitgliederzugang handelt, muss dieser zunächst von einem
|
||||||
|
\ac{WM}-Mitarbeiter freigegeben werden, bevor ein Login möglich ist.
|
||||||
|
|
||||||
|
|
||||||
\subsubsection*{Umsetzung}
|
\subsubsection*{Umsetzung}
|
||||||
Zunächst wurde ein simples Weichen-Content-Element erstellt.
|
Zunächst wurde ein simples Weichen-Content-Element erstellt.
|
||||||
@@ -181,50 +183,53 @@ Dieses Content-Element hat die Parameter \enquote{question}, \enquote{answ-1-lin
|
|||||||
Der Zweck dieses Content-Elementes ist es, Nutzer basierend auf einer ausformulierten Frage auf eine
|
Der Zweck dieses Content-Elementes ist es, Nutzer basierend auf einer ausformulierten Frage auf eine
|
||||||
von zwei Seiten weiterzuleiten. Anschließend wurden Registrierungen über Femanager-Plugin-Content-Elemente
|
von zwei Seiten weiterzuleiten. Anschließend wurden Registrierungen über Femanager-Plugin-Content-Elemente
|
||||||
realisiert.
|
realisiert.
|
||||||
Anpassungen der versendeten Emails erfolgen durch Überschreiben der Email-Templates von Femanager.
|
Anpassungen der versendeten Emails erfolgen durch Überschreiben der Email-Templates von \enquote{femanager}.
|
||||||
Weiterleitungen zu bestimmten Seiten, nachdem ein Nutzer spezielle Events ausgelöst hat, können über TypoScript
|
Weiterleitungen zu bestimmten Seiten, nachdem ein Nutzer spezielle Events ausgelöst hat, können über TypoScript
|
||||||
konfiguriert werden \cite{bib:typo3-docs-femanager}. Logins werden über das TYPO3-Native Loginformular
|
konfiguriert werden \cite{bib:typo3-docs-femanager}. Logins werden über das TYPO3-native Loginformular
|
||||||
gelöst. Im TYPO3-Loginformular können Weiterleitungen zu spezialisierten Seiten im Backend-UI festgelegt werden.
|
gelöst. Im TYPO3-Loginformular können Weiterleitungen zu spezialisierten Seiten im Backend-UI festgelegt werden
|
||||||
\cite{bib:typo3-docs-felogin}.
|
\break\cite{bib:typo3-docs-felogin}.
|
||||||
Für alle funktionalen Belange wird ein TYPO3-Plugin registriert. Dieses Plugin verfügt über einen
|
Für alle funktionalen Belange wird ein TYPO3-Pluginobjekt registriert. Dieses Pluginobjekt verfügt über einen
|
||||||
ActionController, der Nutzeranfragen an PHP-Funktionen (\enquote{Actions})
|
ActionController, der Nutzeranfragen an PHP-Funktionen (\enquote{Actions})
|
||||||
bindet.
|
bindet.
|
||||||
In diesen Actions werden Fehlerbehandlungen durchgeführt, Datenmodelle der Domäne erstellt und in der
|
In diesen Actions werden Fehlerbehandlungen durchgeführt, Datenmodelle der Domäne erstellt und in der
|
||||||
Datenbank persistiert, sowie Daten für die Anzeige im Frontend aufbereitet \cite{bib:typo3-docs-extbase}.
|
Datenbank persistiert sowie Daten für die Anzeige im Frontend der Webseite aufbereitet
|
||||||
Neue Datenobjekte werden in Repositories registriert \cite{bib:typo3-docs-extdev-tut-tea-repositories}. Diese Repositories sind Aggregate des Controllers,
|
\break\cite{bib:typo3-docs-extbase}.
|
||||||
|
Neue Datenobjekte werden in Repository-Objekten registriert
|
||||||
|
\cite{bib:typo3-docs-extdev-tut-tea-repositories}. Diese Repositories sind Aggregate des Controllers,
|
||||||
werden jedoch nach dem \enquote{Inversion of Control}-Prinzip via Dependency Injection instanziiert und
|
werden jedoch nach dem \enquote{Inversion of Control}-Prinzip via Dependency Injection instanziiert und
|
||||||
der ActionController-Klasse über Methode übergeben \cite{bib:typo3-docs-di}.
|
\break{}ActionController-Objekten über öffentliche Methoden übergeben
|
||||||
|
\break\cite{bib:typo3-docs-di}.
|
||||||
Als problematisch erweisen sich hierbei bidirektionale Verbindungen zwischen Datenmodellen, wenn die Foreign Keys
|
Als problematisch erweisen sich hierbei bidirektionale Verbindungen zwischen Datenmodellen, wenn die Foreign Keys
|
||||||
über das SQL-Schlüsselwort \enquote{AUTO\_INCREMENT} in der Datenbank generiert werden.
|
über das SQL-Schlüsselwort
|
||||||
Beispielsweise, muss ein MasterRecord, der Betriebsinformationen speichert, bidirektional an ein Teilnehmerobjekt
|
\enquote{AUTO\_INCREMENT} in der Datenbank generiert werden.
|
||||||
|
Beispielsweise muss ein Masterrecord, der Betriebsinformationen speichert, bidirektional an ein Teilnehmerobjekt
|
||||||
gebunden werden. Hierzu wird jedem der Elemente jeweils der Foreign Key des anderen übergeben.
|
gebunden werden. Hierzu wird jedem der Elemente jeweils der Foreign Key des anderen übergeben.
|
||||||
Als Foreign Keys werden hierfür die jeweiligen \acp{UID} herangezogen, da diese Werte durch
|
Als Foreign Keys werden hierfür die jeweiligen \acp{UID} herangezogen, da diese Werte durch
|
||||||
\enquote{AUTO\_INCREMENT} auf der Datenbankebene erzeugt werden und garantiert einzigartig je Datenbanktabelle sind
|
\enquote{AUTO\_INCREMENT} auf der Datenbankebene erzeugt werden und garantiert einzigartig je Datenbanktabelle sind
|
||||||
\cite{bib:w3schools-auto-increment}.
|
\cite{bib:w3schools-auto-increment}.
|
||||||
Es gilt also, dass ein MasterRecord $a$ die Teilnehmer\ac{UID} von einem Teilnehmer $b$ hält und dass
|
Es gilt also, dass ein Masterrecord $a$ die Teilnehmer\ac{UID} von einem Teilnehmer $b$ hält und dass
|
||||||
$b$ die MasterRecord\ac{UID} von $a$ hält.
|
$b$ die Masterrecord\ac{UID} von $a$ hält.
|
||||||
Die Problematik hierbei ist, dass diese \acp{UID} erst nach dem Persistieren in der Datenbank bekannt sind,
|
Die Problematik hierbei ist, dass diese \acp{UID} erst nach dem Persistieren in der Datenbank bekannt sind,
|
||||||
da diese Werte erst im Zuge der Persistierung erstellt werden \cite{bib:w3schools-auto-increment}.
|
da diese Werte erst im Zuge der Persistierung erstellt werden \cite{bib:w3schools-auto-increment}.
|
||||||
Die Lösung hierfür ist, beide Elemente zu erstellen und zu persistieren, erst danach ihre \acp{UID} gegenseitig
|
Die Lösung hierfür ist, beide Elemente zu erstellen und zu persistieren und erst danach ihre \acp{UID} gegenseitig
|
||||||
bekannt machen um sie danach erneut zu persistieren.
|
bekannt zu machen um sie anschließend erneut zu persistieren.
|
||||||
|
|
||||||
\subsection{Weinregistrierung}
|
\subsection{Weinregistrierung}
|
||||||
Ein Basismerkmal des Jahresauswahlprobenwerkzeuges ist die Möglichkeit, Weine zu Jahresauswahlproben
|
Ein Basismerkmal des Jahresauswahlprobenwerkzeuges ist die Möglichkeit, Weine zu Jahresauswahlproben
|
||||||
anzumelden. Dieser Schritt übersetzt unter anderem die verbleibenden Formfelder des
|
anzumelden. Dieser Schritt übersetzt unter anderem die verbleibenden Formfelder des
|
||||||
ursprünglichen Anmeldeformulares, anbei in \fullref{chap:anhang-anmeldeformular} in den digitalen Workflow.
|
ursprünglichen Anmeldeformulares, anbei in \fullref{chap:anhang-anmeldeformular}, in den digitalen Workflow.
|
||||||
Für die Weinanmeldung spielt die Mitgliedsschaft eines Teilnehmers keine Rolle. Es wird lediglich ein
|
Für die Weinanmeldung spielt die Mitgliedsschaft eines Teilnehmers keine Rolle. Es wird lediglich ein
|
||||||
Frontend-Nutzer der Nutzergruppe \enquote{Teilnehmer} benötigt. Dieser Nutzer hat, wenn angemeldet,
|
Frontend-Nutzer der Nutzergruppe \enquote{Teilnehmer} erfordert. Dieser Nutzer hat, wenn angemeldet,
|
||||||
Zugriff auf eine Auflistung aller zeitlich freigegebenen Jahresauswahlproben.
|
Zugriff auf eine Auflistung aller zeitlich freigegebenen Jahresauswahlproben.
|
||||||
Soweit der Registrierungszeitraum dieser Jahresauswahlprobe den aktuellen Zeitpunkt miteinschließt,
|
Soweit der Registrierungszeitraum dieser Jahresauswahlprobe den aktuellen Zeitpunkt miteinschließt,
|
||||||
wird eine \enquote{Jetzt Wein anmelden}-Schaltfläche angeboten.
|
wird eine \enquote{Jetzt Wein anmelden}-Schaltfläche angeboten.
|
||||||
Dadurch, dass Anmeldeformulare elektronisch und automatisiert verarbeitet werden, sinkt der Aufwand,
|
Dadurch, dass Anmeldeformulare elektronisch und automatisiert verarbeitet werden, sinkt der Aufwand,
|
||||||
der seitens \ac{WM} für Anmeldungen gestemmt werden muss. Das ist so, da diese Formular nun nicht mehr von
|
der seitens \ac{WM} für Anmeldungen geleistet werden muss. Das ist so, da diese Formulare nun nicht mehr von
|
||||||
Mitarbeitern bearbeitet werden müssen. Davon profitiert \ac{WM}, da diese Zeit nun anderweitig genutzt werden kann.
|
Mitarbeitern bearbeitet werden müssen. Davon profitiert \ac{WM}, da diese Zeit nun für andere Aufgaben genutzt werden kann.
|
||||||
|
|
||||||
\begin{nicepic}
|
\begin{nicepic}
|
||||||
\includegraphics[width=0.9\textwidth]{images/ux-flow-teilnahme.png}
|
\includegraphics[width=0.9\textwidth]{images/ux-flow-teilnahme.png}
|
||||||
\captionof{figure}{UX-Flow: Weinanmeldung}
|
\captionof{figure}{UX-Flow: Weinanmeldung, Quelle: Eigene Darstellung}
|
||||||
\caption*{Quelle: Eigene Darstellung}
|
|
||||||
\label{fig:uxflow-weinanmeldung}
|
\label{fig:uxflow-weinanmeldung}
|
||||||
\end{nicepic}
|
\end{nicepic}
|
||||||
|
|
||||||
@@ -235,8 +240,8 @@ auf der betroffenen Webseite (in diesem Beispiel der Weinanmeldungsseite) durchg
|
|||||||
Das Verstecken der zugehörigen
|
Das Verstecken der zugehörigen
|
||||||
Schaltfläche im Frontend dient lediglich der User-Experience und stellt keine Sicherheitsvorkehrung dar.
|
Schaltfläche im Frontend dient lediglich der User-Experience und stellt keine Sicherheitsvorkehrung dar.
|
||||||
Das ist essenziell, da eine URL, auch wenn für sie keine Schaltfläche existiert, dennoch aufgerufen werden kann.
|
Das ist essenziell, da eine URL, auch wenn für sie keine Schaltfläche existiert, dennoch aufgerufen werden kann.
|
||||||
Da Jahresauswahlprobennummern (\acp{UID}) fortlaufend sind, ist es trivial URLs für Weinanmeldungen
|
Da Jahresauswahlprobennummern, also \acp{UID}, fortlaufend sind, ist es trivial URLs für Weinanmeldungen
|
||||||
beliebiger Jahresauswahlproben herzuleiten. Insofern ist es von großer Wichtigkeit sicherzustellen,
|
beliebiger Jahresauswahlproben herzuleiten. Insofern ist es von großer Wichtigkeit, sicherzustellen,
|
||||||
dass der Server solche Anfragen grundsätzlich selbst prüft und gegebenenfalls verneint.
|
dass der Server solche Anfragen grundsätzlich selbst prüft und gegebenenfalls verneint.
|
||||||
|
|
||||||
\subsubsection*{Das Formular}
|
\subsubsection*{Das Formular}
|
||||||
@@ -245,146 +250,158 @@ werden Formulare und Formfelder mit den entsprechenden Fluid-Form-ViewHelpern au
|
|||||||
Diese ViewHelper repräsentieren und erstellen gleichnamige HTML-Tags und fügen diesen spezielle
|
Diese ViewHelper repräsentieren und erstellen gleichnamige HTML-Tags und fügen diesen spezielle
|
||||||
Attribute zur Identifizierung in Submit-Aufrufen hinzu \cite{bib:typo3-docs-fluid-form-viewhelpers}.
|
Attribute zur Identifizierung in Submit-Aufrufen hinzu \cite{bib:typo3-docs-fluid-form-viewhelpers}.
|
||||||
Grundsätzlich entstehen hierbei drei Kategorien von Werten, die es im Formular abzubilden gilt:
|
Grundsätzlich entstehen hierbei drei Kategorien von Werten, die es im Formular abzubilden gilt:
|
||||||
|
\\
|
||||||
\paragraph*{Inputfelder} sind triviale Formfelder, die nicht durch andere Datensätze beschränkt werden.
|
\\
|
||||||
|
\textbf{Inputfelder} sind triviale Formfelder, die nicht durch andere Datensätze beschränkt werden.
|
||||||
Beispiele für Inputfelder sind: Weinbeschreibung, Jahrgang und Alkoholgehalt.
|
Beispiele für Inputfelder sind: Weinbeschreibung, Jahrgang und Alkoholgehalt.
|
||||||
Inputfelder wurden mit simplen Input-Tags umgesetzt und erhielten nach Bedarf \textit{required} und
|
Inputfelder werden mit simplen Input-Tags umgesetzt und erhalten nach Bedarf \textit{required} und
|
||||||
\textit{pattern}-Attribute. Diese Attribute beschreiben jeweils, ob ein Formfeld ein Pflichtfeld ist und
|
\textit{pattern}-Attribute. Diese Attribute beschreiben jeweils, ob ein Formfeld ein Pflichtfeld ist und
|
||||||
mit welcher Regular Expression der Formfeldinhalt abzugleichen ist \cite{bib:w3schools-input}.
|
mit welcher Regular Expression der Formfeldinhalt abzugleichen ist \cite{bib:w3schools-input}.
|
||||||
Die Formfeldwerte können unverändert in der Datenbank persistiert werden.
|
Die Formfeldwerte können unverändert in der Datenbank persistiert werden.
|
||||||
|
\\
|
||||||
\paragraph*{SelectSingle} sind Formfelder, die dem Nutzer eine Auswahl aus $n$ Elementen aus
|
\\
|
||||||
|
\textbf{SelectSingle} sind Formfelder, die dem Nutzer eine Auswahl aus $n$ Elementen aus
|
||||||
anderen Datenbanktabellen geben. Der Nutzer muss sich für genau ein Element entscheiden.
|
anderen Datenbanktabellen geben. Der Nutzer muss sich für genau ein Element entscheiden.
|
||||||
Beispiele für SelectSingle-Formfelder sind: Weinlage, Qualitätsstufe, Rebsorte und Geschmacksangabe.
|
Beispiele für SelectSingle-Formfelder sind: Weinlage, Qualitätsstufe, Rebsorte und Geschmacksangabe.
|
||||||
SelectSingle-Formfelder werden durch Select-HTML-Tags abgebildet. Der TYPO3-Form-ViewHelper für
|
\break{}SelectSingle-Formfelder werden durch Select-HTML-Tags abgebildet.
|
||||||
|
\break{}Der TYPO3-Form-ViewHelper für
|
||||||
\enquote{Select} akzeptiert eine Liste an Auswahlmöglichkeiten und erstellt selbstständig Option-HTML-Tags
|
\enquote{Select} akzeptiert eine Liste an Auswahlmöglichkeiten und erstellt selbstständig Option-HTML-Tags
|
||||||
für diese.
|
für diese.
|
||||||
Die Formfeldwerte von SelectSingle-Formfeldern sind die
|
Die Formfeldwerte von SelectSingle-Formfeldern sind die
|
||||||
\acp{UID} des jeweils ausgewähltem Elementes \cite{bib:typo3-docs-fluid-form-viewhelpers}.
|
\acp{UID} des jeweils ausgewählten Elementes \cite{bib:typo3-docs-fluid-form-viewhelpers}.
|
||||||
\\
|
\clearpage
|
||||||
\\
|
|
||||||
Aufgrund dessen, dass das Weinlagen-Drop-Down-Menü über 170 Einträge führt, wurde eine Suchmöglichkeit implementiert. Diese ist lediglich ein Textfeld, das bei jeder Eingabe allen Option-Tags der Weinlage,
|
Aufgrund dessen, dass das Weinlagen-Dropdown-Menü über 170 Einträge führt, wird eine Suchmöglichkeit implementiert.
|
||||||
deren Anzeigewert nicht der Suche entspricht, das Stilattribut \enquote{display: none;} auferlegt.
|
Diese ist lediglich ein Textfeld, das bei jeder Eingabe allen Option-Tags der Weinlage,
|
||||||
|
deren Anzeigewert nicht dem Suchwert entspricht, das Stilattribut \enquote{display: none;} auferlegt.
|
||||||
Somit sind diese nicht mehr sichtbar.
|
Somit sind diese nicht mehr sichtbar.
|
||||||
\\
|
\\
|
||||||
\\
|
\\
|
||||||
Eine komplexe Ausnahme stellt das SelectSingle-Formfeld \enquote{Category} dar, da TYPO3-Kategorien
|
Eine komplexe Ausnahme stellt das SelectSingle-Formfeld \enquote{Category} dar, da TYPO3-Kategorien
|
||||||
Baumstrukturen sind \cite{bib:typo3-docs-sys-category}.
|
als Baumstrukturen abgebildet werden
|
||||||
Um die Eltern-Kind-Beziehung der Baumstruktur erstichtlich zu machen, werden die Option-HTML-Tags einzeln rekursiv gerendert. Zunächst werden sämtliche Kategorien, deren
|
\break\cite{bib:typo3-docs-sys-category}.
|
||||||
|
Um die Eltern-Kind-Beziehungen der
|
||||||
|
\break{}Baumstruktur ersichtlich zu machen, werden die Option-HTML-Tags rekursiv gerendert. Zunächst werden sämtliche Kategorien, deren
|
||||||
\ac{PID} 0 ist, dargestellt. Diese Elemente sind direkte Kinder des unsichtbaren Wurzelelementes. Für jede dieser Kategorien $a$ wird nun ein
|
\ac{PID} 0 ist, dargestellt. Diese Elemente sind direkte Kinder des unsichtbaren Wurzelelementes. Für jede dieser Kategorien $a$ wird nun ein
|
||||||
Fluid-Partial aufgerufen,
|
Fluid-Partial aufgerufen,
|
||||||
das alle Kategorien $b$ darstellt, für die gilt: $b.pid = a.uid$. Diese Darstellung erfolgt durch einen erneuten rekursiven Aufruf dieses Partials.
|
das alle Kategorien $b$ darstellt, für die gilt: $b.pid = a.uid$. Diese Darstellung erfolgt durch einen erneuten rekursiven Aufruf dieses Partials.
|
||||||
In jeder Darstellung wird der Kategoriename, geprefixt mit
|
In jeder Darstellung wird der Kategoriename, geprefixt mit
|
||||||
$n$ Leerzeichen, dargestellt, mit $n = Rekursionstiefe$. Somit entsteht ein Drop-Down-Menü, das
|
$n$ Leerzeichen, dargestellt, mit $n = Rekursionstiefe$. Somit entsteht ein Dropdown-Menü, das
|
||||||
alle Kategorien in einer eindimensionalen Liste darstellt. Diese Liste ist nach einer Preorder-Traversierung
|
alle Kategorien in einer eindimensionalen Liste darstellt. Diese Liste ist nach einer preorder-Traversierung
|
||||||
des Kategoriebaumes sortiert und desto tiefer ein Element im Baum ist, desto weiter ist es eingerückt.
|
des Kategoriebaumes sortiert und desto tiefer ein Element im Baum ist, desto weiter ist es eingerückt.
|
||||||
Damit sieht das Drop-Down-Menü aus wie eine Baumstruktur.
|
Damit sieht das Dropdown-Menü aus wie eine Baumstruktur.
|
||||||
\\
|
\\
|
||||||
\\
|
\\
|
||||||
Diese Herangehensweise erzeugt schlüssigen und lesbaren Programmcode und lässt sich unkompliziert umsetzen.
|
Diese Herangehensweise erzeugt schlüssigen, lesbaren Programmcode und lässt sich unkompliziert umsetzen.
|
||||||
Das senkt Entwicklungskosten und erhöht den Profit des Endkunden, da hierdurch weniger Zeit aufgewandt wird.
|
Das senkt Entwicklungskosten, wovon \ac{WM} profitiert.
|
||||||
Rekursiv aufgerufene For-Schleifen, die sich selbst erneut für alle Elemente aufrufen,
|
Rekursiv aufgerufene For-Schleifen, die sich selbst erneut für alle Elemente aufrufen,
|
||||||
können zu einem Performanzproblem führen \cite{bib:schwarzer-vorlesung-alg}.
|
können zu Performanzproblemen führen \cite{bib:schwarzer-vorlesung-alg}.
|
||||||
Daher wird im Folgenden die Zeitkomplexität dieser Rekursionsfunktion betrachtet.
|
Daher wird im Folgenden die Zeitkomplexität dieser Rekursionsfunktion betrachtet.
|
||||||
Für diese Funktion kann kein Master-Theorem angewandt werden,
|
Für diese Funktion kann kein Master-Theorem angewandt werden,
|
||||||
da es sich hierbei nicht um einen Divide-and-Conquer-Algorithmus handelt.
|
da es sich hierbei nicht um einen \enquote{Divide-and-Conquer-Algorithmus} handelt.
|
||||||
Das ist so, da das in der Rekursion weitergereichte Problem nicht kleiner wird,
|
Das ist so, da das in der Rekursion weitergereichte Problem nicht kleiner wird,
|
||||||
sondern gleich groß bleibt.
|
sondern gleich groß bleibt. Demnach ist $b = 1$.
|
||||||
Das verletzt die Bedingung $b>1$ des Master-Theorems, definiert als $T(n) = a*T(\frac{n}{b})+f(n)$
|
Das verletzt die Bedingung $b>1$ des Master-Theorems, definiert als $T(n) = a*T(\frac{n}{b})+f(n)$
|
||||||
\cite{bib:schwarzer-vorlesung-alg}.
|
\cite{bib:schwarzer-vorlesung-alg}.
|
||||||
Der Algortihmus besteht aus $m, m \in \mathbb{N}$ verschachtelten For-Schleifen
|
Der Algorithmus besteht aus $m \in \mathbb{N}$ verschachtelten For-Schleifen
|
||||||
gleicher Länge.
|
gleicher Länge.
|
||||||
Somit ist die Zeitkomplexität $O(n^m)$. Normiert dargestellt beträgt die Zeitkomplexität $O(n^2)$. Das lässt sich experimentell bestätigen.
|
Somit ist die Zeitkomplexität $O(n^m)$. Normiert dargestellt beträgt die Zeitkomplexität $O(n^2)$. Das lässt sich experimentell bestätigen.
|
||||||
|
|
||||||
\begin{nicepic}
|
\begin{nicepic}
|
||||||
\includegraphics[width=0.70\textwidth]{images/timecomplexity-category.png}
|
\includegraphics[width=0.70\textwidth]{images/timecomplexity-category.png}
|
||||||
\captionof{figure}{Stichprobenartige Laufzeitanalyse des\\Kategorie-Renderers, gegenüber einer\\ quadratischen Kurve}
|
\captionof{figure}{Stichprobenartige Laufzeitanalyse des\\Kategorie-Renderers, gegenüber einer\\ quadratischen Kurve, Quelle: Eigene Darstellung}
|
||||||
\caption*{Quelle: Eigene Darstellung}
|
|
||||||
\label{fig:timecomplexity-category}
|
\label{fig:timecomplexity-category}
|
||||||
\end{nicepic}
|
\end{nicepic}
|
||||||
|
|
||||||
|
Auf Optgroup-HTML-Tags wird bewusst verzichtetet.
|
||||||
Auf Optgroup-HTML-Tags wurde bewusst verzichtetet.
|
Grund dafür ist, dass Optgroup-Elemente an sich nicht im Dropdown-Menü auswählbar sind.
|
||||||
Grund dafür ist, dass Optgroup-Elemente an sich nicht im Dropdown auswählbar sind.
|
|
||||||
Das stellt ein Problem dar, da beispielsweise die Kategorie \enquote{Riesling},
|
Das stellt ein Problem dar, da beispielsweise die Kategorie \enquote{Riesling},
|
||||||
die die Unterkategorien \enquote{Trockener Riesling} und \enquote{Halbtrockener Riesling} beinhalten könnte,
|
die die Unterkategorien \enquote{Trockener Riesling} und \enquote{Halbtrockener Riesling} beinhalten könnte,
|
||||||
auch direkt auswählbar sein sollte. Zudem besitzen Kategorie-Elemente kein Attribut das auf die Präsenz
|
auch direkt auswählbar sein sollte. Zudem besitzen Kategorie-Elemente kein Attribut das auf die Präsenz
|
||||||
von Unterkategorien hindeutet \cite{bib:typo3-docs-sys-category}, womit eine Unterscheidung zwischen
|
von Unterkategorien hindeutet \cite{bib:typo3-docs-sys-category}, womit eine Unterscheidung zwischen
|
||||||
Baumblättern und -Zweigen nicht ohne weiteres möglich wäre. Diese Entscheidung wäre jedoch
|
Baumblättern und -zweigen nicht ohne weiteres möglich wäre. Diese Entscheidung wäre jedoch
|
||||||
benötigt, um zwischen einem Optgroup-Tag und einem Option-Tag abzuwägen.
|
benötigt, um zwischen einem Optgroup-Tag und einem Option-Tag abzuwägen.
|
||||||
|
\clearpage
|
||||||
|
|
||||||
\paragraph*{SelectMultiple} sind Formfelder, die dem Nutzer eine Auswahl aus $n$ Elementen aus einer anderen
|
\textbf{SelectMultiple} sind Formfelder, die dem Nutzer eine Auswahl aus $n$ verschiedenen Elementen aus einer anderen
|
||||||
Datenbanktabelle geben. Der Nutzer kann sich für eine beliebige Anzahl dieser, eingeschlossen null, entscheiden.
|
Datenbanktabelle geben. Der Nutzer kann sich für eine beliebige Auswahl dieser, eingeschlossen keinen, entscheiden.
|
||||||
Ein Beispiel für SelectMultiple-Formfelder ist: Weineigenschaften.
|
Ein Beispiel für SelectMultiple-Formfelder sind Weineigenschaften.
|
||||||
TYPO3-Fluid implementiert hierfür keinen ViewHelper \cite{bib:typo3-docs-fluid-form-viewhelpers},
|
TYPO3-Fluid implementiert hierfür keinen ViewHelper
|
||||||
also wurde eine eigene Lösung entworfen: Der Nutzer soll aus einer Menge $A$ wählen.
|
\cite{bib:typo3-docs-fluid-form-viewhelpers},
|
||||||
|
also wird eine eigene Lösung entworfen: Der Nutzer soll aus einer Menge $A$ wählen.
|
||||||
Für alle Elemente $a \in A$
|
Für alle Elemente $a \in A$
|
||||||
wird ein Checkbox-Feld erstellt. Dieses Element trägt den Anzeigewert \enquote{<a.title>} und den
|
wird ein Checkbox-Feld erstellt. Dieses Element trägt den Anzeigewert \enquote{<a.title>},
|
||||||
Wert \enquote{<formfeldname>-true}.
|
den ID- und Namenswert \enquote{<formfeldname>-<a.uid>} und den
|
||||||
Ist also eine dieser Checkboxen angehakt, hat sie den zuvor genannten Wert. Falls nicht, trägt sie keinen Wert.
|
Formularwert \enquote{<formfeldname>-true}.
|
||||||
Weil alle angehakten Checkboxen dieses Formfeldes den selben Wert tragen, ist es PHP-Seitig trivial
|
Ist also eine dieser Checkboxen angehakt, hat sie den zuvor genannten Formularwert. Falls nicht, trägt sie keinen Formularwert.
|
||||||
eine Liste aller angehakten Checkbox-Ids dieses Formfeldes aus der Liste aller Formfeldparameter zu extrahieren.
|
Weil alle angehakten Checkboxen dieses Formfeldes den selben Namenswert tragen, ist es phpseitig trivial
|
||||||
|
eine Liste aller angehakten Checkbox-Namen dieses Formfeldes aus der Liste aller Formfeldparameter zu extrahieren.
|
||||||
Hierfür wird die eingebaute PHP-Funktion \enquote{array\_keys} verwendet. Diese Funktion gibt alle
|
Hierfür wird die eingebaute PHP-Funktion \enquote{array\_keys} verwendet. Diese Funktion gibt alle
|
||||||
Keys eines Arrays in Form eines numerisch indizierten Arrays zurück.
|
Keys eines Arrays in Form eines numerisch indizierten Arrays zurück.
|
||||||
Der optionale Parameter \enquote{filter\_values} bestimmt, dass ausschließlich die Keys
|
Der optionale Parameter \enquote{filter\_values} bestimmt, dass ausschließlich die Keys
|
||||||
der Key-Value-Pairs, die einen bestimmten
|
der Key-Value-Pairs, die einen bestimmten
|
||||||
Wert tragen, extrahiert werden \cite{bib:php-array-keys}. D.h., der Funktionsaufruf filtert alle Keys und somit alle
|
Wert (der Formwert) tragen, extrahiert werden \cite{bib:php-array-keys}. D.h., der Funktionsaufruf filtert alle Keys und somit alle
|
||||||
Formfeld-IDs des Formfeldparameter-Arrays heraus, die den Wert \enquote{<formfeldname>-true} haben. Das ist eine Liste
|
Formfeld-IDs des Formfeldparameter-Arrays heraus, die den Wert \enquote{<formfeldname>-true} haben. Das ist eine Liste
|
||||||
aller Formfeld-IDs der Checkboxen des SelectMultiples, die angehakt wurden.
|
aller Formfeld-Namen der Checkboxen des SelectMultiples, die angehakt wurden.
|
||||||
Mit der eingebauten PHP-Funktion \enquote{array\_map} wird nun eine Operation auf alle Schlüssel
|
Mit der eingebauten PHP-Funktion \enquote{array\_map} wird nun eine Operation auf alle Werte
|
||||||
der Liste angewandt, die \enquote{strlen('formfeldname-')} Zeichen, von links ausgehend, von der Formfeld-ID
|
der Liste angewandt, die
|
||||||
entfernt. Somit wird beispielsweise die Formfeld-ID \enquote{winekind-18} zu \enquote{18} transformiert. Übrig bleiben die \acp{UID} aller angehakten Elemente $a$, in Form einer Zeichenkente.
|
\break\enquote{strlen('<formfeldname>-')} Zeichen, von links ausgehend, vom Formfeld-Name
|
||||||
|
entfernt. Somit wird beispielsweise der Formfeld-Name \enquote{winekind-18} zu \enquote{18} transformiert.
|
||||||
|
Übrig bleiben die extrahierten \acp{UID} aller angehakten Elemente $a$, in Form einer Zeichenkette.
|
||||||
Über die eingebaute PHP-Funktion \enquote{intval} ist es trivial diese zu Zahlen zu übersetzen,
|
Über die eingebaute PHP-Funktion \enquote{intval} ist es trivial diese zu Zahlen zu übersetzen,
|
||||||
wodurch die tatsächlichen Objekte aus der Datenbank angefragt werden können.
|
wodurch die tatsächlichen Objekte aus der Datenbank angefragt werden können.
|
||||||
|
\\
|
||||||
|
\\
|
||||||
\subsection{PDF- und QR-Code-Generierung}
|
\subsection{PDF- und QR-Code-Generierung}
|
||||||
Das dynamische Erstellen und Ausgeben des Versandbeilageblattes als PDF ist ein essenzieller Bestandteil des
|
Das dynamische Erstellen und Ausgeben des Datenblattes als PDF ist ein essenzieller Bestandteil des
|
||||||
Jahresauswahlprobenwerkzeuges, da dieses PDF die Schnittstelle zwischen ankommenden Weinen und dem System darstellt.
|
Jahresauswahlprobenwerkzeuges, da dieses PDF die Schnittstelle zwischen ankommenden Weinen und dem System darstellt.
|
||||||
Daher ist der Profit, der durch dieses Werkzeug generiert wird, ohne dieses PDF stark eingeschränkt, da
|
Daher ist der Gewinn, der durch dieses Werkzeug generiert wird, ohne dieses Dokument stark eingeschränkt, da
|
||||||
einkommende Weine händisch, von Mitarbeitern, zugeordnet werden müssten.
|
einkommende Weine händisch, von Mitarbeitern, zugeordnet werden müssten.
|
||||||
Wie im \fullref{chap:stand-der-forschung} erläutert, werden für die dynamische
|
Wie im \fullref{chap:stand-der-forschung} erläutert wird, werden für die dynamische
|
||||||
Generierung dieses PDFs die Bibliotheken \enquote{chillerlan/php-qrcode} und
|
Generierung dieses PDFs die Bibliotheken \enquote{chillerlan/php-qrcode} und
|
||||||
\enquote{mpdf/mpdf} herangezogen und über Composer installiert.
|
\enquote{mpdf/mpdf} herangezogen und über Composer installiert.
|
||||||
|
|
||||||
\subsubsection{QR-Code-Generierung}
|
\subsubsection{QR-Code-Generierung}
|
||||||
Der QR-Code beinhaltet lediglich die Wein-\ac{UID} anstatt einer vollständigen URL. Hintergrund dessen ist, dass
|
Der QR-Code beinhaltet lediglich die Wein-\ac{UID} anstatt einer vollständigen URL. Hintergrund ist, dass
|
||||||
die URL, die benötigt ist, um einen Wein einzuscannen, bis auf die Wein-\ac{UID} immer identisch ist.
|
die benötigte URL, um einen Wein einzuscannen, bis auf die Wein-\ac{UID} immer identisch ist.
|
||||||
Somit wird redundanz vermieden.
|
Somit wird Redundanz vermieden.
|
||||||
Es ist Aufgabe der QR-Code-App, die den Code einscannt, aus der Wein-\ac{UID} eine vollständige URL herzuleiten.
|
Es ist Aufgabe der QR-Code-App, die den Code einscannt, aus der Wein-\ac{UID} eine vollständige URL herzuleiten.
|
||||||
Um Resourcen zu sparen und somit den Profit zu erhöhen, wird der QR-Code zu einem Base64-kodiertem Bild gerendert.
|
Um effizient zu arbeiten, wird der QR-Code zu einem base64-kodierten Bild gerendert.
|
||||||
Das ist der Standardrückgabewert des QR-Code-Generators
|
Das ist der Standardrückgabewert des QR-Code-\break{}Generators
|
||||||
und erfordert somit keine nähere Konfiguration. Ebenfalls lässt sich ein Base64-kodiertes Bild als Quellurl eines
|
und erfordert somit keine nähere Konfiguration. Ebenfalls lässt sich ein base64-kodiertes Bild als Quell-URL eines
|
||||||
IMG-HTML-Tags angeben, womit das Bild eingebettet ist. Hier wird der Profit erhöht, indem Arbeitszeit gespart wird,
|
IMG-HTML-Tags angeben, womit das Bild eingebettet ist. Das spart Arbeitszeit,
|
||||||
die sonst in das anderweitige Einbetten eines Bildes in einem PDF mit \enquote{mpdf} fließen müsste.
|
die sonst in das anderweitige Einbetten eines Bildes in einem PDF mit \enquote{mpdf} fließen müsste.
|
||||||
Die QR-Codegenerierung funktioniert konkret, indem ein neues QRCode-Objekt der QRCode-Klasse erstellt wird.
|
Die QR-Codegenerierung funktioniert konkret, indem ein neues QRCode-Objekt der QRCode-Klasse erstellt wird.
|
||||||
Diese Klasse nimmt ein QROptions-Objekt im Konstruktor, das in diesem Falle einige Stilattribute mit sich trägt.
|
Diese Klasse nimmt ein QROptions-Objekt im Konstruktor, das in diesem Falle einige Stilattribute mit sich trägt.
|
||||||
Das QRCode-Objekt bietet nun eine Methode \enquote{render} an, die, sofern nicht anders konfiguriert, den QR-Code als
|
Das QRCode-Objekt bietet nun eine Methode \enquote{render} an, die sofern nicht anders konfiguriert, den QR-Code als
|
||||||
Base64-kodiertes Bild zurückgibt \cite{bib:chillerlan-php-qrcode}.
|
base64-kodiertes Bild zurückgibt \cite{bib:chillerlan-php-qrcode}.
|
||||||
|
|
||||||
\subsubsection{PDF-Generierung}
|
\subsubsection{PDF-Generierung}
|
||||||
Firmenintern ist es Standard das Aussehen sowie die Inhalte der PDF-Dokumente, die \enquote{mpdf} erzeugt, mit HTML zu definieren,
|
Firmenintern ist es Standard, das Aussehen sowie die Inhalte der PDF-Dokumente, die mit \enquote{mpdf} erzeugt werden,
|
||||||
|
mit HTML zu definieren,
|
||||||
das an \enquote{mpdf} gereicht wird. Um die Gestaltung und die Präsentation von Variablen in der HTML-Zeichenfolge technisch
|
das an \enquote{mpdf} gereicht wird. Um die Gestaltung und die Präsentation von Variablen in der HTML-Zeichenfolge technisch
|
||||||
kontinuierlich mit dem restlichen Projekt zu halten und um eine gute Wartbarkeit zu gewährleisten,
|
kontinuierlich mit dem restlichen Projekt zu halten und um eine gute Wartbarkeit zu gewährleisten,
|
||||||
wird diese HTML-Zeichenfolge mit TYPO3-Fluid getemplated. Das heißt, dass eine HTML-Templatedatei bereitgestellt wird,
|
wird diese HTML-Zeichenfolge mit TYPO3-Fluid getemplated. Das heißt, dass eine HTML-Templatedatei bereitgestellt wird,
|
||||||
diese mit TYPO3-Fluid befüllt wird und in PHP gerendert wird, um eine HTML-Zeichenkette als Ergebnis zu erhalten.
|
diese mit TYPO3-Fluid befüllt und in PHP gerendert wird, um eine HTML-Zeichenkette als Ergebnis zu erhalten.
|
||||||
Hierfür wird ein TYPO3-StandaloneView des instanziiert, mit einem Pfad zur Template-Datei ausgestattet, Variablen angegeben,
|
Hierfür wird ein TYPO3-StandaloneView instanziiert, mit einem Pfad zur Template-Datei konfiguriert, Variablen angegeben,
|
||||||
die in Fluid verfügbar sein sollen und anschließend über die \enquote{render}-Methode zu einem String gerendert
|
die in Fluid verfügbar sein sollen und anschließend über die \enquote{render}-Methode zu einer Zeichenkette gerendert
|
||||||
\cite{bib:typo3-ref-standalone-view}.
|
\cite{bib:typo3-ref-standalone-view}.
|
||||||
Anschließend wird ein \enquote{mpdf}-Objekt erstellt und mit einer rudimentären Konfiguration in Form eines Arrays im Konstruktor
|
Anschließend wird ein \enquote{mpdf}-Objekt erstellt und mit einer rudimentären Konfiguration in Form eines Arrays im Konstruktor
|
||||||
konfiguriert. Diese Konfiguration definiert in diesem Falle Seitenabstände, Papierformat, Zeichenkodierung und Schriftarten.
|
konfiguriert. Diese Konfiguration definiert in diesem Falle Seitenabstände, Papierformat, Zeichenkodierung und Schriftarten.
|
||||||
Abschließend wird dem \enquote{mpdf}-Objekt das zuvor generierte HTML übergeben und über die Methode \enquote{OutputBinaryData}
|
Abschließend wird dem \enquote{mpdf}-Objekt das zuvor generierte HTML übergeben, über die Methode \enquote{OutputBinaryData}
|
||||||
als Bytes zurückgegeben und in einer Variable gespeichert \cite{bib:mpdf-ref}.
|
in Form von Bytes zurückgegeben und in einer Variable gespeichert \cite{bib:mpdf-ref}.
|
||||||
Um dieses PDF-Dokument über die Verbindung an den Nutzer zu übertragen, wird ein TYPO3-Response-Objekt erstellt.
|
Um dieses PDF-Dokument über die Verbindung an den Nutzer zu übertragen, wird ein TYPO3-Response-Objekt erstellt.
|
||||||
Über dieses Response-Objekt werden einige Header gesetzt und direkt übertragen. Dieser Header sind Content-Type und Content-Length.
|
Über dieses Response-Objekt werden einige Header gesetzt und direkt übertragen. Diese Header sind Content-Type und Content-Length.
|
||||||
Abschließend werden als Response-Body die Bytes des generierten PDFs abgeschickt. Damit ist die Verbindung beendet und das
|
Abschließend werden als Response-Body die Bytes des generierten PDFs übertragen. Damit ist die Verbindung beendet und das
|
||||||
PDF zum Nutzer übertragen.
|
PDF zum Nutzer übertragen.
|
||||||
|
\clearpage
|
||||||
|
|
||||||
\subsection{Jahresauswahlproben- und Wein-Detailansichten}
|
\subsection{Jahresauswahlproben- und Wein-Detailansichten}
|
||||||
Weine und Jahresauswahlproben sollen unter bestimmten Gegebenheiten einsichtig sein.
|
Weine und Jahresauswahlproben sollen unter bestimmten Gegebenheiten einsehbar sein.
|
||||||
Hierzu gibt es eine Auflistung aller Jahresauswahlproben. Diese sind anklickbar, um eine Detailansicht der ausgewählten
|
Hierzu gibt es eine Auflistung aller Jahresauswahlproben. Diese sind anklickbar, um eine Detailansicht der ausgewählten
|
||||||
Jahresauswahlprobe zu öffnen. Hier wird neben Metadaten der Jahresauswahlprobe eine Liste aller zur Einsicht berechtiger Weine
|
Jahresauswahlprobe zu öffnen. Hier wird neben Metadaten der Jahresauswahlprobe auch eine Liste aller zur Einsicht berechtigen Weine
|
||||||
angezeigt. Diese Weine sind anklickbar, um auf eine Detailansicht der Weine zu gelangen.
|
angezeigt. Diese Weine sind anklickbar, um auf eine Detailansicht der Weine zu gelangen.
|
||||||
Die Detailansichten für Jahresauswahlproben und Weine benötigen spezieller Autorisierung.
|
Die Detailansichten für Jahresauswahlproben und Weine benötigen spezielle Autorisierung.
|
||||||
Diese sind: Jahresauswahlproben sind nur einsichtig, wenn sich das aktuelle Datum innerhalb des
|
Diese sind: Jahresauswahlproben sind nur einsichtig, wenn sich das aktuelle Datum innerhalb des
|
||||||
Sichtbarkeitszeitraumes der Jahresauswahlprobe befindet.
|
Sichtbarkeitszeitraumes der Jahresauswahlprobe befindet.
|
||||||
Detailansichten für Weine sind immer für den zugehörigen Teilnehmer einsichtig.
|
Detailansichten für Weine sind immer für den zugehörigen Teilnehmer einsichtig.
|
||||||
@@ -392,16 +409,17 @@ Nach Abschluss einer Jahresauswahlprobe sind alle ihr angehörigen Weine öffent
|
|||||||
Das hat den Hintergrund, dass Jahresauswahlproben Blindverkostungen sind
|
Das hat den Hintergrund, dass Jahresauswahlproben Blindverkostungen sind
|
||||||
und niemand die Möglichkeit haben sollte, im Voraus Informationen über die teilnehmenden Weine in Erfahrung zu bringen.
|
und niemand die Möglichkeit haben sollte, im Voraus Informationen über die teilnehmenden Weine in Erfahrung zu bringen.
|
||||||
Die Ergebnisse der Jahresauswahlproben sind öffentlich, also sind es die Weine nach Abschluss einer Jahresauswahlprobe auch.
|
Die Ergebnisse der Jahresauswahlproben sind öffentlich, also sind es die Weine nach Abschluss einer Jahresauswahlprobe auch.
|
||||||
Mitarbeiter von Weinland Mosel, wenn mit einem solchen Account angemeldet, haben immer Einsicht in Wein-Detailansichten.
|
Mitarbeiter von \ac{WM}, wenn sie mit einem solchen Account angemeldet sind, haben immer Einsicht in Wein-Detailansichten.
|
||||||
Die Wein-Detailseite verfügt außerdem über einen \enquote{Versandetikett drucken}-Button, der auf das Versand-PDF verlinkt.
|
Die Wein-Detailseite verfügt außerdem über einen \enquote{Datenblatt drucken}-Button, der auf das Datenblatt-PDF verlinkt.
|
||||||
Dieser Button ist nur für den zugehörigen Teilnehmer und Mitarbeiter verfügbar.
|
Dieser Button ist nur für den zugehörigen Teilnehmer und Mitarbeiter verfügbar.
|
||||||
Diese Daten, Fakten und Restriktionen werden serverseitig kontrolliert, um Manipulationen des Nutzers auszuschließen.
|
Diese Daten, Fakten und Restriktionen werden serverseitig kontrolliert, um Manipulationen des Nutzers auszuschließen.
|
||||||
Um das zu realisieren werden Daten mit Fluid-Templates konditionell dargestellt und über Fluid-ViewHelper Links
|
Um das zu realisieren werden Daten mit Fluid-Templates konditionell dargestellt und über Fluid-ViewHelper Links
|
||||||
zu anderen Ansichten generiert. Diese ViewHelper übergeben Parameter. Die hierfür relevanten Parameter der verschiedenen
|
zu anderen Ansichten generiert. Diese ViewHelper übergeben Parameter. Die hierfür relevanten Parameter der verschiedenen
|
||||||
Ansichten sind beispielsweise Wein-\acp{UID} und Jahresauswahlprobe-\acp{UID}. Um Informationen über den angemeldeten Nutzer,
|
Ansichten sind beispielsweise Wein-\acp{UID} und Jahresauswahlproben-\acp{UID}. Um Informationen über den angemeldeten Nutzer,
|
||||||
wie beispielsweise seiner Teilnehmernummer oder seiner Nutzergruppenzugehörigkeit, zu erlangen, wird sich
|
wie beispielsweise seiner Teilnehmernummer oder seiner Nutzergruppenzugehörigkeit, zu erlangen, wird sich
|
||||||
der Extbase-nativej Domain-Model-FrontendUser-Klasse bedient \cite{bib:typo3-ref-extbase-model-feuser}.
|
der Extbase-nativen Domain-Model-FrontendUser-Klasse bedient \cite{bib:typo3-ref-extbase-model-feuser}.
|
||||||
|
Mit Abschluss der Phase der Digitization können alle Datenstrukturen im TYPO3-Backend händisch angelegt,
|
||||||
|
eingesehen, gelöscht, bearbeitet und im Frontend von Nutzern befüllt werden.
|
||||||
|
|
||||||
\section{Digitalization}
|
\section{Digitalization}
|
||||||
In der Phase \textit{Digitalization} werden bestehende Geschäftsprozesse so verändert,
|
In der Phase \textit{Digitalization} werden bestehende Geschäftsprozesse so verändert,
|
||||||
@@ -411,7 +429,7 @@ implementierten Datenmodellen zu arbeiten. Im Folgenden werden die Umsetzungen d
|
|||||||
erforderlichen Geschäftsprozesse beschrieben.
|
erforderlichen Geschäftsprozesse beschrieben.
|
||||||
|
|
||||||
\subsection{Schnittstelle QR-Code-Scanner}
|
\subsection{Schnittstelle QR-Code-Scanner}
|
||||||
Es ist angedacht, dass Mitarbeiter über die App \enquote{QRBot} den QR-Code auf dem Einlieferungsschein einscannen.
|
Es ist angedacht, dass Mitarbeiter über die App \enquote{QRBot} den QR-Code auf dem Datenblatt einscannen.
|
||||||
Diese App ermöglicht es Nutzern für jeden eingescannten Code eine URL zu öffnen und den Wert des QR-Codes anstelle eines Platzhalters
|
Diese App ermöglicht es Nutzern für jeden eingescannten Code eine URL zu öffnen und den Wert des QR-Codes anstelle eines Platzhalters
|
||||||
in der URL einzufügen.
|
in der URL einzufügen.
|
||||||
Hierfür bietet das Jahresauswahlprobenwerkzeug eine Schnittstelle bzw. eine Seite an, die eine Wein-\ac{UID} als
|
Hierfür bietet das Jahresauswahlprobenwerkzeug eine Schnittstelle bzw. eine Seite an, die eine Wein-\ac{UID} als
|
||||||
@@ -422,17 +440,17 @@ Das Nutzerkonto wird von Redakteuren oder Administratoren im TYPO3-Backend erste
|
|||||||
Nach einer Anmeldung bleibt diese Sitzung aktiv und verfällt erst nach längerer Inaktivität.
|
Nach einer Anmeldung bleibt diese Sitzung aktiv und verfällt erst nach längerer Inaktivität.
|
||||||
Wird ein Wein als \enquote{eingegangen} markiert, wird der betroffene Teilnehmer per Email informiert.
|
Wird ein Wein als \enquote{eingegangen} markiert, wird der betroffene Teilnehmer per Email informiert.
|
||||||
Hierzu wird die FluidEmail-Klasse des TYPO3-Cores herangezogen.
|
Hierzu wird die FluidEmail-Klasse des TYPO3-Cores herangezogen.
|
||||||
Sollte ein Wein bereits als \enquote{eingegangen} markiert sein, wird keine Email verschickt und dem Mitarbeiter wird kommuniziert,
|
Sollte ein Wein bereits als \enquote{eingegangen} markiert sein, wird keine Email verschickt und dem Mitarbeiter kommuniziert,
|
||||||
dass keine Änderungen vorgenommen wurden.
|
dass keine Änderungen vorgenommen wurden.
|
||||||
Abschließend werden im Frontend allgemeine Daten über den Wein angezeigt, damit Mitarbeiter sich sicher sein können,
|
Abschließend werden im Frontend allgemeine Daten zum Wein angezeigt, damit sich Mitarbeiter sicher sein können,
|
||||||
den richtigen Wein eingescanned zu haben.
|
den richtigen Wein eingescanned zu haben.
|
||||||
|
|
||||||
\subsection{CSV-Export}
|
\subsection{CSV-Export}
|
||||||
Das letzte Glied des analogen Prozesses, den es zu digitalisieren gilt, ist der Datenexport der Weindaten je Jahresauswahlprobe.
|
Das letzte Glied des analogen Prozesses, den es zu digitalisieren gilt, ist der Datenexport der Weindaten je Jahresauswahlprobe.
|
||||||
TYPO3s ListView bietet einen nativen CSV-Exporter an \cite{bib:pixelant-typo3-data-export},
|
TYPO3s ListView bietet einen nativen CSV-Exporter an \cite{bib:pixelant-typo3-data-export},
|
||||||
jedoch kommt dieser nicht den Anforderungen gerecht, da das CSV-Dokument Daten verschiedener Datenbanktabellen im Verein
|
jedoch wird dieser nicht den Anforderungen gerecht, da das benötigte CSV-Dokument Daten verschiedener Datenbanktabellen im Verein
|
||||||
beinhalten muss.
|
beinhalten muss. Der Native CSV-Exporter gibt jedoch lediglich Inhalte einer Datenbanktabelle aus \cite{bib:pixelant-typo3-data-export}.
|
||||||
Um eine reibungslose Integration in die restlichen Prozesse von Weinland Mosel zu gewährleisten, muss das exportierte CSV
|
Um eine reibungslose Integration in die restlichen Prozesse von \ac{WM} zu gewährleisten, muss das exportierte CSV
|
||||||
das selbe Format haben, wie bisher bestehende Excel-Dateien. Dieses Format ist durch genaue Spaltennamen,
|
das selbe Format haben, wie bisher bestehende Excel-Dateien. Dieses Format ist durch genaue Spaltennamen,
|
||||||
Spalteneihenfolgen und den Arten von Daten, die angefragt werden, definiert.
|
Spalteneihenfolgen und den Arten von Daten, die angefragt werden, definiert.
|
||||||
Um einen benutzerdefinierten Exporter im Backend bereitzustellen, wird ein Backendmodul registriert, das immer im linken
|
Um einen benutzerdefinierten Exporter im Backend bereitzustellen, wird ein Backendmodul registriert, das immer im linken
|
||||||
@@ -448,20 +466,24 @@ Das CSV-Dokument wird über die PHP-native Funktion \enquote{fputcsv} generiert.
|
|||||||
numerisch indizierten Array und schreibt eine darauf basierende CSV-Zeile in eine Datei \cite{bib:php-fputcsv}.
|
numerisch indizierten Array und schreibt eine darauf basierende CSV-Zeile in eine Datei \cite{bib:php-fputcsv}.
|
||||||
Um gut wartbaren PHP-Code zu erzeugen, werden alle CSV-Zeilen in einem zweidimensionalen Array,
|
Um gut wartbaren PHP-Code zu erzeugen, werden alle CSV-Zeilen in einem zweidimensionalen Array,
|
||||||
der das gesamte CSV-Dokument darstellt,
|
der das gesamte CSV-Dokument darstellt,
|
||||||
durch alphanumerisch indizierte, innere Arrays abgebildet. Somit ist bei jeder Wertzuweisung der zugehörige Spaltenname ersichtlich.
|
durch alphanumerisch indizierte, innere Arrays abgebildet. Somit ist bei jeder Wertzuweisung der zugehörige Spaltenname als Array-Key ersichtlich.
|
||||||
Über die nativen PHP-Funktionen \enquote{array\_keys} und \enquote{array\_values} wird dieser zwar gut lesbare,
|
Über die nativen PHP-Funktionen \enquote{array\_keys} und \enquote{array\_values} wird dieser zwar gut lesbare,
|
||||||
aber mit \enquote{fputcsv} inkompatibler
|
aber mit \enquote{fputcsv} inkompatible
|
||||||
Array zu einer Reihe kompatibler Array konvertiert. Hierbei werden durch \enquote{array\_values} die Kopfzeile und durch
|
Array zu einer Reihe kompatibler Array konvertiert. Hierbei werden durch \enquote{array\_keys} die Kopfzeile und durch
|
||||||
\enquote{array\_values} die Datenzeilen extrahiert. Diese Zeilen werden anschließend mit \enquote{fputcsv}
|
\enquote{array\_values} die Datenzeilen extrahiert. Diese Zeilen werden anschließend mit \enquote{fputcsv}
|
||||||
in die Zieldatei geschrieben. Als Zieldatei wird eine temporäre Datei im Arbeitsspeicher angegeben,
|
in die Zieldatei geschrieben. Als Zieldatei wird eine temporäre Datei im Arbeitsspeicher angegeben,
|
||||||
um das fertig erzeugte CSV-Dokument als Zeichenkette in PHP zu erhalten. Das spart vermeidbare Festplattenschreib- und Lesezugriffe.
|
um das fertig erzeugte CSV-Dokument als Zeichenkette in PHP zu erhalten. Das spart vermeidbare Festplattenschreib- und Lesezugriffe.
|
||||||
Im Fluid-Template des Backendmoduls wird das generierte CSV-Dokument in einem nicht beschreibbaren Textarea-Feld präsentiert.
|
Im Fluid-Template des Backendmoduls wird das generierte CSV-Dokument in einem nicht beschreibbaren Textarea-Feld präsentiert.
|
||||||
Um Weinland Mosel weitere Arbeitszeit zu sparen und somit den Profit zu fördern, wird eine Download-Funktion für CSV-Dateien
|
Um \ac{WM} weitere Arbeitszeit zu ersparen, wird eine Download-Funktion für CSV-Dateien
|
||||||
angeboten. Das erspart das manuelle Kopieren und Abspeichern von CSV-Code von IT-Fachfremden, reduziert damit die Anzahl
|
angeboten. Das erspart das manuelle Kopieren und Abspeichern von CSV-Zeichenketten durch IT-Fachfremde, reduziert damit die Anzahl
|
||||||
an benötigten Übergangsschritten in weitere Prozesse und reduziert somit die Komplexität der Umstellung.
|
an benötigten Übergangsschritten in weitere Prozesse und reduziert somit die Komplexität der Umstellung.
|
||||||
Auch im Interesse, Arbeitszeit in der Umsetzung zu sparen,
|
Auch im Interesse, Arbeitszeit in der Umsetzung zu sparen,
|
||||||
wurde diese Downloadfunktion JavaScript-seitig umgesetzt. Dadurch ist der Download in derselben Action implementiert.
|
wird diese Downloadfunktion javascript-seitig umgesetzt.
|
||||||
Somit muss weder abstrahiert werden, noch ein weiterer Exporter gebaut werden.
|
Dadurch ist der Download in derselben Action, die CSV für das Textarea-Feld generiert, implementiert.
|
||||||
|
Somit muss weder abstrahiert werden, noch ein weiterer CSV-Exporter gebaut werden.
|
||||||
Hierfür wird ein EventHandler auf den Download-Button angewandt, der bei Betätigung ein vestecktes
|
Hierfür wird ein EventHandler auf den Download-Button angewandt, der bei Betätigung ein vestecktes
|
||||||
\enquote{a}-Element erstellt, über das \enquote{download}-Attribut den Download-Dateinamen festlegt und als \enquote{href}-Attribut
|
\enquote{a}-Element erstellt, über das HTML-Attribut \enquote{download} des \enquote{a}-Elementes den Download-Dateinamen
|
||||||
eine Blob-Url zuweist. Diese Blob-Url wird über ein Blob-Objekt generiert \cite{bib:tutorialspoint-js-save-text}.
|
festlegt und als \enquote{href}-HTML-Attribut
|
||||||
|
eine Blob-URL zuweist. Diese Blob-URL wird über ein Blob-Objekt generiert.
|
||||||
|
Wird nun der Download-Button gedrückt, wird javascript-seitig eine Datei erzeugt und gespeichert
|
||||||
|
\cite{bib:tutorialspoint-js-save-text}.
|
||||||
|
|||||||
@@ -1,60 +1,61 @@
|
|||||||
\chapter{Stand der Forschung}
|
\chapter{Stand der Forschung}
|
||||||
\label{chap:stand-der-forschung}
|
\label{chap:stand-der-forschung}
|
||||||
Der Stand der Forschung beleuchtet verschiedene Erkenntnisse zur Digitalisierung und zur digitalen Transformation.
|
Der Stand der Forschung beleuchtet verschiedene Entwicklunsmethodiken zur Digitalisierung.
|
||||||
|
|
||||||
\section{Modell nach Parviainen et al.}
|
\section{Modell nach Parviainen et al.}
|
||||||
\quotecite{The importance of digitalization is becoming understood,
|
Parviainen et al. stellten sich die Frage, wie man in der Praxis von Digitalisierung profitieren kann und entwickelten in ihrer Forschungsarbeit
|
||||||
but the question now is how to do it in practice in order to best benefit from it.}
|
einen konzeptionellen Rahmen, um zu verstehen, wie die Digitalisierung in der Praxis umgesetzt werden kann und welche Vorteile sich daraus ergeben.
|
||||||
\cite{bib:Parviainen_Tihinen_Kaariainen_Teppola_2022}.
|
Dieser Rahmen basiert auf dem \ac{PDCA} -Prinzip.
|
||||||
|
|
||||||
Parviainen et al. stellten sich diese Frage und entwickelten in ihrer Forschungsarbeit einen konzeptionellen Rahmen, um zu verstehen, wie die Digitalisierung in der Praxis umgesetzt werden kann und welche Vorteile sich daraus ergeben. Dieser Rahmen basiert auf dem \ac{PDCA} -Prinzip.
|
|
||||||
\\
|
\\
|
||||||
\\
|
\\
|
||||||
Dieses Rahmenwerk sieht anhand des \ac{PDCA}-Prinzips vier Schritte vor:
|
Dieses Rahmenwerk sieht anhand des \ac{PDCA}-Prinzips vier Schritte vor:
|
||||||
|
\\
|
||||||
\paragraph*{Im ersten Schritt} wird definiert, wie weit die Digitalisierung für das Unternehmen gehen kann und welche Position
|
\\
|
||||||
|
\textbf{Im ersten Schritt} wird definiert, wie weit die Digitalisierung für das Unternehmen gehen kann und welche Position
|
||||||
das Unternehmen dabei anstrebt. Dieser Schritt kann in vier Teilschritte unterteilt werden: Ausmaße, Treiber, Szenarien und
|
das Unternehmen dabei anstrebt. Dieser Schritt kann in vier Teilschritte unterteilt werden: Ausmaße, Treiber, Szenarien und
|
||||||
Ziele. Für die Bestimmung der Ausmaße ist die Analyse aktueller Trends und deren Relevanz für die Domäne des Unternehmens
|
Ziele. Für die Bestimmung der Ausmaße ist die Analyse aktueller Trends und deren Relevanz für die Domäne des Unternehmens
|
||||||
wichtig. Ebenfalls ist wichtig, wie weit diese Trends bereits im Fachgebiet verankert sind. Zur Einordnung eignen sich
|
wichtig. Ebenfalls ist wichtig, wie weit diese Trends bereits im Fachgebiet verankert sind. Zur Einordnung eignen sich
|
||||||
\ac{SWOT} -Analysen. Diese Analysen sind die Grundlage, um ein Unternehmen in der Digitalisierung aufzustellen.
|
\ac{SWOT} -Analysen. Diese Analysen sind die Grundlage, um ein Unternehmen in der Digitalisierung aufzustellen.
|
||||||
\\
|
\\
|
||||||
\\
|
\\
|
||||||
Aus den Ergebnissen der Trendanalysen sollten dann Treiber identifiziert werden. Diese Treiber sollten auf der Grundlage zukünftiger Ergebnisse skalierbar sein: Beispielsweise könnten drastische Maßnahmen erforderlich sein, um drastische Auswirkungen zu verhindern oder drastische Verbesserungen zu erreichen.
|
Aus den Ergebnissen der Trendanalysen sollten dann Treiber identifiziert werden. Diese Treiber sollten auf der Grundlage zukünftiger Ergebnisse skalierbar sein: Beispielsweise könnten drastische Maßnahmen erforderlich sein, um schlimme Auswirkungen zu verhindern oder große Verbesserungen zu erreichen.
|
||||||
\\
|
\clearpage
|
||||||
\\
|
|
||||||
Für die relevantesten Treiber sollten Zukunftsszenarien untersucht werden. Dies ist wichtig, um zu wissen, welche Auswirkungen bestimmte Trends in welcher Ausprägung haben werden. Relevant sind hier die Vorteile der Umsetzung des Szenarios, die Kosten der Umsetzung, sowie die Risiken, das Szenario nicht umzusetzen oder doch umzusetzen. Auf dieser Basis kann das beste Szenario ausgewählt werden.
|
Für die relevantesten Treiber sollten Zukunftsszenarien untersucht werden. Dies ist wichtig, um zu wissen,
|
||||||
|
welche Auswirkungen bestimmte Trends in welcher Ausprägung haben würden. Relevant sind hier die Vorteile der Umsetzung des Szenarios,
|
||||||
|
die Kosten der Umsetzung, sowie die Risiken. Auf dieser Basis kann das beste Szenario ausgewählt werden.
|
||||||
\\
|
\\
|
||||||
\\
|
\\
|
||||||
Aus diesem Szenario werden schließlich die Ziele der Digitalisierung abgeleitet. Diese Ziele müssen so formuliert sein, dass sie mit der Ausgangssituation verglichen werden können.
|
Aus diesem Szenario werden schließlich die Ziele der Digitalisierung abgeleitet. Diese Ziele müssen so formuliert sein, dass sie mit der Ausgangssituation verglichen werden können.
|
||||||
|
|
||||||
\begin{nicepic}
|
\begin{nicepic}
|
||||||
\includegraphics[width=1\textwidth]{images/model-digital-transformation.png}
|
\includegraphics[width=1\textwidth]{images/model-digital-transformation.png}
|
||||||
\captionof{figure}{Model for tackling digital transformation}
|
\captionof{figure}{Modell um digitale Transformation in Angriff zunehmen, Quelle: \cite{bib:Parviainen_Tihinen_Kaariainen_Teppola_2022}}
|
||||||
\caption*{Quelle: \cite{bib:Parviainen_Tihinen_Kaariainen_Teppola_2022}}
|
|
||||||
\label{fig:model-digital-transformation}
|
\label{fig:model-digital-transformation}
|
||||||
\end{nicepic}
|
\end{nicepic}
|
||||||
|
|
||||||
\begin{nicepic}
|
\begin{nicepic}
|
||||||
\includegraphics[width=0.5\textwidth]{images/plan-do-check-act.png}
|
\includegraphics[width=0.45\textwidth]{images/plan-do-check-act.png}
|
||||||
\captionof{figure}{\acf*{PDCA}}
|
\captionof{figure}{Das Plan-Do-Check-Act-Modell, Quelle: \cite{bib:abraham2005sustainability}}
|
||||||
\caption*{Quelle: \cite{bib:abraham2005sustainability}}
|
|
||||||
\label{fig:model-digital-transformation}
|
\label{fig:model-digital-transformation}
|
||||||
\end{nicepic}
|
\end{nicepic}
|
||||||
|
|
||||||
\paragraph*{Im zweiten Schritt} wird der Ist-Zustand des Unternehmens ermittelt. Dazu wird die aktuelle
|
\textbf{Im zweiten Schritt} wird der Ist-Zustand des Unternehmens ermittelt. Dazu wird die aktuelle
|
||||||
Positionierung des Unternehmens im Hinblick auf den Zielzustand mit Fokus auf die Digitalisierungsziele betrachtet. Dazu wird
|
Positionierung des Unternehmens im Hinblick auf den Zielzustand mit Fokus auf die Digitalisierungsziele betrachtet. Dazu wird
|
||||||
der Ist-Zustand im Kontext des Soll-Zustandes anhand definierter Fragen bewertet. Die Auswahl der Fragen unterscheidet sich je
|
der Ist-Zustand im Kontext des Soll-Zustandes anhand definierter Fragen bewertet. Die Auswahl der Fragen unterscheidet sich je
|
||||||
nach Art der Ziele. Der gesamte Fragenkatalog kann im Detail der Ausarbeitung von Parviainen et al. entnommen werden.
|
nach Art der Ziele. Der gesamte Fragenkatalog kann im Detail der Ausarbeitung von Parviainen et al. entnommen werden.
|
||||||
|
\\
|
||||||
\paragraph*{Der dritter Schritt} ist die Festlegung der konkreten Schritte, die für den Übergang vom
|
\\
|
||||||
Ist-Zustand zum Soll-Zustand erforderlich sind. Dazu muss zunächst die Lücke zwischen dem Ist- und dem Soll-Zustand
|
\textbf{Im dritten Schritt} werden konkrete Schritte festgelegt, die für den Übergang vom
|
||||||
|
Ist-Zustand in den Soll-Zustand erforderlich sind. Dazu muss zunächst die Lücke zwischen dem Ist- und dem Soll-Zustand
|
||||||
identifiziert werden. Relevant ist dabei der aktuelle Stand der Technik und welche Veränderungen notwendig sind, um den
|
identifiziert werden. Relevant ist dabei der aktuelle Stand der Technik und welche Veränderungen notwendig sind, um den
|
||||||
Zielzustand zu erreichen. Anschließend sollten die konkreten Schritte identifiziert werden, die erforderlich sind, um diese
|
Zielzustand zu erreichen. Anschließend sollten die konkreten Schritte identifiziert werden, die erforderlich sind, um diese
|
||||||
Lücke zu schließen. Wenn zum Beispiel ein Treiber \enquote{interne Effizienz} ist, könnten die Schritte darin bestehen, neue digitale
|
Lücke zu schließen. Wenn zum Beispiel ein Treiber \enquote{interne Effizienz} ist, könnten die Schritte darin bestehen, neue digitale
|
||||||
Werkzeuge zu integrieren. Schließlich werden diese Schritte analysiert und priorisiert. Prädestiniert dafür sind
|
Werkzeuge zu integrieren. Schließlich werden diese Schritte analysiert und priorisiert. Prädestiniert dafür sind
|
||||||
Kosten-Nutzen-Analysen, Analysen der Umsetzbarkeit, des Wartungsaufwands und der Mitarbeiterschulung.
|
Kosten-Nutzen-Analysen, Analysen der Umsetzbarkeit, des Wartungsaufwands und der Mitarbeiterschulung.
|
||||||
|
\clearpage
|
||||||
|
|
||||||
\paragraph*{Der vierte Schritt} befasst sich mit der Umsetzung der in Schritt 3 geplanten Maßnahmen und
|
\textbf{Der vierte Schritt} befasst sich mit der Umsetzung der in Schritt drei geplanten Maßnahmen und
|
||||||
der Bewertung der erzielten Ergebnisse. Diese Bewertung der Ergebnisse sollte z.B. soziokulturelle Barrieren berücksichtigen,
|
der Bewertung der erzielten Ergebnisse. Diese Bewertung der Ergebnisse sollte z.B. soziokulturelle Barrieren berücksichtigen,
|
||||||
die sich aus den Reaktionen bestimmter Stakeholder ergeben, die möglicherweise negativ auf Veränderungen reagieren
|
die sich aus den Reaktionen bestimmter Stakeholder ergeben, die möglicherweise negativ auf Veränderungen reagieren
|
||||||
oder Schwierigkeiten bei der Einführung neuer Technologien haben. Wenn diese Analyse zeigt, dass die Ziele der Digitalisierung
|
oder Schwierigkeiten bei der Einführung neuer Technologien haben. Wenn diese Analyse zeigt, dass die Ziele der Digitalisierung
|
||||||
@@ -65,21 +66,22 @@ werden \cite{bib:Parviainen_Tihinen_Kaariainen_Teppola_2022}.
|
|||||||
Nach Verhoef et al. lässt sich der hier sogenannte \enquote{Prozess der Digitalisierung} in drei Phasen unterteilen.
|
Nach Verhoef et al. lässt sich der hier sogenannte \enquote{Prozess der Digitalisierung} in drei Phasen unterteilen.
|
||||||
Diese drei Phasen sind \textit{Digitization}, \textit{Digitalization} und \textit{Digital Transformation}
|
Diese drei Phasen sind \textit{Digitization}, \textit{Digitalization} und \textit{Digital Transformation}
|
||||||
\cite{bib:verhoef}.
|
\cite{bib:verhoef}.
|
||||||
Die Phase \textit{Digitization} befasst sich mit der Umwandlung analoger Datenstrukturen und Modellen in digitale Datenmodelle,
|
Die Phase \textit{Digitization} befasst sich mit der Umwandlung analoger Datenstrukturen und Modelle in digitale Datenmodelle,
|
||||||
sodass diese digital, in Form von Nullen und Einsen, gespeichert und elektronisch weiterverarbeitet werden können
|
sodass diese digital, in Form von Nullen und Einsen, gespeichert und elektronisch\break weiterverarbeitet werden können
|
||||||
\cite{bib:dougherty, bib:loebbecke}.
|
\cite{bib:dougherty}\break\cite{bib:loebbecke}.
|
||||||
|
\quotecite{Examples concern the use of digital forms in ordering processes, the use of digital surveys, or the use digital applications for internal financial declarations.} \cite[S. 891]{bib:verhoef}.
|
||||||
\textit{Digitalization} beschreibt den Prozess der Veränderung bestehender Geschäftsprozesse, um mit digitalen Werkzeugen
|
\textit{Digitalization} beschreibt den Prozess der Veränderung bestehender Geschäftsprozesse, um mit digitalen Werkzeugen
|
||||||
und Datenmodellen zu arbeiten \cite{bib:fengli}.
|
und Datenmodellen zu arbeiten \cite{bib:fengli}. Beispielsweise der Verwendung von Robotern in der Produktion \cite{bib:verhoef}.
|
||||||
Die letzte Phase, die \textit{Digitale Transformation}, beschreibt eine firmenweite Veränderung, die beispielsweise
|
Die letzte Phase, die \textit{Digitale Transformation}, beschreibt eine firmenweite Veränderung, die beispielsweise
|
||||||
Ergründungen neuer Geschäftsmodelle mit sich bringen könnte \cite{bib:pagani}.
|
Ergründungen neuer Geschäftsmodelle mit sich bringen könnte \cite{bib:pagani}.
|
||||||
|
|
||||||
\section{Abwägung in Bezug auf die Problemstellung}
|
\section{Abwägung in Bezug auf die Problemstellung}
|
||||||
In Bezug auf die hier betrachteten Methoden ist es wichtig zu erwähnen, dass der betrachtete Kontext
|
In Bezug auf die hier betrachteten Methodiken ist es wichtig zu erwähnen, dass der betrachtete Kontext
|
||||||
lediglich die Digitalisierungs \textbf{eines} Geschäftsprozesses behandelt.
|
lediglich die Digitalisierung \textbf{eines} Geschäftsprozesses behandelt.
|
||||||
Diese Ausarbeitung befasst sich nicht
|
Diese Ausarbeitung befasst sich nicht
|
||||||
mit firmenweiten Veränderungen, wie sie von den nahegelegten Modellen abgedeckt ist.
|
mit firmenweiten Veränderungen, wie sie von den nahegelegten Modellen abgedeckt ist.
|
||||||
Daher sind geringfügige Anpassungen der Methoden unabdinglich.
|
Daher sind geringfügige Anpassungen der Methodiken unabdinglich.
|
||||||
Des Weiteren ist Resourcenintensivität ein relevanter Gesichtspunkt dieser Abwägung, da eine solche Digitalisierung
|
Des Weiteren ist Ressourcenintensität ein relevanter Gesichtspunkt dieser Abwägung, da eine solche Digitalisierung
|
||||||
effizient und profitabel sein soll.
|
effizient und profitabel sein soll.
|
||||||
|
|
||||||
\subsection{Parviainen et al.}
|
\subsection{Parviainen et al.}
|
||||||
@@ -96,19 +98,18 @@ Digitalisierung bestimmter
|
|||||||
Geschäftsprozesse befassen. Phase drei befasst sich mit firmenweiten Veränderungen,
|
Geschäftsprozesse befassen. Phase drei befasst sich mit firmenweiten Veränderungen,
|
||||||
die über Geschäftsprozesse hinausgehen \cite{bib:verhoef}.
|
die über Geschäftsprozesse hinausgehen \cite{bib:verhoef}.
|
||||||
Firmenweite Veränderungen befinden sich außerhalb des Rahmens dieser Ausarbeitung.
|
Firmenweite Veränderungen befinden sich außerhalb des Rahmens dieser Ausarbeitung.
|
||||||
Der Autor empfindet das Modell nach Verhoef et al. als agiler und unrestriktiver.
|
Der Autor empfindet das Modell nach Verhoef et al. als agiler, unrestriktiver, weniger overheadlastig und somit effizienter.
|
||||||
|
|
||||||
\subsection{Fazit}
|
\subsection{Fazit}
|
||||||
Aufgrund des kleinen Projektumfanges und der großen Wahrscheinlichkeit, dass sich Anforderungen ändern werden,
|
Aufgrund des kleinen Projektumfanges und der großen Wahrscheinlichkeit, dass sich Anforderungen ändern werden,
|
||||||
fällt die Entscheidung auf das
|
fällt die Entscheidung auf das
|
||||||
minimalistischere Modell nach Verhoef et al.. Grundlage dieser Entscheidung sind Forschungsarbeiten von M. Ayman Al Ahmar,
|
minimalistischere Modell nach Verhoef et al.. Grundlage dieser Entscheidung sind Forschungsarbeiten von M. Ayman Al Ahmar,
|
||||||
die nahelegen, dass Projekte dieser Art idealerweise nach dem \enquote{extreme programming}-Paradigma behandelt werden
|
die nahelegen, dass Projekte dieser Art idealerweise nach \enquote{extreme programming}-Paradigmen behandelt werden
|
||||||
\cite{bib:ayman-al-ahmar}.
|
\cite{bib:ayman-al-ahmar}.
|
||||||
Nachdem Phase drei des Verhoef-Modells ausgeklammert wurde, sieht das zu verfolgende Modell aus wie folgt:
|
Nachdem Phase drei des Verhoef-Modells ausgeklammert wurde, sieht das zu verfolgende Modell aus wie folgt:
|
||||||
|
|
||||||
\begin{nicepic}
|
\begin{nicepic}
|
||||||
\includegraphics[width=0.55\textwidth]{images/umsetzungsdiagramm.png}
|
\includegraphics[width=0.45\textwidth]{images/umsetzungsdiagramm.png}
|
||||||
\captionof{figure}{Umsetzungsplanung}
|
\captionof{figure}{Umsetzungsplanung, Quelle: Eigene Darstellung}
|
||||||
\caption*{Quelle: Eigene Darstellung}
|
|
||||||
\label{fig:umsetzungsplanung}
|
\label{fig:umsetzungsplanung}
|
||||||
\end{nicepic}
|
\end{nicepic}
|
||||||
|
|||||||
@@ -1,138 +1,144 @@
|
|||||||
\chapter{Stand der Technik}
|
\chapter{Stand der Technik}
|
||||||
\label{chap:stand-der-technik}
|
\label{chap:stand-der-technik}
|
||||||
Der Stand der Technik bezieht sich auf bestehende, praktische Umsetzungen der erforderlichen Technologien.
|
Der Stand der Technik bezieht sich auf bestehende, praktische Umsetzungen der erforderlichen Technologien.
|
||||||
Im Wesentlichen gibt es drei Arten von Technologien, die untersucht werden müssen: Die bestehende Website von \ac{WM},
|
Im Wesentlichen gibt es drei Arten von Technologien, die untersucht werden müssen: Die bestehende Webseite von \ac{WM},
|
||||||
Bibliotheken zur Erzeugung von QR-Codes und Bibliotheken zur Erzeugung von PDF-Dateien.
|
Bibliotheken zur Erzeugung von QR-Codes und Bibliotheken zur Erzeugung von PDF-Dateien.
|
||||||
|
|
||||||
\section{Die bestehende Webseite}
|
\section{Die bestehende Webseite}
|
||||||
Als Mitentwickler des Projektes ist dem Autor bekannt, dass die bestehende Webseite ein TYPO3-Redaktionssystem ist. Das Frontend der Webseite wird mit Webpack und Sass übersetzt.
|
Als Mitentwickler des Projektes ist dem Autor bekannt, dass die bestehende Webseite ein TYPO3-Redaktionssystem ist. Das Frontend der Webseite wird mit Webpack und Sass übersetzt.
|
||||||
Webpack ist ein Modulbundler \cite{bib:smashmagazine-webpack} und Sass ein CSS-Präprozessor \cite{bib:w3schools-sass}.
|
Webpack ist ein Modulbundler \cite{bib:smashmagazine-webpack} und Sass ein CSS-Präprozessor
|
||||||
TYPO3 ist ein Redaktionssystem und PHP-Rahmenwerk, das Daten- und Inhaltspflege in einem geschützten Bereich
|
\break\cite{bib:w3schools-sass}.
|
||||||
|
TYPO3 ist ein Redaktionssystem und PHP-\break{}Rahmenwerk, das Daten- und Inhaltspflege in einem geschützten Bereich
|
||||||
ermöglicht.
|
ermöglicht.
|
||||||
Außerdem werden Frontend-, Backend-Nutzer und Berechtigungen gesteuert \cite{bib:typo3-docs-getting-started}.
|
Außerdem steuert TYPO3 Frontend-, Backend-Nutzer und deren Berechtigungen \cite{bib:typo3-docs-getting-started}.
|
||||||
Über die Systemerweiterung
|
Über die Systemerweiterung
|
||||||
\enquote{Extbase} wird eine mächtige Entwicklerschnittstelle bereitstellt,
|
\enquote{Extbase} wird eine mächtige Entwicklerschnittstelle bereitgestellt,
|
||||||
um hochindividualisierte Funktionalitäten zu ermöglichen \cite{bib:typo3-docs-extbase-reference}.
|
um hochindividualisierte Funktionalitäten zu ermöglichen.
|
||||||
|
\\\cite{bib:typo3-docs-extbase-reference}
|
||||||
|
|
||||||
\section{QR-Code-Bibliotheken}
|
\section{QR-Code-Bibliotheken}
|
||||||
Um mit QR-Codes zu arbeiten, ist es unabdinglich, QR-Codes zu erstellen, da dieselben sonst nicht vorhanden sind.
|
Um mit QR-Codes zu arbeiten, ist es unabdinglich, QR-Codes zu erstellen.
|
||||||
Im Folgenden werden einige Implementationen von QR-Code-Generator-Bibliotheken im Detail betrachtet. Es wird sich
|
Im Folgenden werden einige Implementationen von QR-Code-Generator-Bibliotheken im Detail betrachtet. Es wird sich
|
||||||
auf bereits verwendete Programmiersprachen begrenzt.
|
auf bereits vom System verwendete Programmiersprachen begrenzt.
|
||||||
|
|
||||||
\subsection{Javascript-Implementationen}
|
\subsection{JavaScript-Implementationen}
|
||||||
\subsubsection*{Jquery-qrcode}
|
\subsubsection*{jquery-qrcode.js}
|
||||||
\textit{Jquery-qrcode} ist ein Plugin für JQuery um dynamisch QR-Codes auf Browserseite zu generieren.
|
\enquote{jquery-qrcode.js} ist ein Plugin für jQuery, um dynamisch QR-Codes auf Browserseite zu generieren.
|
||||||
Jedoch verweist diese Bibliothek selbst auf ihren desolaten Zustand und empfielt stattdessen \enquote{kjua} zu verwenden
|
Jedoch verweist diese Bibliothek selbst auf ihren desolaten Zustand und empfielt stattdessen \enquote{kjua} zu verwenden
|
||||||
\cite{bib:larsjung-jquery-qrcode}. Somit scheidet jquery-qrcode für nähere Evaluationen aus, da die Software nicht mehr
|
\cite{bib:larsjung-jquery-qrcode}. Somit scheidet \enquote{jquery-qrcode.js} für nähere Evaluationen aus, da die Software nicht mehr
|
||||||
gepflegt wird. \textit{Jquery-qrcode} wurde bis Januar 2023 853 mal von Nutzern mit einem Stern
|
gepflegt wird. \enquote{jquery-qrcode.js} wurde bis Januar 2023 853 mal von Nutzern mit einem Stern
|
||||||
markiert \cite{bib:larsjung-jquery-qrcode}.
|
markiert \cite{bib:larsjung-jquery-qrcode}.
|
||||||
Wenn ein Nutzer ein Github-Repository mit einem Stern markiert, zeigt sich der Nutzer interessiert genug,
|
Wenn ein Nutzer ein Github-Repository mit einem Stern markiert, zeigt sich der Nutzer interessiert genug,
|
||||||
um über Neuigkeiten auf dem Laufenden gehalten werden zu wollen \cite{bib:github-stars}. Jquery-qrcode ist MIT-lizensiert
|
um über Neuigkeiten auf dem Laufenden gehalten werden zu wollen \cite{bib:github-stars}. \enquote{jquery-qrcode.js} ist MIT-lizensiert
|
||||||
\cite{bib:larsjung-jquery-qrcode}.
|
\cite{bib:larsjung-jquery-qrcode}.
|
||||||
|
|
||||||
\subsubsection*{Kjua}
|
\subsubsection*{kjua}
|
||||||
\textit{Kjua} ist eine Javascript-Bibliothek, um dynamisch QR-Codes auf der Browserebene zu generieren.
|
\enquote{kjua} ist eine JavaScript-Bibliothek, die dynamisch QR-Codes auf Browserebene generiert.
|
||||||
Im Gegensatz zu \textit{jquery-qrcode} funktioniert Kjua auch ohne JQuery. Es werden diverse Stilattribute für gestaltete
|
Im Gegensatz zu \enquote{jquery-qrcode.js} funktioniert \textit{kjua} auch ohne jQuery. Es werden diverse Stilattribute für gestaltete
|
||||||
QR-Codes unterstützt \cite{bib:larsjung-kjua}. Kjua kann QR-Codes über HTML-Canvas, Bilder und Vektorgrafiken umsetzen. Das ist bei näherer Betrachtung der Kjua Tech Demo \enpointy{https://larsjung.de/kjua/latest/demo} ersichtlich, jedoch
|
QR-Codes unterstützt \cite{bib:larsjung-kjua}. \enquote{kjua} kann QR-Codes über HTML-Canvas, Bilder und Vektorgrafiken umsetzen.
|
||||||
nicht explizit erwähnt. Nach dem aktuellen Stand (Januar 2023) wurde Kjua von 243 Nutzern mit einem Stern markiert.
|
Das ist bei näherer Betrachtung der Kjua-Tech-Demo \enpointy{https://larsjung.de/kjua/latest/demo} ersichtlich, jedoch
|
||||||
Kjuas letzte Codeänderung liegt circa zwei Jahre zurück. Es gibt eine unbeantwortete, sieben Jahre alte Pull-Request und
|
nicht explizit erwähnt. Nach dem aktuellen Stand (Januar 2023) wurde \enquote{kjua} von 243 Nutzern mit einem Stern markiert.
|
||||||
Issues scheinen ignoriert zu werden. Kjua ist MIT-lizensiert \cite{bib:larsjung-kjua}.
|
\enquote{Kjuas} letzte Codeänderung liegt circa zwei Jahre zurück. Es gibt eine unbeantwortete, sieben Jahre alte Pull-Request und
|
||||||
|
Issues scheinen ignoriert zu werden. \enquote{kjua} ist MIT-lizensiert \cite{bib:larsjung-kjua}.
|
||||||
|
|
||||||
\subsubsection*{Soldair/node-qrcode}
|
\subsubsection*{soldair/node-qrcode}
|
||||||
\textit{Soldair/node-qrcode} ist eine node.js-basierte Implementation eines QR-Code-Generators und bietet somit Funktionialität
|
\enquote{soldair/node-qrcode} ist eine Node.js-basierte Implementation eines QR-Code-Generators und bietet somit Funktionialität
|
||||||
serverseitig, als CLI, sowohl auch Browserseitig an. Die Readme-Datei zeugt von Länge, ist reich an Beispielen
|
serverseitig, als Kommandozeilenwerkzeug, sowohl auch browserseitig an. Die Readme-Datei ist umfangreich, reich an Beispielen
|
||||||
und detailreichen Erklärungen. Der letzte Commit ist zu diesem Zeitpunkt knapp älter als ein halbes Jahr. Somit macht das
|
und detailreichen Erklärungen. Der letzte Commit ist zu diesem Zeitpunkt knapp älter als ein halbes Jahr. Somit macht das
|
||||||
Projekt einen moderat gepflegten Eindruck. Die Readme-Datei verweist auf Unit Tests bei Travis, jedoch lief die letzte Pipeline
|
Projekt einen moderat gepflegten Eindruck. Die Readme-Datei verweist auf Unit-Tests bei Travis, jedoch lief die letzte Pipeline
|
||||||
vor circa zwei Jahren, Februar 2021, durch und schlug fehl. Einige Pull-Requests und Issues werden seit Jahren ignoriert
|
Februar 2021 durch und schlug fehl. Einige Pull-Requests und Issues werden seit Jahren ignoriert
|
||||||
\cite{bib:soldair-node-qrcode}.
|
\cite{bib:soldair-node-qrcode}.
|
||||||
Die Bibliothek wurde 74 millionen mal heruntergeladen und mit 6308 Sternen markiert.
|
Die Bibliothek wurde 74 Millionen mal heruntergeladen und mit 6.308 Sternen markiert.
|
||||||
Soldair/node-qrcode ist MIT-lizensiert \cite{bib:npmjs-soldair-node-qrcode}.
|
\enquote{Soldair/node-qrcode} ist MIT-lizensiert \cite{bib:npmjs-soldair-node-qrcode}.
|
||||||
|
|
||||||
\subsection{PHP-Implementationen}
|
\subsection{PHP-Implementationen}
|
||||||
\subsubsection*{Chillerlan/php-qrcode}
|
\subsubsection*{chillerlan/php-qrcode}
|
||||||
Eine arrivierte Lösung für QR-Code-Generierung in PHP ist \textit{chillerlan/php-qrcode}, umgesetzt durch
|
Eine arrivierte Lösung für QR-Code-Generierung in PHP ist \break\enquote{chillerlan/php-qrcode}, umgesetzt durch
|
||||||
Eugen Rochko et al.. \textit{Chillerlan/php-qrcode}s Etabliertheit zeigt sich durch den zu diesem
|
Eugen Rochko et al.. \break\enquote{chillerlan/php-qrcode}s Etabliertheit zeigt sich durch den zu diesem
|
||||||
Zeitpunkt (Jahnuar 2023) auf 5 Millionen stehenden Downloadzähler,
|
Zeitpunkt (Januar 2023) auf 5 Millionen stehenden Downloadzähler,
|
||||||
mehreren Entwickler und den letzten Commit, der zu diesem Zeitpunk nicht älter als einen Monat ist.
|
mehreren Entwicklern und dem letzten Commit, der zu diesem Zeitpunk nicht älter als einen Monat ist.
|
||||||
Insgesamt erfolgten bis dato 808 Commits von 6 Entwicklern. Das Projekt verfügt über Unit-Tests,
|
Insgesamt erfolgten bis dato 808 Commits von 6 Entwicklern. Das Projekt verfügt über Unit-Tests,
|
||||||
die 90\% der Zeilen der Codebase abdecken. Rochko übernahm Teile der Codebase aus
|
die 90\% der Zeilen der Codebase abdecken. Rochko übernahm Teile der Codebase aus
|
||||||
dem Java-Projekt \enquote{ZXing} und übersetzte diese zu PHP.
|
dem Java-Projekt \enquote{ZXing} und übersetzte diese zu PHP.
|
||||||
Es gibt zu diesem Zeitpunkt keine unbeantworteten Issues oder Pull-Requests.
|
Es gibt zu diesem Zeitpunkt keine unbeantworteten Issues oder Pull-Requests.
|
||||||
\textit{Chillerlan/php-qrcode} basiert auf einer angepassten Version von \textit{kazuhikoarase/qrcode-generator}.
|
\enquote{chillerlan/php-qrcode} basiert auf einer angepassten Version von \enquote{kazuhikoarase/qrcode-generator}.
|
||||||
Einzig auffällig sind die Commitnachrichten, die zuteils nur aus einem (1) Emoji bestehen.
|
Einzig auffällig sind die Commitnachrichten, die zuteils nur aus einem Emoji bestehen.
|
||||||
\textit{Chillerlan/php-qrcode} wurde von 1212 Github-Nutzern mit einem Stern markiert. Die Bibliothek ist MIT-lizensiert
|
\enquote{chillerlan/php-qrcode} wurde von 1.212 Github-Nutzern mit einem Stern markiert.
|
||||||
|
Die Bibliothek ist MIT-lizensiert
|
||||||
\cite{bib:chillerlan-php-qrcode}.
|
\cite{bib:chillerlan-php-qrcode}.
|
||||||
|
|
||||||
\subsubsection*{Kreativekorp/barcode}
|
\subsubsection*{kreativekorp/barcode}
|
||||||
\textit{kreativekorp/barcode} ist eine PHP-Bibliothek zur Generierung von QR-Codes, bereitgestellt von
|
\enquote{kreativekorp/barcode} ist eine PHP-Bibliothek zur Generierung von QR-Codes, bereitgestellt von
|
||||||
\textit{Kreative Software}, R.G. Bettencourt.
|
\enquote{Kreative Software}, R.G. Bettencourt.
|
||||||
Diese Implementation umfasst etablierte Barcode-Formaten und unterstützt eine Vielzahl an Anpassungsmöglichkeiten.
|
Diese Implementation umfasst etablierte Barcode-Formate und unterstützt eine Vielzahl an Anpassungsmöglichkeiten.
|
||||||
Das Projekt wurde bis zum heutigen Tage 189 mal mit einem Stern markiert \cite{bib:kreativkorp-barcode}.
|
Das Projekt wurde bis zum heutigen Tag 189 mal mit Sternen markiert \cite{bib:kreativkorp-barcode}.
|
||||||
Vier von den sechs vorhandenen Commits erfolgten innerhalb von zwei Tagen in 2016. Ein weiterer
|
Vier von den sechs vorhandenen Commits erfolgten innerhalb von zwei Tagen in 2016. Ein weiterer
|
||||||
Commit erfolte wenige Tage später. Der aktuellste Commit wurde knapp zwei Jahre später, 2018, veröffentlicht.
|
Commit erfolte wenige Tage später. Der aktuellste Commit wurde knapp zwei Jahre später, 2018, veröffentlicht.
|
||||||
Das liegt zu diesem Zeitpunkt vier Jahre in der Vergangenheit.
|
Das liegt zu diesem Zeitpunkt vier Jahre in der Vergangenheit.
|
||||||
Damit ist diese Bibliothek de-facto sechseinhalb Jahre alt und wurde seitdem einmal um Featuers erweitert.
|
Damit ist diese Bibliothek de facto sechseinhalb Jahre alt und wurde seitdem einmal um Featuers erweitert.
|
||||||
Issues und Pull-Requests werden weitestgehend ignoriert.
|
Issues und Pull-Requests werden weitestgehend ignoriert.
|
||||||
Die Bibliothek verwendet die MIT-Lizenz
|
Die Bibliothek verwendet die MIT-Lizenz.
|
||||||
\cite{bib:kreativkorp-barcode}.
|
\\\cite{bib:kreativkorp-barcode}.
|
||||||
|
|
||||||
\subsubsection*{Bacon/BaconQrCode}
|
\subsubsection*{Bacon/BaconQrCode}
|
||||||
\textit{Bacon/BaconQrCode} ist eine PHP-Bibliothek zur Generierung von QR-Codes, bereitgestellt von Ben Scholzen, hinter
|
\enquote{Bacon/BaconQrCode} ist eine PHP-Bibliothek zur Generierung von QR-Codes, bereitgestellt von Ben Scholzen, hinter
|
||||||
der Github-Organisation \enquote{Bacon}, dessen einziges Mitglied Scholzen darstellt. Verlinkt ist eine Homepage,
|
der Github-\break{}Organisation \enquote{Bacon}, dessen einziges Mitglied Scholzen darstellt. Verlinkt ist eine Homepage,
|
||||||
die zu einer Nginx-\enquote{Hello World}-Seite führt. Begleitet wird \textit{BaconQrCode} von etlichen weiteren \enquote{Bacon-Projekten}
|
die zu einer Nginx-\enquote{Hello World}-Seite führt. Begleitet wird \enquote{BaconQrCode} von etlichen weiteren \enquote{Bacon-Projekten}
|
||||||
wie Beispielsweise \textit{BaconPdf}, \textit{BaconStringUtils} und \textit{BaconUser} um nur einige zu nennen.
|
wie Beispielsweise \enquote{BaconPdf}, \enquote{BaconStringUtils} und \enquote{BaconUser} um nur einige zu nennen.
|
||||||
Insgesamt machen die stichprobenartig betrachteten Projekte einen desolaten Eindruck mit zuteils aktuellesten Commits
|
Insgesamt machen die stichprobenartig betrachteten Projekte einen desolaten Eindruck mit zuteils aktuellesten Commits
|
||||||
von vor zehn Jahren. BaconQrCode stellt das beliebteste und gepflegteste Projekt von Scholzen mit 1508 Sterne-Markierungen und
|
von vor zehn Jahren. \enquote{BaconQrCode} stellt das beliebteste und gepflegteste Projekt von Scholzen mit 1.508 Sterne-Markierungen und
|
||||||
einem aktuellsten Commit von vor zwei Monaten dar. BaconQrCode fällt mit siebzehn Entwicklern auf, die jeweils zumindest
|
einem aktuellsten Commit von vor zwei Monaten dar. \enquote{BaconQrCode} fällt mit siebzehn Entwicklern auf, die jeweils zumindest
|
||||||
einen Commit beigetragen haben. Zu diesem Zeitpunkt fanden 177 Commits statt. Githubs DependencyGraph verzeichnet
|
einen Commit beigetragen haben. Zu diesem Zeitpunkt fanden 177 Commits statt. Githubs DependencyGraph verzeichnet
|
||||||
nahezu 80.000 Projekte, die BaconQrCode verwenden \cite{bib:bacon-baconqrcode} und Packagist meldet 50 Millionen Downloads
|
nahezu 80.000 Projekte, die BaconQrCode verwenden \cite{bib:bacon-baconqrcode} und Packagist meldet 50 Millionen Downloads
|
||||||
Wie \textit{chillerlan/php-qrcode} baut auch Scholzen auf existierende Technik von \enquote{ZXing} auf.
|
\cite{bib:packagist-baconqrcode}.
|
||||||
\cite{bib:packagist-baconqrcode}. Eine Dokumentation neben der Readme-Datei existiert nicht und
|
Wie \enquote{chillerlan/php-qrcode} baut auch Scholzen auf existierende Technik von \enquote{ZXing} auf.
|
||||||
diese ist sehr minimalistisch. \textit{BaconQrCode} kann QR-Codes als Rasterbilder und Vektorgrafiken (SVG und EPS) generieren.
|
Eine Dokumentation neben der Readme-Datei existiert nicht und
|
||||||
|
diese ist sehr minimalistisch. \enquote{BaconQrCode} kann QR-Codes als Rasterbilder und Vektorgrafiken (SVG und EPS) generieren.
|
||||||
Spezielle Styles sind nicht erwähnt. Ein Großteil der Issues und Pull-Requests wurden behandelt.
|
Spezielle Styles sind nicht erwähnt. Ein Großteil der Issues und Pull-Requests wurden behandelt.
|
||||||
BaconQrCode unterliegt einer BSD-2-Clause-Lizenz
|
\enquote{BaconQrCode} unterliegt einer BSD-2-Clause-Lizenz
|
||||||
\cite{bib:bacon-baconqrcode}.
|
\cite{bib:bacon-baconqrcode}.
|
||||||
|
|
||||||
\subsection{Subjektiver Vergleich im Bezug auf die Problemstellung}
|
\subsection{Subjektiver Vergleich im Bezug auf die Problemstellung}
|
||||||
Im Folgenden werden subjektive Einschätzungen und Meinungen des Autors über die Eignung der beleuchteten
|
Im Folgenden werden subjektive Einschätzungen und Meinungen des Autors über die Eignung der beleuchteten
|
||||||
Bibliotheken vorgestellt.
|
Bibliotheken vorgestellt.
|
||||||
Um eine Bibliothek als \enquote{am geeignetsten} für einen Anwendungsfall zu kurieren,
|
Um eine Bibliothek als \enquote{am geeignetsten} für einen Anwendungsfall unter den betrachtenen Bibliotheken zu kurieren,
|
||||||
müssen die konkreten Anforderungen und Constraints für diesen Anwendungsfall beachtet werden.
|
müssen die konkreten Anforderungen für diesen Anwendungsfall beachtet werden.
|
||||||
Das ist so, da verschiedene Eigenschaften der Bibliotheken verschiedene Auswirkung in Gewichtung und Richtung
|
Das ist so, da verschiedene Eigenschaften der Bibliotheken verschiedene Auswirkungen in Gewichtung und Richtung
|
||||||
je nach Anwendungsfall aufweisen.
|
je nach Anwendungsfall aufweisen.
|
||||||
Hierfür werden die zuvor vorgestellten Bibliotheken zur Erstellung von QR-Codes in den folgenden Attributen gegenübergestellt:
|
Hierfür werden die zuvor vorgestellten Bibliotheken zur Erstellung von QR-Codes in den folgenden Attributen gegenübergestellt:
|
||||||
\begin{description}
|
\begin{description}
|
||||||
\item [Funktionialität] \hfill \\
|
\item [Funktionialität] \hfill \\
|
||||||
Der Umfang, der für diese Problemstellung relevanten Funktionen in Annahme dessen, dass die Bibliothek
|
Der Umfang, der unterstützten Funktionen, in Annahme dessen, dass die Bibliothek
|
||||||
syntaktisch und pragmatisch korrekt \cite{bib:heinemann-vorlesung-re} ist.
|
syntaktisch und semantisch korrekt ist.
|
||||||
|
|
||||||
\item [Gepflegtheit] \hfill \\
|
\item [Gepflegtheit] \hfill \\
|
||||||
Das Ausmaß, in dem das Projekt aktiv gepflegt wird und ordnungsgemäß entwickelt zu sein scheint.
|
Das Ausmaß, in dem das Projekt aktiv gepflegt wird und ordnungsgemäß entwickelt zu sein scheint.
|
||||||
Hierzu zählen beispielsweise: Bearbeitung von Issues, Bearbeitung von Pull-Requests, Präsenz von Tests,
|
Hierzu zählen beispielsweise: Bearbeitung von Issues, Bearbeitung von Pull-Requests, Präsenz von Tests,
|
||||||
Präsenz einer angemessenen Dokumentation, häufige Commits, mehrere Entwickler, Anzahl der
|
Präsenz einer angemessenen Dokumentation, häufige Commits, mehrere Entwickler, Anzahl der
|
||||||
Sterne auf Github (Ausmaß an tieferem, öffentlichem Interesse \cite{bib:github-stars}), sowie der Anzahl der
|
Sterne auf Github, sowie der Anzahl der
|
||||||
Downloads bzw. Installationen, falls verfügbar.
|
Downloads bzw. Installationen, falls verfügbar.
|
||||||
|
|
||||||
\item [Workflow-Eignung] \hfill \\
|
\item [Workflow-Eignung] \hfill \\
|
||||||
Die Eignung einer Bibliothek in existierende Workflows und Constraints übernommen zu werden. Maßgeblich,
|
Die Eignung einer Bibliothek in existierende Workflows und Randbedingungen übernommen zu werden. Maßgeblich ist,
|
||||||
ob und mit wie viel Aufwand eine Bibliothek in das Projekt übernommen werden kann. Ebenfalls ist relevant,
|
ob und mit wie viel Aufwand eine Bibliothek in das Projekt übernommen werden kann.
|
||||||
ob die Lizenz einer Bibliothek eine Verwendung gestattet, bzw. welche Bedingungen gelten.
|
Beispielsweise ist es deutlich aufwändiger eine JavaScript-Bibliothek in einem PHP-Projekt zu verwenden, als eine native PHP-Bibliothek.
|
||||||
|
Ebenfalls ist relevant, ob die Lizenz einer Bibliothek eine Verwendung gestattet, bzw. welche Bedingungen gelten.
|
||||||
\end{description}
|
\end{description}
|
||||||
|
|
||||||
Hierbei werden den verschiedenen Bibliotheken Punkte ($[0,10]$) in den drei zuvor genannten
|
Hierbei werden den verschiedenen Bibliotheken Punkte $[0,10]$ in den drei zuvor genannten
|
||||||
Kategorien vergeben. Nicht ermittelte Werte werden in ihrer Kategorie durch $-$ repräsentiert, wodurch
|
Kategorien vergeben. Nicht ermittelte Werte werden in ihrer Kategorie durch \enquote{$-$} repräsentiert, wodurch
|
||||||
eine weitere Verwendung ausgeschlossen wird.
|
eine weitere Verwendung ausgeschlossen wird.
|
||||||
Die Kumulativpunktzahl ($[0,30]$) einer Bibltiothek beschreibt deren Gesamteignung, nach subjektivem
|
Die Kumulativpunktzahl $[0,30]$ einer Bibltiothek beschreibt deren Gesamteignung, nach subjektivem
|
||||||
Empfinden des Autors.
|
Empfinden des Autors.
|
||||||
|
|
||||||
\subsubsection*{Kjua}
|
\subsubsection*{kjua}
|
||||||
Kjua ist funktional für dieses Projekt gut aufgestellt, da es optisch ansprechende QR-Codes mit Logo unterstützt. Das wird
|
\enquote{kjua} ist funktional für dieses Projekt gut aufgestellt, da es optisch ansprechende QR-Codes mit Logo unterstützt. Das wird
|
||||||
mit acht Punkten in \enquote{Funktionalität} bemessen.
|
mit acht Punkten in \enquote{Funktionalität} bemessen.
|
||||||
Kjua macht andererseits einen eher desolaten Eindruck und lässt somit begründete Zweifel an dessen Zukunftssicherheit zu.
|
\enquote{kjua} macht andererseits einen eher desolaten Eindruck und lässt somit begründete Zweifel an dessen Zukunftssicherheit zu.
|
||||||
Eine knappe Dokumentation ist verfügbar. Für die Dokumentation werden zwei Punkte in \enquote{Gepflegtheit} angerechnet.
|
Eine knappe Dokumentation ist verfügbar. Für die Dokumentation werden zwei Punkte in \enquote{Gepflegtheit} angerechnet.
|
||||||
Kjua ist als Javascript-Bibliothek nur schwer mit den Anforderungen vereinbar,
|
\enquote{kjua} ist als JavaScript-Bibliothek nur schwer mit den Anforderungen vereinbar,
|
||||||
da der QR-Code in einem PDF eingebunden werden soll. Hierfür ist ein serverseitiger PDF-Generator vorgesehen.
|
da der QR-Code in einem PDF eingebunden werden soll. Hierfür ist ein serverseitiger PDF-Generator vorgesehen.
|
||||||
Kjuas Lizenz erlaubt Verwendung in kommerziellen, Closed-Source-Projekten \cite{bib:opensource-license-mit}.
|
\enquote{kjuas} Lizenz erlaubt Verwendung in kommerziellen, Closed-Source-Projekten \cite{bib:opensource-license-mit}.
|
||||||
Die Exklusivität für Nutzung in Webbrowsern schließt eine Einbindung in den Workflow aus.
|
Die Exklusivität für Nutzung in Webbrowsern schließt eine Einbindung in den Workflow aus.
|
||||||
\begin{table}[htbp]
|
\begin{table}[htbp]
|
||||||
\centering
|
\centering
|
||||||
@@ -143,18 +149,18 @@ Die Exklusivität für Nutzung in Webbrowsern schließt eine Einbindung in den W
|
|||||||
8 & 2 & 0 & 10\\
|
8 & 2 & 0 & 10\\
|
||||||
\hline
|
\hline
|
||||||
\end{tabular}
|
\end{tabular}
|
||||||
\caption{Subjektive Evaluation: Kjua}
|
\caption{Subjektive Evaluation zur Eignung als QR-Code-Bibliothek: kjua}
|
||||||
\end{table}
|
\end{table}
|
||||||
|
|
||||||
\subsubsection*{Soldair/node-qrcode}
|
\subsubsection*{soldair/node-qrcode}
|
||||||
Soldairs Lösung sieht dokumentativ und funktional vielversprechend aus.
|
Soldairs Lösung sieht dokumentativ und funktional vielversprechend aus.
|
||||||
Hieraus bilden sich acht Punkte in \enquote{Funktionalität}.
|
Hierdurch bilden sich acht Punkte in \enquote{Funktionalität} ab.
|
||||||
Da diese Bibliothek eine Node.js-Bibliothek ist und Node.js ohne Browser, als Kommandozeilenapplikation, ausgeführt werden
|
Da diese Bibliothek eine Node.js-Bibliothek ist und Node.js ohne Browser, als Kommandozeilenapplikation, ausgeführt werden
|
||||||
kann \cite{bib:nodejs-api-cli}, bietet sich
|
kann \break\cite{bib:nodejs-api-cli}, bietet sich
|
||||||
Soldair/node-qrcode als serverseitige Anwendung an. Die Lizenz spricht nicht gegen eine Verwendung. Dennoch wäre es
|
\enquote{soldair/node-qrcode} als serverseitige Anwendung an. Die Lizenz spricht nicht gegen eine Verwendung. Dennoch wäre es
|
||||||
ein vermeidbarer Mehraufwand generierte QR-Codes aus einer Node.JS-Applikation in eine PHP-Umgebung zu
|
ein vermeidbarer Mehraufwand generierte QR-Codes aus einer Node.js-Applikation in eine PHP-Umgebung zu
|
||||||
übertragen. Das bildet sich mit vier Punkten in \enquote{Workflow-Eignung} ab.
|
übertragen. Das bildet sich mit vier Punkten in \enquote{Workflow-Eignung} ab.
|
||||||
Darüberhinaus macht Soldair/node-qrcode einen verbesserungswürdigen Eindruck der Projektpflege, wofür es lediglich
|
Darüberhinaus macht \enquote{soldair/node-qrcode} einen verbesserungswürdigen Eindruck der Projektpflege, wofür es lediglich
|
||||||
drei Punkte gibt.
|
drei Punkte gibt.
|
||||||
\begin{table}[htbp]
|
\begin{table}[htbp]
|
||||||
\centering
|
\centering
|
||||||
@@ -165,21 +171,21 @@ drei Punkte gibt.
|
|||||||
8 & 3 & 4 & 15\\
|
8 & 3 & 4 & 15\\
|
||||||
\hline
|
\hline
|
||||||
\end{tabular}
|
\end{tabular}
|
||||||
\caption{Subjektive Evaluation: Soldair/node-qrcode}
|
\caption{Subjektive Evaluation zur Eignung als QR-Code-Bibliothek: soldair/node-qrcode}
|
||||||
\end{table}
|
\end{table}
|
||||||
|
|
||||||
\subsubsection*{Chillerlan/php-qrcode}
|
\subsubsection*{chillerlan/php-qrcode}
|
||||||
Rochkos Lösung macht einen aktiv gepflegten Eindruck und wird von großen Downloadzahlen gestützt.
|
Rochkos Lösung macht einen aktiv gepflegten Eindruck und wird von großen Downloadzahlen gestützt.
|
||||||
Rochko stellt eine ausführliche Dokumentation und Codebeispiele bereit.
|
Rochko stellt eine ausführliche Dokumentation und Codebeispiele bereit.
|
||||||
Hierfür wird die volle Punktzahl in \enquote{Gepflegtheit} vergeben.
|
Hierfür wird die volle Punktzahl in \enquote{Gepflegtheit} vergeben.
|
||||||
Der Funktionsumfang übersteigt weit die Anforderungen und gestattet so ausführlich gestaltete QR-Codes
|
Der Funktionsumfang übersteigt weit die Anforderungen und gestattet so ausführlich gestaltete QR-Codes zu generieren
|
||||||
\cite{bib:chillerlan-php-qrcode-demo},
|
\cite{bib:chillerlan-php-qrcode-demo},
|
||||||
die somit ebenso die hedonische Qualität fördern \cite{bib:koenig-vorlesung-ux}.
|
die somit die hedonische Qualität fördern \cite{bib:koenig-vorlesung-ux}.
|
||||||
Bewertet wird das mit einer vollen Punktzahl in \enquote{Funktionalität}.
|
Bewertet wird das mit einer vollen Punktzahl in \enquote{Funktionalität}.
|
||||||
Chillerlan/php-qrcode lässt sich nahtlos in das existierende Projekt eingliedern,
|
\enquote{chillerlan/php-qrcode} lässt sich nahtlos in das existierende Projekt eingliedern,
|
||||||
da es als PHP-Bibliothek über Composer eingebunden werden kann und eine eigene API bereitstellt \cite{bib:chillerlan-php-qrcode}.
|
da es als PHP-Bibliothek über Composer eingebunden werden kann und eine eigene API bereitstellt \cite{bib:chillerlan-php-qrcode}.
|
||||||
Die von Rochko verwendete Lizenz gestattet eine unkomplizierte Verwendung. Chillerlan/php-qrcode funktioniert sowohl mit
|
Die von Rochko verwendete Lizenz gestattet eine unkomplizierte Verwendung. \enquote{chillerlan/php-qrcode} funktioniert sowohl mit
|
||||||
PHP $7.x$ als auch $8.x$. Die Bibliothek benötigt zwei weitere Abhängigkeiten. Eine dieser Abhängigkeiten ist ebenfalls von Rochko
|
PHP- $7.x$ als auch $8.x$. Die Bibliothek benötigt zwei weitere Abhängigkeiten. Eine dieser Abhängigkeiten ist ebenfalls von Rochko
|
||||||
bereitgestellt \cite{bib:chillerlan-php-qrcode-composerjson} und weist eine ähnlich gute Projektpflege auf
|
bereitgestellt \cite{bib:chillerlan-php-qrcode-composerjson} und weist eine ähnlich gute Projektpflege auf
|
||||||
\cite{bib:chillerlan-php-settings-container}. Das wird mit der Maximalwertung in \enquote{Workflow-Eignung} berechnet.
|
\cite{bib:chillerlan-php-settings-container}. Das wird mit der Maximalwertung in \enquote{Workflow-Eignung} berechnet.
|
||||||
\begin{table}[htbp]
|
\begin{table}[htbp]
|
||||||
@@ -191,17 +197,17 @@ bereitgestellt \cite{bib:chillerlan-php-qrcode-composerjson} und weist eine ähn
|
|||||||
10 & 10 & 10 & 30\\
|
10 & 10 & 10 & 30\\
|
||||||
\hline
|
\hline
|
||||||
\end{tabular}
|
\end{tabular}
|
||||||
\caption{Subjektive Evaluation: Chillerlan/php-qrcode}
|
\caption{Subjektive Evaluation zur Eignung als QR-Code-Bibliothek: chillerlan/php-qrcode}
|
||||||
\end{table}
|
\end{table}
|
||||||
|
|
||||||
\subsubsection*{Kreativekorp/barcode}
|
\subsubsection*{kreativekorp/barcode}
|
||||||
Kreativekorp beeindruckt durch Nutzungsbeispiele und Dokumentation in der Readme-Datei,
|
Kreativekorp beeindruckt in der Readme-Datei durch Nutzungsbeispiele und Dokumentation,
|
||||||
sowie einer Vielzahl unterstützter Barcode-Formate, darunter auch QR-Codes und einiger improvisierter Tests.
|
sowie einer Vielzahl unterstützter Barcode-Formate, darunter auch QR-Codes und einiger improvisierter Tests.
|
||||||
In Anbetracht dessen, dass die Bibliothe de-facto sechseinhalb Jahre alt ist und seit vier Jahren nicht mehr
|
In Anbetracht dessen, dass die Bibliothek de facto sechseinhalb Jahre alt ist und seit vier Jahren nicht mehr
|
||||||
angepasst wurde, wird eine geringe Wertung von drei Punkten in \enquote{Gepflegtheit} vergeben.
|
angepasst wurde, wird eine geringe Wertung von drei Punkten in \enquote{Gepflegtheit} vergeben.
|
||||||
Null Punkte in \enquote{Workflow-Eignung} rechtfertigen sich durch die Abwesenheit jeglicher
|
Null Punkte in \enquote{Workflow-Eignung} rechtfertigen sich durch die Abwesenheit jeglicher
|
||||||
Unterstützung für Paketmanager, wodurch eine saubere Verwendung in dem Brown-Field-Projekt
|
Unterstützung für Paketmanager, wodurch eine saubere Verwendung in dem Brown-Field-Projekt
|
||||||
Änderungen an der Bibliothek selbst erfordern würde.
|
Änderungen an der Bibliothek an sich erfordern würde.
|
||||||
Die Funktionalität wurde aufgrund der desaströsen Gepflegtheit und Eignung nicht näher untersucht,
|
Die Funktionalität wurde aufgrund der desaströsen Gepflegtheit und Eignung nicht näher untersucht,
|
||||||
da eine Verwendung selbst mit guter Funktionalität nicht infrage käme.
|
da eine Verwendung selbst mit guter Funktionalität nicht infrage käme.
|
||||||
\begin{table}[htbp]
|
\begin{table}[htbp]
|
||||||
@@ -213,20 +219,21 @@ da eine Verwendung selbst mit guter Funktionalität nicht infrage käme.
|
|||||||
- & 3 & 0 & -\\
|
- & 3 & 0 & -\\
|
||||||
\hline
|
\hline
|
||||||
\end{tabular}
|
\end{tabular}
|
||||||
\caption{Subjektive Evaluation: Kreativekorp/barcode}
|
\caption{Subjektive Evaluation zur Eignung als QR-Code-Bibliothek: Kreativekorp/barcode}
|
||||||
\end{table}
|
\end{table}
|
||||||
|
|
||||||
\subsubsection*{Bacon/BaconQrCode}
|
\subsubsection*{Bacon/BaconQrCode}
|
||||||
BaconQrCode nennt keine speziellen Optionen, um näheren Einfluss auf den generierten QR-Code auszuüben.
|
\enquote{BaconQrCode} nennt keine speziellen Optionen, um näheren Einfluss auf den generierten QR-Code auszuüben.
|
||||||
Es werden Rasterbilder und verschiedene Vektorformate als Renderziel unterstützt. Aufgrund der fehlenden Optionen,
|
Es werden Rasterbilder und verschiedene Vektorformate als Renderziel unterstützt. Aufgrund der fehlenden Optionen,
|
||||||
die andere Bibliotheken bereitstellen, werden lediglich fünf von zehn Punkten für \enquote{Funktionalität} vergeben.
|
die andere Bibliotheken bereitstellen, werden lediglich fünf von zehn Punkten in \enquote{Funktionalität} vergeben.
|
||||||
Die Projektgepflegtheit ist inkonsistent. Manche Stellen, beispielsweise die Mitwirkenden, Alter des neuesten Commits, Tests
|
Die Projektgepflegtheit ist inkonsistent. Manche Stellen, beispielsweise die Mitwirkenden, Alter des neuesten Commits, Tests
|
||||||
und Nutzerzahlen machen einen guten Eindruck, während Punkte wie die Dokumentation, die Organisationswebseite und andere
|
und Nutzerzahlen machen einen guten Eindruck, während Punkte wie die Dokumentation, die Organisationswebseite und andere
|
||||||
Projekte Sorgen begründen. Weil der Programmcode an sich gut gepflegt aussieht und große Downloadzahlen von
|
Projekte von Scholzen Sorgen begründen. Weil der Programmcode an sich gut gepflegt aussieht und große Downloadzahlen von
|
||||||
häufiger Verwendung sprechen, werden für die \enquote{Gepflegtheit} acht Punkte vergeben.
|
häufiger Verwendung sprechen, werden für die \enquote{Gepflegtheit} acht Punkte vergeben.
|
||||||
Da es sich hierbei um eine PHP-Bibliothek handelt, die über Composer in PHP- $7.x$ und $8.x$ Projekte geladen werden kann
|
Da es sich hierbei um eine PHP-Bibliothek handelt, die über Composer in PHP- $7.x$ und $8.x$ Projekte geladen werden kann
|
||||||
und eine das Projekt API bereitstellt, ist die technische Workflow-Eignung gut. Die BSD-2-Clause-Lizenz verkompliziert eine Integration,
|
und das Projekt eine API bereitstellt, ist die technische Workflow-Eignung gut.
|
||||||
da somit eine Copyright-Notiz an Nutzer gezeigt werden muss \cite{bib:opensource-license-bsd-2}.
|
Die BSD-2-Clause-Lizenz verkompliziert eine Integration,
|
||||||
|
da somit eine Copyright-Notiz an Nutzer gezeigt werden müsste \cite{bib:opensource-license-bsd-2}.
|
||||||
Dadurch werden drei Punkte einer vollkommenen Workflow-Eignung abgezogen, wodurch sieben Punkte vergeben werden.
|
Dadurch werden drei Punkte einer vollkommenen Workflow-Eignung abgezogen, wodurch sieben Punkte vergeben werden.
|
||||||
\begin{table}[htbp]
|
\begin{table}[htbp]
|
||||||
\centering
|
\centering
|
||||||
@@ -237,39 +244,40 @@ Dadurch werden drei Punkte einer vollkommenen Workflow-Eignung abgezogen, wodurc
|
|||||||
5 & 8 & 7 & 20\\
|
5 & 8 & 7 & 20\\
|
||||||
\hline
|
\hline
|
||||||
\end{tabular}
|
\end{tabular}
|
||||||
\caption{Subjektive Evaluation: Bacon/BaconQrCode}
|
\caption{Subjektive Evaluation zur Eignung als QR-Code-Bibliothek: Bacon/BaconQrCode}
|
||||||
\end{table}
|
\end{table}
|
||||||
|
|
||||||
\subsection{Fazit}
|
\subsection{Fazit}
|
||||||
Nach Evaluation der verschiedenen QR-Code-Bibliotheken im Kontext der vorliegenden Problemstellung erweist sich aus Sicht des Autors
|
Nach Evaluation der verschiedenen QR-Code-Bibliotheken im Kontext der vorliegenden Problemstellung erweist sich aus Sicht des Autors
|
||||||
\textit{chillerlan/php-qrcode} mit 30 Gesamtpunkten als die am besten geeignetste Bibliothek.
|
\break\enquote{chillerlan/php-qrcode} mit 30 Gesamtpunkten als die am besten geeignetste Bibliothek unter den Betrachteten.
|
||||||
Somit wird \textit{chillerlan/php-qrcode} als QR-Code Technologie in der Lösung dieser Problemstellung verwendet.
|
Somit wird \enquote{chillerlan/php-qrcode} als QR-Code Technologie in der Lösung dieser Problemstellung verwendet.
|
||||||
|
|
||||||
\begin{table}[htbp]
|
\begin{table}[htbp]
|
||||||
\centering
|
\centering
|
||||||
\begin{tabular}{|l||l|l||l|l|}
|
\begin{tabular}{|l|l|l|l|l|}
|
||||||
\hline
|
\hline
|
||||||
\textbf{Bibliothek} & \textbf{Funkt.} & \textbf{Gepflegtht.} & \textbf{WF.-Eignung} & \textbf{$\Sigma$}\\
|
\textbf{Bibliothek} & \textbf{Funkt.} & \textbf{Gepflegtht.} & \textbf{WF.-Eignung} & \textbf{$\Sigma$}\\
|
||||||
\hline
|
\hline
|
||||||
\hline
|
\hline
|
||||||
chillerlan/php-qrcode & 10 & 10 & 10 & 30\\\hdashline
|
chillerlan/php-qrcode & 10 & 10 & 10 & 30\\\hdashline
|
||||||
baconqrcode & 5 & 8 & 7 & 20\\\hdashline
|
Bacon/BaconQrCode & 5 & 8 & 7 & 20\\\hdashline
|
||||||
soldair/node-qrcode & 8 & 3 & 4 & 15\\\hdashline
|
soldair/node-qrcode & 8 & 3 & 4 & 15\\\hdashline
|
||||||
kjua & 8 & 2 & 0 & 10\\\hdashline
|
kjua & 8 & 2 & 0 & 10\\\hdashline
|
||||||
kreativekorp/barcode & - & 3 & 0 & -\\
|
kreativekorp/barcode & - & 3 & 0 & -\\
|
||||||
\hline
|
\hline
|
||||||
\end{tabular}
|
\end{tabular}
|
||||||
\caption{Gesamtübersicht: Subjektive Evaluation der QR-Code Bibliotheken}
|
\caption{Gesamtübersicht: Subjektive Evaluationen zur Eignung von QR-Code Bibliotheken}
|
||||||
\label{tbl:qrlib-compare-barchart}
|
\label{tbl:qrlib-compare-barchart}
|
||||||
\end{table}
|
\end{table}
|
||||||
|
\clearpage
|
||||||
|
|
||||||
\section{PDF-Generator}
|
\section{PDF-Generator}
|
||||||
Firmenintern ist der PDF-Generator \textit{mpdf/mpdf} \cite{bib:mpdf} etabliert und wird bereits
|
Firmenintern ist der PDF-Generator \enquote{mpdf/mpdf} etabliert und wird bereits
|
||||||
in zahlreichen Projekten verwendet.
|
in zahlreichen Projekten verwendet.
|
||||||
Um die projektübergreifende Kontinuität der Technik zu wahren und um somit die
|
Um die projektübergreifende Kontinuität der Technik zu wahren und um somit die
|
||||||
Wartbarkeit und Nachhaltigkeit des hier behandelten Softwareproduktes
|
Wartbarkeit und Nachhaltigkeit des hier behandelten Softwareproduktes
|
||||||
zu fördern, wird sich für den PDF-Generator entschieden, der bereits firmeninterner Standard ist.
|
zu fördern, wird sich für den PDF-Generator entschieden, der bereits firmeninterner Standard ist.
|
||||||
Unabhängig dessen ist \textit{mpdf} ein gut gepflegtes Projekt mit einem Alter von mehr als acht Jahren,
|
Unabhängig dessen ist \enquote{mpdf} ein gut gepflegtes Projekt mit einem Alter von mehr als acht Jahren,
|
||||||
Sponsoren, 72 Entwicklern, über 31 Millionen Downloads, über 3.900 Sterne-Markierungen, über 800 Commits
|
Sponsoren, 72 Entwicklern, über 31 Millionen Downloads, über 3.900 Sterne-Markierungen, über 800 Commits
|
||||||
und regelmäßigen Updates. Dadurch, dass \textit{mpdf} ein Composer-Paket für verschiede PHP-Versionen ist,
|
und regelmäßigen Updates. \enquote{Mpdf} ein Composer-Paket und für verschiede PHP-Versionen verfügbar.
|
||||||
ist eine herausragende Workflow-Eignung gegeben \cite{bib:mpdf}.
|
Mpdf verwendet eine GPL-2.0 Lizenz \cite{bib:mpdf}.
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ Studiengang \cfgUniversityDegreeCourse\\
|
|||||||
\cfgDocSubTitle\\
|
\cfgDocSubTitle\\
|
||||||
\vspace{15mm}
|
\vspace{15mm}
|
||||||
\normalsize
|
\normalsize
|
||||||
Version \cfgDocVersion
|
%Version \cfgDocVersion
|
||||||
\end{center}
|
\end{center}
|
||||||
|
|
||||||
\vfill
|
\vfill
|
||||||
@@ -26,11 +26,10 @@ Studiengang \cfgUniversityDegreeCourse\\
|
|||||||
\cfgAuthorName, \cfgAuthorMatriculationNum\\
|
\cfgAuthorName, \cfgAuthorMatriculationNum\\
|
||||||
\cfgAuthorContact\\
|
\cfgAuthorContact\\
|
||||||
mit Medienagenten Stange \& Ziegler oHG\\
|
mit Medienagenten Stange \& Ziegler oHG\\
|
||||||
Im \cfgSemesterName\\
|
\cfgDateLastModification\\
|
||||||
\cfgAuthorCity\\
|
\cfgAuthorCity\\
|
||||||
\vspace{3mm} \ \\
|
\vspace{3mm} \ \\
|
||||||
bei \cfgUniversitySupervisorName\\
|
Erstbetreuer: Prof. Dr. Volker Schwarzer\\
|
||||||
\cfgUniversitySupervisorContact\\
|
Zweitbetreuerin: Prof. Dr. Elisabeth Heinemann\\
|
||||||
\cfgUniversityCity\\
|
|
||||||
|
|
||||||
\end{titlepage}
|
\end{titlepage}
|
||||||
|
|||||||
10
config.tex
@@ -3,17 +3,17 @@
|
|||||||
%
|
%
|
||||||
|
|
||||||
% Document title
|
% Document title
|
||||||
\newcommand{\cfgDocTitle}{Bachelorarbeit}
|
\newcommand{\cfgDocTitle}{Bachelor of Science}
|
||||||
\newcommand{\cfgDocSubTitle}{Wie kann die Anmeldung und Zustellung von Weinen für Weinproben des Regionalverbunds für Weine in der Weinregion Mosel effizient und profitabel durch eine TYPO3-Erweiterung realisiert werden?}
|
\newcommand{\cfgDocSubTitle}{Wie kann die Anmeldung und Zustellung von Weinen für Weinproben des Regionalverbunds für Weine in der Weinregion Mosel effizient und profitabel durch eine TYPO3-Erweiterung realisiert werden?}
|
||||||
|
|
||||||
% Document classification
|
% Document classification
|
||||||
\newcommand{\cfgDocClassification}{Abschlussarbeit}
|
\newcommand{\cfgDocClassification}{Thesis zur Erlangung des akademischen Grades}
|
||||||
|
|
||||||
% Document version
|
% Document version
|
||||||
\newcommand{\cfgDocVersion}{1.5}
|
\newcommand{\cfgDocVersion}{3}
|
||||||
|
|
||||||
% Last modification date
|
% Last modification date
|
||||||
\newcommand{\cfgDateLastModification}{22. Dezember 2022}
|
\newcommand{\cfgDateLastModification}{31. März 2023}
|
||||||
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
|
||||||
@@ -41,7 +41,7 @@
|
|||||||
\newcommand{\cfgUniversityDepartment}{Fachbereich Informatik}
|
\newcommand{\cfgUniversityDepartment}{Fachbereich Informatik}
|
||||||
|
|
||||||
% University degree course
|
% University degree course
|
||||||
\newcommand{\cfgUniversityDegreeCourse}{Angewandte Informatik - dual (B.Sc)}
|
\newcommand{\cfgUniversityDegreeCourse}{Angewandte Informatik - dual (B.Sc.)}
|
||||||
|
|
||||||
% University supervisor name
|
% University supervisor name
|
||||||
\newcommand{\cfgUniversitySupervisorName}{Volker Schwarzer}
|
\newcommand{\cfgUniversitySupervisorName}{Volker Schwarzer}
|
||||||
|
|||||||
@@ -13,8 +13,8 @@
|
|||||||
\acro{PDCA}[PDCA]{Plan-Do-Check-Act}
|
\acro{PDCA}[PDCA]{Plan-Do-Check-Act}
|
||||||
\acro{SWOT}[SWOT]{Strength-Weakness-Opportunity-Threat}
|
\acro{SWOT}[SWOT]{Strength-Weakness-Opportunity-Threat}
|
||||||
|
|
||||||
\acro{FA}[FA]{Funktionale Anforderung}
|
\acro{FA}[FA]{funktionale Anforderung}
|
||||||
\acroplural{FA}[FAs]{Funktionale Anforderungen}
|
\acroplural{FA}[FAs]{funktionale Anforderungen}
|
||||||
|
|
||||||
\acro{NFA}[NFA]{nichtfunktionale Anforderung}
|
\acro{NFA}[NFA]{nichtfunktionale Anforderung}
|
||||||
\acroplural{NFA}[NFAs]{nichtfunktionale Anforderungen}
|
\acroplural{NFA}[NFAs]{nichtfunktionale Anforderungen}
|
||||||
|
|||||||
@@ -5,4 +5,4 @@
|
|||||||
\nocite{*} % Show all references, even unused ones
|
\nocite{*} % Show all references, even unused ones
|
||||||
|
|
||||||
\bibliography{dexes/literature}
|
\bibliography{dexes/literature}
|
||||||
\bibliographystyle{apalike}
|
\bibliographystyle{apalike-german}
|
||||||
|
|||||||
@@ -7,7 +7,9 @@
|
|||||||
\begin{description}
|
\begin{description}
|
||||||
|
|
||||||
\item [Frontend] \hfill \\
|
\item [Frontend] \hfill \\
|
||||||
\quotecite{Das Frontend einer Webseite ist der Teil der Webseite, der Endnutzern präsentiert wird. Ein Frontend besteht aus HTML und Cascading Style Sheets} \cite{bib:udjaja}.
|
\quotecite{Front-end website is a combination of
|
||||||
|
hypertext markup language (HTML), cascading style sheets (CSS) and JavaScript that generates pages that can be
|
||||||
|
viewed and interacted directly with the user.} \cite[S. 294]{bib:udjaja}.
|
||||||
|
|
||||||
\item [TYPO3-Backend] \hfill \\
|
\item [TYPO3-Backend] \hfill \\
|
||||||
\quotecite{The backend's main role is to enable users to create and publish
|
\quotecite{The backend's main role is to enable users to create and publish
|
||||||
@@ -30,11 +32,16 @@
|
|||||||
An extension may provide several plugins, each with a dedicated function,
|
An extension may provide several plugins, each with a dedicated function,
|
||||||
such as the list view.} \cite{bib:typo3-docs-content-elements-plugins-introduction}
|
such as the list view.} \cite{bib:typo3-docs-content-elements-plugins-introduction}
|
||||||
|
|
||||||
\item [(Weinland-Mosel) Mitglied] \hfill \\
|
\item [Weinland-Mosel-Mitglied] \hfill \\
|
||||||
Ein Weinland-Mosel-Mitglied ist ein Mitglied des Moselwein e.V.
|
Ein Weinland-Mosel-Mitglied ist ein Mitglied des Moselwein e.V.
|
||||||
Diese Mitglieder sind Betriebe und profitieren von einer Reihe an
|
Diese Mitglieder sind i.d.R. Weingüter und weinproduzierende Unternehmen.
|
||||||
|
Mitglieder profitieren von einer Reihe an
|
||||||
Vorteilen, wie beispielsweise einer Auflistung auf Weinland Mosels Internetauftritt.
|
Vorteilen, wie beispielsweise einer Auflistung auf Weinland Mosels Internetauftritt.
|
||||||
Durch diesen Auftritt sind bereits Stammdatensätze vorhanden.
|
Durch diesen Auftritt sind bereits Stammdatensätze vorhanden.
|
||||||
Durch eine Teilnahme an einer Jahresauswahlprobe ist ein Unternehmen kein Mitglied.
|
Nur durch eine Teilnahme an einer Jahresauswahlprobe ist ein Unternehmen kein Mitglied.
|
||||||
|
|
||||||
|
\item [Flight] \hfill \\
|
||||||
|
Pro Tisch einer Jahresauswahlprobe werden sechs Weine gleichzeitig eingeschenkt und bewertet.
|
||||||
|
Das ist ein Flight. Pro Tisch gibt es mehrere aufeinanderfolgende Flights.
|
||||||
|
|
||||||
\end{description}
|
\end{description}
|
||||||
|
|||||||
@@ -135,7 +135,7 @@
|
|||||||
title = {EKSPANPIXEL BLADSY STRANICA: Performance Efficiency Improvement of Making Front-End Website Using Computer Aided Software Engineering Tool},
|
title = {EKSPANPIXEL BLADSY STRANICA: Performance Efficiency Improvement of Making Front-End Website Using Computer Aided Software Engineering Tool},
|
||||||
journal = {Procedia Computer Science},
|
journal = {Procedia Computer Science},
|
||||||
volume = {135},
|
volume = {135},
|
||||||
pages = {292-301},
|
pages = {{292-301}},
|
||||||
year = {2018},
|
year = {2018},
|
||||||
note = {The 3rd International Conference on Computer Science and Computational Intelligence (ICCSCI 2018) : Empowering Smart Technology in Digital Era for a Better Life},
|
note = {The 3rd International Conference on Computer Science and Computational Intelligence (ICCSCI 2018) : Empowering Smart Technology in Digital Era for a Better Life},
|
||||||
issn = {1877-0509},
|
issn = {1877-0509},
|
||||||
@@ -275,28 +275,12 @@
|
|||||||
note = {Zugriff: Januar 2023}
|
note = {Zugriff: Januar 2023}
|
||||||
}
|
}
|
||||||
|
|
||||||
@article{bib:christoph-ebert-vorwort-systematisches-re,
|
@article{bib:christoph-ebert-systematisches-re,
|
||||||
title = {Vorwort zu Systematisches RE},
|
title = {Systematisches Requirements Engineering: Anforderungen ermitteln},
|
||||||
year = {2019},
|
year = {2019},
|
||||||
author = {Christoph Ebert},
|
author = {Christoph Ebert},
|
||||||
publisher = {dpunkt Verlag}
|
publisher = {dpunkt Verlag},
|
||||||
}
|
volume = {6}
|
||||||
|
|
||||||
@book{bib:basiswissen-re,
|
|
||||||
author={Pohl, Klaus and Rupp, Chris},
|
|
||||||
title={Basiswissen Requirements Engineering},
|
|
||||||
subtitle={Aus- und Weiterbildung nach IREB-Standard zum "Certified Professional for Requirements Engineering" : Foundation Level nach IREB-Standard},
|
|
||||||
edition={4., {\"u}berarbeitete Auflage},
|
|
||||||
publisher={dpunkt.verlag},
|
|
||||||
address={Heidelberg},
|
|
||||||
year={2015},
|
|
||||||
pages={1 Online-Ressource (xix, 171 Seiten)},
|
|
||||||
language={ger},
|
|
||||||
isbn={978-3-86491-673-1 and 978-3-86491-674-8 and 3-86491-674-7},
|
|
||||||
note={Description based upon print version of record},
|
|
||||||
keywords={CPRE},
|
|
||||||
url={https://ebookcentral.proquest.com/lib/ub-heidelberg/detail.action?docID=2029882},
|
|
||||||
library={UB},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@article{bib:kleine-re-fibel,
|
@article{bib:kleine-re-fibel,
|
||||||
@@ -336,6 +320,14 @@
|
|||||||
note = {Zugriff: März 2023}
|
note = {Zugriff: März 2023}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@misc{bib:mpdf-github,
|
||||||
|
author = {{Mpdf Contributors}},
|
||||||
|
howpublished = "\url{https://github.com/mpdf/mpdf}",
|
||||||
|
title = {{mpdf/mpdf PHP library generating PDF files from UTF-8 encoded HTML}},
|
||||||
|
year = {2023},
|
||||||
|
note = {Zugriff: März 2023}
|
||||||
|
}
|
||||||
|
|
||||||
@misc{bib:mpdf-ref,
|
@misc{bib:mpdf-ref,
|
||||||
author = {{Mpdf Contributors}},
|
author = {{Mpdf Contributors}},
|
||||||
howpublished = "\url{https://mpdf.github.io/reference/mpdf-functions/overview.html}",
|
howpublished = "\url{https://mpdf.github.io/reference/mpdf-functions/overview.html}",
|
||||||
@@ -347,7 +339,7 @@
|
|||||||
@misc{bib:qrbot,
|
@misc{bib:qrbot,
|
||||||
author = {{TeaCapps}},
|
author = {{TeaCapps}},
|
||||||
howpublished = "\url{https://qrbot.net}",
|
howpublished = "\url{https://qrbot.net}",
|
||||||
title = {{QRBot | QRCode und Barcode Scanner}},
|
title = {{QRBot | QRCode und Barcode Scanner}},
|
||||||
year = {2023},
|
year = {2023},
|
||||||
note = {Zugriff: März 2023}
|
note = {Zugriff: März 2023}
|
||||||
}
|
}
|
||||||
@@ -394,8 +386,8 @@
|
|||||||
|
|
||||||
@misc{bib:typo3-docs-managing-extensions,
|
@misc{bib:typo3-docs-managing-extensions,
|
||||||
author = {{TYPO3 Contributors}},
|
author = {{TYPO3 Contributors}},
|
||||||
howpublished = "\url{https://docs.typo3.org/m/typo3/tutorial-getting-started/main/en-us/Extensions/Management.html}",
|
howpublished = "\url{https://docs.typo3.org/m/typo3/tutorial-getting-started/11.5/en-us/Extensions/Management.html}",
|
||||||
title = {{Managing Extensions}},
|
title = {{Managing Extensions - Getting Started 11.5 documentation}},
|
||||||
year = {2023},
|
year = {2023},
|
||||||
note = {Zugriff: Februar 2023}
|
note = {Zugriff: Februar 2023}
|
||||||
}
|
}
|
||||||
@@ -403,23 +395,31 @@
|
|||||||
@misc{bib:typo3-docs-getting-started,
|
@misc{bib:typo3-docs-getting-started,
|
||||||
author = {{TYPO3 Contributors}},
|
author = {{TYPO3 Contributors}},
|
||||||
howpublished = "\url{https://docs.typo3.org/m/typo3/tutorial-getting-started/11.5/en-us/Index.html}",
|
howpublished = "\url{https://docs.typo3.org/m/typo3/tutorial-getting-started/11.5/en-us/Index.html}",
|
||||||
title = {{Getting started}},
|
title = {{TYPO3 - Getting Started Tutorial - Getting Started 11.5 documentation}},
|
||||||
|
year = {2023},
|
||||||
|
note = {Zugriff: Februar 2023}
|
||||||
|
}
|
||||||
|
|
||||||
|
@misc{bib:typo3-docs-modules,
|
||||||
|
author = {{TYPO3 Contributors}},
|
||||||
|
howpublished = "\url{https://docs.typo3.org/m/typo3/tutorial-getting-started/11.5/en-us/Concepts/Index.html}",
|
||||||
|
title = {{TYPO3 Concepts - Getting started 11.5 documentation}},
|
||||||
year = {2023},
|
year = {2023},
|
||||||
note = {Zugriff: Februar 2023}
|
note = {Zugriff: Februar 2023}
|
||||||
}
|
}
|
||||||
|
|
||||||
@misc{bib:typo3-docs-file-structure,
|
@misc{bib:typo3-docs-file-structure,
|
||||||
author = {{TYPO3 Contributors}},
|
author = {{TYPO3 Contributors}},
|
||||||
howpublished = "\url{https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/ExtensionArchitecture/FileStructure/Index.html}",
|
howpublished = "\url{https://docs.typo3.org/m/typo3/reference-coreapi/11.5/en-us/ExtensionArchitecture/FileStructure/Index.html}",
|
||||||
title = {{TYPO3 Extension Development File Structure}},
|
title = {{File structure - TYPO3 Explained 11.5 documentation}},
|
||||||
year = {2023},
|
year = {2023},
|
||||||
note = {Zugriff: Februar 2023}
|
note = {Zugriff: Februar 2023}
|
||||||
}
|
}
|
||||||
|
|
||||||
@misc{bib:typo3-docs-content-elements-plugins-introduction,
|
@misc{bib:typo3-docs-content-elements-plugins-introduction,
|
||||||
author = {{TYPO3 Contributors}},
|
author = {{TYPO3 Contributors}},
|
||||||
howpublished = "\url{https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/ApiOverview/ContentElements/Introduction.html}",
|
howpublished = "\url{https://docs.typo3.org/m/typo3/reference-coreapi/11.5/en-us/ApiOverview/ContentElements/Introduction.html}",
|
||||||
title = {{What are Content Elements?}},
|
title = {{Introduction - TYPO3 Explained 11.5 documentation}},
|
||||||
year = {2023},
|
year = {2023},
|
||||||
note = {Zugriff: Februar 2023}
|
note = {Zugriff: Februar 2023}
|
||||||
}
|
}
|
||||||
@@ -427,30 +427,30 @@
|
|||||||
@misc{bib:typo3-docs-extbase-reference,
|
@misc{bib:typo3-docs-extbase-reference,
|
||||||
author = {{TYPO3 Contributors}},
|
author = {{TYPO3 Contributors}},
|
||||||
howpublished = "\url{https://docs.typo3.org/m/typo3/reference-coreapi/11.5/en-us/ExtensionArchitecture/Extbase/Reference/Index.html}",
|
howpublished = "\url{https://docs.typo3.org/m/typo3/reference-coreapi/11.5/en-us/ExtensionArchitecture/Extbase/Reference/Index.html}",
|
||||||
title = {{Extbase reference}},
|
title = {{Extbase reference - TYPO3 Explained 11.5 documentation}},
|
||||||
year = {2023},
|
year = {2023},
|
||||||
note = {Zugriff: Februar 2023}
|
note = {Zugriff: Februar 2023}
|
||||||
}
|
}
|
||||||
|
|
||||||
@misc{bib:typo3-docs-extdev-tut-tea-repositories,
|
@misc{bib:typo3-docs-extdev-tut-tea-repositories,
|
||||||
author = {{TYPO3 Contributors}},
|
author = {{TYPO3 Contributors}},
|
||||||
howpublished = "\url{https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/ExtensionArchitecture/Tutorials/Tea/Repository.html}",
|
howpublished = "\url{https://docs.typo3.org/m/typo3/reference-coreapi/11.5/en-us/ExtensionArchitecture/Tutorials/Tea/Repository.html}",
|
||||||
title = {{Extension development / Tutorials / Tea in a nutshell / Repository}},
|
title = {{Repository — TYPO3 Explained 11.5 documentation}},
|
||||||
year = {2023},
|
year = {2023},
|
||||||
note = {Zugriff: Februar 2023}
|
note = {Zugriff: Februar 2023}
|
||||||
}
|
}
|
||||||
|
|
||||||
@misc{bib:typo3-docs-sys-category,
|
@misc{bib:typo3-docs-sys-category,
|
||||||
author = {{TYPO3 Contributors}},
|
author = {{TYPO3 Contributors}},
|
||||||
howpublished = "\url{https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/ApiOverview/Categories/Index.html}",
|
howpublished = "\url{https://docs.typo3.org/m/typo3/reference-coreapi/11.5/en-us/ApiOverview/Categories/Index.html}",
|
||||||
title = {{System categories}},
|
title = {{System categories - TYPO3 Explained 11.5 documentation}},
|
||||||
year = {2023},
|
year = {2023},
|
||||||
note = {Zugriff: März 2023}
|
note = {Zugriff: März 2023}
|
||||||
}
|
}
|
||||||
|
|
||||||
@misc{bib:typo3-docs-femanager,
|
@misc{bib:typo3-docs-femanager,
|
||||||
author = {{in2code}},
|
author = {{in2code}},
|
||||||
howpublished = "\url{https://docs.typo3.org/p/in2code/femanager/main/en-us/Introduction/Index.html}",
|
howpublished = "\url{https://docs.typo3.org/p/in2code/femanager/11.5/en-us/Introduction/Index.html}",
|
||||||
title = {{femanager}},
|
title = {{femanager}},
|
||||||
year = {2023},
|
year = {2023},
|
||||||
note = {Zugriff: März 2023}
|
note = {Zugriff: März 2023}
|
||||||
@@ -458,16 +458,16 @@
|
|||||||
|
|
||||||
@misc{bib:typo3-docs-felogin,
|
@misc{bib:typo3-docs-felogin,
|
||||||
author = {{TYPO3 Contributors}},
|
author = {{TYPO3 Contributors}},
|
||||||
howpublished = "\url{https://docs.typo3.org/c/typo3/cms-felogin/main/en-us/Configuration/Index.html}",
|
howpublished = "\url{https://docs.typo3.org/c/typo3/cms-felogin/11.5/en-us/Configuration/Index.html}",
|
||||||
title = {{cms-felogin}},
|
title = {{Configuration - Frontend Login 11.5 documentation}},
|
||||||
year = {2023},
|
year = {2023},
|
||||||
note = {Zugriff: März 2023}
|
note = {Zugriff: März 2023}
|
||||||
}
|
}
|
||||||
|
|
||||||
@misc{bib:typo3-docs-extbase,
|
@misc{bib:typo3-docs-extbase,
|
||||||
author = {{TYPO3 Contributors}},
|
author = {{TYPO3 Contributors}},
|
||||||
howpublished = "\url{https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/ExtensionArchitecture/Extbase/Index.html}",
|
howpublished = "\url{https://docs.typo3.org/m/typo3/reference-coreapi/11.5/en-us/ExtensionArchitecture/Extbase/Index.html}",
|
||||||
title = {{Extension development / Extbase}},
|
title = {{Repository - TYPO3 Explained 11.5 documentation}},
|
||||||
year = {2023},
|
year = {2023},
|
||||||
note = {Zugriff: März 2023}
|
note = {Zugriff: März 2023}
|
||||||
}
|
}
|
||||||
@@ -475,7 +475,7 @@
|
|||||||
@misc{bib:typo3-docs-di,
|
@misc{bib:typo3-docs-di,
|
||||||
author = {{TYPO3 Contributors}},
|
author = {{TYPO3 Contributors}},
|
||||||
howpublished = "\url{https://docs.typo3.org/m/typo3/reference-coreapi/11.5/en-us/ApiOverview/DependencyInjection/Index.html}",
|
howpublished = "\url{https://docs.typo3.org/m/typo3/reference-coreapi/11.5/en-us/ApiOverview/DependencyInjection/Index.html}",
|
||||||
title = {{Dependency Injection}},
|
title = {{Dependency injection - TYPO3 Explained 11.5 documentation}},
|
||||||
year = {2023},
|
year = {2023},
|
||||||
note = {Zugriff: März 2023}
|
note = {Zugriff: März 2023}
|
||||||
}
|
}
|
||||||
@@ -483,7 +483,7 @@
|
|||||||
@misc{bib:typo3-docs-fluid-form-viewhelpers,
|
@misc{bib:typo3-docs-fluid-form-viewhelpers,
|
||||||
author = {{TYPO3 Contributors}},
|
author = {{TYPO3 Contributors}},
|
||||||
howpublished = "\url{https://docs.typo3.org/other/typo3/view-helper-reference/11.5/en-us/typo3/fluid/latest/Form/Index.html}",
|
howpublished = "\url{https://docs.typo3.org/other/typo3/view-helper-reference/11.5/en-us/typo3/fluid/latest/Form/Index.html}",
|
||||||
title = {{form - Fluid ViewHelper Reference 11.5 Documentation}},
|
title = {{form - Fluid ViewHelper Reference 11.5 documentation}},
|
||||||
year = {2023},
|
year = {2023},
|
||||||
note = {Zugriff: März 2023}
|
note = {Zugriff: März 2023}
|
||||||
}
|
}
|
||||||
@@ -491,7 +491,7 @@
|
|||||||
@misc{bib:typo3-docs-model-explained,
|
@misc{bib:typo3-docs-model-explained,
|
||||||
author = {{TYPO3 Contributors}},
|
author = {{TYPO3 Contributors}},
|
||||||
howpublished = "\url{https://docs.typo3.org/m/typo3/reference-coreapi/11.5/en-us/ExtensionArchitecture/Extbase/Reference/Domain/Model.html}",
|
howpublished = "\url{https://docs.typo3.org/m/typo3/reference-coreapi/11.5/en-us/ExtensionArchitecture/Extbase/Reference/Domain/Model.html}",
|
||||||
title = {{Model - Typo3 explained 11.5 documentaion}},
|
title = {{Model - TYPO3 Explained 11.5 documentation}},
|
||||||
year = {2023},
|
year = {2023},
|
||||||
note = {Zugriff: März 2023}
|
note = {Zugriff: März 2023}
|
||||||
}
|
}
|
||||||
@@ -499,7 +499,7 @@
|
|||||||
@misc{bib:typo3-ref-standalone-view,
|
@misc{bib:typo3-ref-standalone-view,
|
||||||
author = {{TYPO3 Contributors}},
|
author = {{TYPO3 Contributors}},
|
||||||
howpublished = "\url{https://api.typo3.org/10.4/class_t_y_p_o3_1_1_c_m_s_1_1_fluid_1_1_view_1_1_standalone_view.html}",
|
howpublished = "\url{https://api.typo3.org/10.4/class_t_y_p_o3_1_1_c_m_s_1_1_fluid_1_1_view_1_1_standalone_view.html}",
|
||||||
title = {{TYPO3\\CMS\\Fluid\\View\\StandaloneView Class Reference}},
|
title = {{TYPO3\textbackslash{}CMS\textbackslash{}Fluid\textbackslash{}View\textbackslash{}StandaloneView Class Reference}},
|
||||||
year = {2023},
|
year = {2023},
|
||||||
note = {Zugriff: März 2023}
|
note = {Zugriff: März 2023}
|
||||||
}
|
}
|
||||||
@@ -507,14 +507,14 @@
|
|||||||
@misc{bib:typo3-ref-extbase-model-feuser,
|
@misc{bib:typo3-ref-extbase-model-feuser,
|
||||||
author = {{TYPO3 Contributors}},
|
author = {{TYPO3 Contributors}},
|
||||||
howpublished = "\url{https://api.typo3.org/10.4/class_t_y_p_o3_1_1_c_m_s_1_1_extbase_1_1_domain_1_1_model_1_1_frontend_user.html}",
|
howpublished = "\url{https://api.typo3.org/10.4/class_t_y_p_o3_1_1_c_m_s_1_1_extbase_1_1_domain_1_1_model_1_1_frontend_user.html}",
|
||||||
title = {{TYPO3\\CMS\\Extbase\\Domain\\Model\\FrontendUser Class Reference}},
|
title = {{TYPO3\textbackslash{}CMS\textbackslash{}Extbase\textbackslash{}Domain\textbackslash{}Model\textbackslash{}FrontendUser Class Reference}},
|
||||||
year = {2023},
|
year = {2023},
|
||||||
note = {Zugriff: März 2023}
|
note = {Zugriff: März 2023}
|
||||||
}
|
}
|
||||||
|
|
||||||
@misc{bib:pixelant-typo3-data-export,
|
@misc{bib:pixelant-typo3-data-export,
|
||||||
author = {{Pixelant}},
|
author = {{Pixelant}},
|
||||||
howpublished = "\url{https://www.typo3manual.com/typo3-basics/tips-and-functions/exporting-data-through-list-view/}",
|
howpublished = "\url{https://www.typo3manual.com/typo3-basics/tips-and-functions/exporting-data-through-list-view}",
|
||||||
title = {{Tutorial on exporting Data from TYPO3}},
|
title = {{Tutorial on exporting Data from TYPO3}},
|
||||||
year = {2023},
|
year = {2023},
|
||||||
note = {Zugriff: März 2023}
|
note = {Zugriff: März 2023}
|
||||||
|
|||||||
15
header.tex
@@ -3,21 +3,24 @@
|
|||||||
%
|
%
|
||||||
|
|
||||||
\documentclass[
|
\documentclass[
|
||||||
12pt, % 12pt font size
|
12pt, % 12pt font size
|
||||||
pdftex, % we are just using pdf
|
pdftex, % we are just using pdf
|
||||||
a4paper, % a4 paper format
|
a4paper, % a4 paper format
|
||||||
titlepage,% title has its own page
|
titlepage,% title has its own page
|
||||||
oneside, % single-page view
|
oneside, % single-page view
|
||||||
%twocolumn,% use two text columns
|
%twocolumn,% use two text columns
|
||||||
headsepline, % hr after headline
|
headsepline, % hr after headline
|
||||||
footsepline, % hr before footer,
|
footsepline, % hr before footer,
|
||||||
bibliography=totoc, % Include literaturverzeichnis in inhaltsverzeichnis
|
bibliography=totoc, % Include literaturverzeichnis in inhaltsverzeichnis
|
||||||
listoftables=totoc,
|
listoftables=totoc,
|
||||||
ngerman, % it's a german document
|
ngerman, % it's a german document
|
||||||
%draft, % create debug build. remove for release build
|
%draft, % create debug build. remove for release build
|
||||||
hidelinks, % avoid weird ref highlighting
|
hidelinks, % avoid weird ref highlighting
|
||||||
]{scrbook}
|
]{scrbook}
|
||||||
|
|
||||||
|
\counterwithout{figure}{chapter}
|
||||||
|
\counterwithout{table}{chapter}
|
||||||
|
|
||||||
% Load project configuration
|
% Load project configuration
|
||||||
\input{config}
|
\input{config}
|
||||||
|
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
<mxfile host="Electron" modified="2023-03-26T23:15:31.841Z" agent="5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/20.8.16 Chrome/106.0.5249.199 Electron/21.4.0 Safari/537.36" etag="oHHIf7piQiLInwpccsm9" version="20.8.16" type="device"><diagram name="Seite-1" id="c5J236jw9uxX1O-q0mKY">7Vtbd6M2EP41Pqd9cI8BG9uPtnPpdpN2d92zl77JMAbFArlCju38+o5ABDC+7S4OpCcPSdBI6DIzn/TNiLSsSbC5FWTp33MXWMvsuJuWddUyzf7Qxt9KsE0Eve4wEXiCuonIyART+gRa2NHSFXUhKjSUnDNJl0Whw8MQHFmQESH4uthszllx1CXxoCSYOoSVpV+oK/1EOjD7mfx3oJ6fjmzYen0BSRvrlUQ+cfk6J7KuW9ZEcC6Tp2AzAaZ0l+olee/mQO3zxASE8pwXxva79V/bsfwUWB/f33x9d3cVjtqpmiO5TVcMLipAF7mQPvd4SNh1Jh0LvgpdUN12sJS1ueN8iUIDhQ8g5VZbk6wkR5EvA6ZrccZi+1W/Hxe+qcJvvbR4tclXXm11ac5DqTs1klp3pGyM5RnjziIR3VDG9AtlHWm1RXwlHDimGO1rRHggj7Qzk3ZKabkBtAVugQeAC8AGAhiR9LHoVUQ7p/fcLrMfPmgTfo85k34fCVvpkd4rUyl3BObiQszOF6Ah/uEho6GqIGHJA4r2XftUwnRJYnWtEeRFW+ZtYh5T+SMICZujSkprLe2Ves8wu7q8zhBopDI/hz67cym9GiUlvcEk5/4nYWI1CiZmCSYaFTRSEKFBy7QZLmc8EwWj2/+u1G4dK7gdxRoeYQPDXG5iLab1+OSpv9NtJCFQTkpDCYIBSpsGNstsHNj69YItw9e3ArxqB1vlINKvfuDonplHmJ2iR1jdHUsnaNdvZcbGZZNtrtlSNYgOj9Mb7IyzS2BOzavYHh+SGWSe96yTH3dG69BWsabCTYAWoX2hecDuGU0Dttl9O0X3KqZ/LtlsFtvsl7DxTiHjftq+3jhxGLgG4YKS/UF8ARFZRWvis6Xgs1jqwZKRGOJoYzWaEv5NI8dHZmqTQIEk+X3DlH9GahWrOSoJKKsYcXM05IQzLuK+LJfAYO6gPJKCLyBXYzsDmM0vc/j2XhKj94uR/Oe2wz5+Grt0xJnx8MFum682IDQvi9HBmRgdNgqigxJEr6iK+q5xFbOQRhHkUarwd5T4zji2FG0nQcMo7ln80m7n5b/Gau6cy5HTEaOlikR/gmw/QAgit/2075DNQwLHAMRCpiOhIpPB0gm8+m1kN2C2az/qhyf8jiW2qSTK0kxsuZox+kRRaf8Di+4eDPVb1Cznlp7td5b5uic2ANX+pzq6BSQOrYnVGnXnMkKS8QSRYgxt/BmtIvQOdSCM9rKR3N6QzKM4NxTPDu4XaFJZdKGia4Q8hB0/0iKCrCbEogMqPYAC5SDUIWykKwLquvEJu89ni16dd9vuZZzQ6JWd0DL2OKF1MXZSSx7uBVlGyvBP0oxB1TSjkhDe/s4Q3n6JED7VaekwOrwNVHMikZkHPmESKk6x13Ii7aYT6g9V3nLyBzbJ8hayt123rkjl2KxzIP0MIiIqtUYXaJJWmnKrBKGPXAUbKpXHSJx6uOeRylhU0jn26iEXIWGInta0tOBurGDVjmPrDcfH8HkSx3ajcNwt4bh0t9Z5vhcjLE7pIVwWPAjiHEQWrTcMOLtsuH7gDOsFThPuyY4B4iRw+o0Cjn0IOJpNxqcKI16c4HjpLF2Snw9oHKHjTOJM2/Xdny19A+ZXzXEvwFjrB6xhv1bEVhf2HkPiScQazeKs5QswBVmXxBFfllZPTrnJ9LOa+WaJJqw+S3kBvHTrx0unpOAxCKDxRaBLPSoJo5FSpgrnp44vqFSPVSn2qFOfr9j+TtZj7018Z49idz+8qE6xh5O5Z6dhDx0Vd+CpDyLiVgeSqpUnUBnMZePSpyWzm2WzD/dY3biY1csxdnxh/7RaqLT5eBLOJfXiLeuD4A+wSPaxp5U6+jlShzAGGyRflF4GbrXktkqWGp4J0N7FTNWrlyn8eFB8YaZg7ImKj32c0hCmYJTDYuQD7b10ge58REODy1CGRlxVXzKNjMXs3yuS24Tsf1Ss6/8A</diagram></mxfile>
|
<mxfile host="Electron" modified="2023-03-27T15:37:34.363Z" agent="5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/20.8.16 Chrome/106.0.5249.199 Electron/21.4.0 Safari/537.36" etag="_LMQP0qORuolSiuvVgbG" version="20.8.16" type="device"><diagram name="Seite-1" id="c5J236jw9uxX1O-q0mKY">7Vtbd6M2EP41Pqd9cI8BGzuPtuOk6Sbt7rpnL32TYQxaC+QKObbz6zsCEcD4trs4kJ48JEGjQZeZ+TQXkZY1Dja3giz9B+4Ca5kdd9Oyrlum2bMM/K0I24Rg2XZC8AR1E5KREab0CTSxo6kr6kJUYJScM0mXRaLDwxAcWaARIfi6yDbnrDjrknhQIkwdwsrUz9SVfkIdmP2M/jtQz09nNuyrpCcgKbPeSeQTl69zJGvSssaCc5k8BZsxMCW7VC7JezcHep8XJiCU57wwsu/Wf21H8mNgfXh38+Xu/joctlMxR3Kb7hhcFIBuciF97vGQsElGHQm+Cl1Qw3awlfHcc75EooHEbyDlVmuTrCRHki8DpntxxWL7Rb8fN76qxm+9tHm9yXdeb3VrzkOpBzWSXneodIztGePOIiHdUMb0C2UZabFFfCUcOCYYbWtEeCCP8JkJnxJabgKtgVvgAeAGkEEAI5I+Fq2KaOP0nvky/eGDVuH3qDMZ95GwlZ7pnVKVMkdgLm7E7HwGGuIfHjIaqg4SliygqN+1TyVMlyQW1xpBXtRlXifmMZE/gpCwOSqktNfSVqnPDLOr2+sMgUZK83PoszuXkqtREtIbTHLmfxImVqNgYpZgolFBIwURGrRMm+F2RjNRULr970qd1rGA21Es4SEyGOZyE0sx7ccnT/2dbiMJgTJSGkoQDJDaNLBZZuPA1q8XbBm+vhbgVTvYKgeRfvU9R/PMLMLsFC3C6u5oOkG7fitTNm6bbHNsS8UQHZ6nN9iZZzeAObWuIj8+JCvILO9ZJj9ujNaho2JNhZsALUL9QvOA3TOaBmyz++ZF9wqmf26w2axos1/Cxp1CxsO0Pdk4cRq4BuGCov1BfAERWUVr4rOl4LOY6sGSkRjiqGM1myL+TSPHx8jUJoECSfL7hin7jNQuVnMUElBWMeLmqMgxZ1zEY1kugcHcQXokBV9Arsd2BjCbX8b59l4Sow+LofzntsM+fBy5dMiZ8e293TZfbUJoXhajgzMxetUoiA5KEL2mKuub4C5mIY0iyKNU4e9o4DvjyCnaToKGYTyy+KXdztN/jcXcOTdGTmeMlioT/Ylg+xuEIHLHT/seo3lI4BiAWMh0JhRkMlm6gFd/jOwmzHbtrv7qhN2xRDeVZFk6EluuZow+URTa/0Cju46hfo2a5drSs/7OUl/3xAGg+H9qoFvAwKE1tlrD7lxGGGQ8QaQihjb+DFcRWodyCMO90UjubEjWUVwbkmcHzwtUqSyaUNE0Qh7Cjh1pEsGoJsSmA6o8gARlINQhbKg7Auq6sYfdZ7NFq86bbfcyRmj0ykZoGXuM0LpYdFJLHe4Fo4w0wj8ZZgyqDjMqSeHt70zh7ZdI4VOZlpzR4WOgGo9EZh74hEmouMRei0faLSfUn6q81eQPHJLlI2QvX7euTOXYqnMg/QQiIqq0RheoklZacqsEoY9cJRuqlMdIXHp44JGqWFQyOI7qYSxCwhAtrWllwd1cwaodx9Ybjo/h8ySO7UbhuFvCcelurfN8L0ZYXNJDuCx4EMQ1iCxbbxhwdqPh+oFzVS9wmnBPdgwQJ4HTbxRw7EPA0dFk7FUY8eICx0tX6ZL6fEDjDB1XElfaJvd/tvQNmF91jHuBiLV+wBr2a0VsdWnvMSSeRKzRrJi1fAGmIOuSOOPLyuqJlxtPP6mVb5aowuqrlBfAS7d+vHRKAh6BABpfBLrUo5IwGilhqnR+6viCSvVYlWCPGvX5gu3vVD323sR39gh298OL6gR7uJh7dhn2kKu4B099EBFzHSiqVl5AZTCXjSufltRultV+tUfrxsW0Xs6x1ffaIowxtAq9Vu5KvkoM1VKwKon/qnbU9ep1/z+e6V7Y/Rt7Ut1jX5w0xP0b5VwXnXx7bwxAd76MocFl4oBG3D9fsjaMzex/JpIrguwfT6zJfw==</diagram></mxfile>
|
||||||
|
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 164 KiB |
@@ -1 +1 @@
|
|||||||
<mxfile host="Electron" modified="2023-03-26T23:15:53.394Z" agent="5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/20.8.16 Chrome/106.0.5249.199 Electron/21.4.0 Safari/537.36" etag="k6pVaG8YLZ-WBJn0w6An" version="20.8.16" type="device"><diagram name="Seite-1" id="c5J236jw9uxX1O-q0mKY">7VtZc6M4EP41rtp98BaHQ+xHxzk2O0l2Zjw1x77J0AYlAnmFHNv59dsCES5fM7ED2cpLjFqNJPrrT+puSMcehcsrQWbBLfeAdSzDW3bs845lmeaghz9KskolfUsLfEE9rZQLxvQJtNDQ0jn1IC4pSs6ZpLOy0OVRBK4syYgQfFFWm3JWnnVGfKgJxi5hdek36skge4rTXP4nUD/IZjadQdoTkkxZP0kcEI8vCiL7omOPBOcyvQqXI2DKeJld0vsuN/Q+L0xAJPe54cy5Xvy9OpOfQ/vTh8vv1zfn0bCbmTmWq+yJwUMD6CYXMuA+jwi7yKVngs8jD9SwBrZynRvOZyg0UXgPUq40mmQuOYoCGTLdiysWq+/6/qTxQzX+OMma58ti5/lKt6Y8knpQM+31hgpjbE8Ydx9S0SVlTN9Qt5E2W8znwoVthtG+RoQPcoueleopoxUm0AhcAQ8BHwAVBDAi6WPZq4h2Tv9ZL8cPLzSEPwNnOu4jYXM90wcFlXJHYB4+iGV8AxrhD48YjVQHiWoeUMZ3EVAJ4xlJzLVAlpexnKK1R5xxkdxrewT6UxflsRT8AQo9jtuHybSCorUNpEcQEpZbzZr12tqP9S5j9XR7kXPWzGRBga+OcSwkzJpZ34lVIMxOYtmtIpZVI5bmEY0VqWjYsRyGj3M2ESXQnX/nan9PDNyNEwsPUcG0ZsvEilk/Xvnqd7yKJYTKSWkkQTBA6dunp221jp6nzdIzZ+SPEiEbp+fBaadv/cjRoXOPsIyyR9i9CtLp/qDvysHGxyargtpMKcSb5znpV+apBkm71lXWx4t0BbnnPdvk153R3rS5LKjwUqLFiC/8H7aCE7NtW0GWkLyf1BXDnO4bArcrBj6tselacel23L1Yukl2ugDhgZL9RQIBMZnHCxKwmeCTROrDjJFkU0CM1WxK+IXGboDxskNCRav07yVT/hmrp5hP0UhA2Us5evzD9+Q1GXf7MJT/XBns0+czjw45M+8/Ol3rzSad1nEZ19+TcYNWEa5fI9w5VZnlBT7FJKJxDEXOKTZtDZUnHDVF103Po2Eysvit2y3Kf0/MbOwbVWczxjOV7b4gPL+HCERhM+neYPwPKR1DEA8ymwkNmU6WLaBlm0I1YXYaP4YHO7yIpZY+SJal46rZfMLoE0WjtQ6f6qbdPD5Wvbb0jMZeYPR2kFPpv2igK8AjujOyO8PeVMZ4nD9BrM7miKDYMryEuefUp5KgMyHs88hPh6zHAQUep+sqrxXFk43cRohl2UHKEXbEI6iE41qE6/IjbLqgkn8UKIehLmFD3RFSz0tOw3UeWfbZolP2juOU5kndKW1zjVPaR4skGqmyvWJEkMXWO0OC/qFDgoOk285PptvOa6TbmU1rR83mbeAw5w2Z+BAQJuGlJffjp+XNJwnv9fMNW159Q1ir12sqR9i26gLlvoKIiSpq0QeEpJMVuw7Ct0euwnxVRMNEXjHvlscq8z/I4Diqj5EGiSL0tLdfkKtmAnbjzLffmb+N0TuZ77SK+b0a82tvzoznt16EJcU0JNgDD8OkXpBn1m+eatX4uXmqDZqlWhvegm2j0E6qnbaKas4mqun4Mzm5GPGTgsdr1+DSWnpIkxwfV5Jk4xc3dx39fit4cVTcBopX4+jmKW46b5Xjh0utt3F3J8fNdkXS9ddbiuQeSbLKvMyenqSj8Ve18uUMITxAnbONDOs1zzCjBskd4JWFwxleWm9U5YWxGwgqVRG7ORC2UmZ/EE4rdZu1b/GNNSBUP/M4HAiby9N7F5Y3HV034KvPLxKtDWXhg5eAGUxl6wrANditOuyDNaibR0O9Xle4o26g4P4CNPkSnUKchBrDeUzEBKicYxT0Qgq+AqEGjRPqpNm44dfT8CPHDeaaPHzbhygtiRvMeiKO0UF3bfBAKx/M0PBAAcTxy1fHLFxjM/93jfRtRP5PL/bFfw==</diagram></mxfile>
|
<mxfile host="Electron" modified="2023-03-30T16:24:11.739Z" agent="5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/20.8.16 Chrome/106.0.5249.199 Electron/21.4.0 Safari/537.36" etag="uJLDwojdT_EOwQ1EVR7a" version="20.8.16" type="device"><diagram name="Seite-1" id="c5J236jw9uxX1O-q0mKY">7VtZc6M4EP41rtp98BaHg51H59xsktmZ8dQc+yZDGxQL5BVybOfXbwtEuHzNxA5kKy8xaglJ9Nef+oB07PNweS3ILLjnHrCOZXjLjn3Rsaye3cO/SrBKBbZhpAJfUC8VmblgRJ9AC7Nhc+pBXBooOWeSzspCl0cRuLIkI0LwRXnYhLPyqjPiQ00wcgmrS79RTwapdGD1c/mfQP0gW9l0TtOekGSD9ZPEAfH4oiCyLzv2ueBcplfh8hyY0l2ml/S+qw29zxsTEMl9bjhzbhZ/r87k59D+dHv1/ebuIhp2MzXHcpU9MXioAN3kQgbc5xFhl7n0TPB55IGa1sBWPuaO8xkKTRQ+gJQrjSaZS46iQIZM9+KOxeq7vj9p/FCNP06y5sWy2Hmx0q0Jj6Se1Ex7vaHCGNtjxt1pKrqijOkb6jrSaov5XLiwTTHa1ojwQW4ZZ6XjlNIKC2gEroGHgA+AAwQwIulj2aqINk7/eVyOH15oCH8GznTeR8LmeqVbBZUyR2AePohlfAMa4Q+PGI1UB4lqFlDGdxFQCaMZSdS1QJKXsZygts854yK51/YIDCYuymMp+BQKPY47gPGkgqK1DaRHEBKWW9Wa9drajvUpY/V0e5Fz1sxkQYGvjnEsJMyaWt+JVSDMTmLZrSKWVSOW5hGNFalo2LEcho9zNhYl0J1/5+p8TxTcjRMND3GAac2WiRazfrzy1e9oFUsIlZHSSIJggNK3T0/bah09+83SM2fkjxIhG6fnwWmnb/3I0aBzi7CMskXYvQrS6fmg78rBxscmq8KwmRoQb17nZFBZpxok7dpXeTxepDvILe9ZJ79ujPamw2VBhZcSLUZ84f9wFJyYbTsKrN67p16rmP6+IXC7YuB+jU03ikv3o+7l0k2S0wUID5TsLxIIiMk8XpCAzQQfJ1IfZowkhwJirFZTwi80dgOMlx0SKlqlf6+Yss9YPcV8gkoCyl7K0eM735PXZNz9dCj/uTbYp89nHh1yZj58dLrWm006reMybrAn405bRbhBjXAXVGWWl/gU44jGMRQ5p9i0NVQecxwpum7qj4bJzOK3brco/z1Rs7FvVJ2tGM9UtvuC8PwBIhCFw6R7h/E/pHQMQUxlthIqMl0s20DLDoVqwuw07oZPd1gRSzV9kCxLx1Wz+ZjRJ4pKax0+1UO7eXysem3pGY29wOjtIKca/6KJrgFddOfc7gx7ExmjO3+CWPnmiLhBAPosqbv8AmXTLZS3heLxRhojmrJsC+VgOuIRVCJvLSIYOkTYdEHl+ShQtkFdwoa6I6Selzi+dcZXNs+i/fWOY3/mSd3+bHON/dlHCxoaKai9ovPPwuid3n9waO9/kMza+cnM2nmNzDrTac2rbD4GDuNayNiHgDAJL62uHz8Dbz4feC+Vbzjy6gfC2nG9ptKBbbsuUO4riJio+hWdIiSdrK51EL49chXRq3oZ5uyKefc8Vkn+QSbHWX0MKkgUoaW9/dpbNei3G2e+/c78bYzeyXynVczv1Zhfe0lmPL/gIiypmyHBpjwMk9JAnkS/eapV4+fmqXbaLNXa8MJrG4V2Uq3fKqo5m6im48/EczHiJ7WN1y63pWXzkCbpPO4kKZndQhRFc2S66Og3WsGLg+M2ML0aTjfPdNN5q1Q/XIa9jcI7qW62K6Cuv9BSXPdIklzmhfXUoZ6PvqqdL2cI4QEqm21kWK95hhk1SD4AXlk4neFRn0r1/SgGO24gqFRl6+ZA2EqZ/UHoV8o3a9/bG2tAqH7YcTgQNhek9y4lb/Jgd+CrDy6SURuqwwevBDOYyNbVgWuwW3XYT9egbh4N9Xp54QN1AwX3F6DJp+cU4iTIGM5jIsZA5TzyX8jAV+DTaeN8Omk2bPj1ZPzIYYO5Jhvf9uVJS8IGs56OY3DQXRs70MoXMjQ8UPxw/CLWMcvX2Mz/PyN9J5H/k4t9+R8=</diagram></mxfile>
|
||||||
|
Before Width: | Height: | Size: 66 KiB After Width: | Height: | Size: 165 KiB |
@@ -1 +1 @@
|
|||||||
<mxfile host="Electron" modified="2023-03-26T23:16:13.715Z" agent="5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/20.8.16 Chrome/106.0.5249.199 Electron/21.4.0 Safari/537.36" etag="AyST-mlLhsos4vB4EQcA" version="20.8.16" type="device"><diagram name="Seite-1" id="c5J236jw9uxX1O-q0mKY">7Vlbd9soEP41fsweS3Ic+9HXNG3SvTh70u4blsYSDRJaQLGdX7+DQNYtt27i2D3tSwLDIGC++WYG3PEm8eZckDS64gGwjtsNNh1v2nFdxxn28J+WbI1k4FpBKGhglUrBgt6DFXatNKMByJqi4pwpmtaFPk8S8FVNRoTg67rairP6qikJoSVY+IS1pTc0UFFxirNS/gFoGBUrO/2hGYlJoWxPIiMS8HVF5M063kRwrkwr3kyAaeMVdjHz5o+M7jYmIFEvmTDuX6x/347VX7H356f5l4vLaTI6Kcws1bY4MQRoANvlQkU85Alhs1I6FjxLAtCf7WKv1LnkPEWhg8JvoNTWokkyxVEUqZjZUdyx2H6x8/POV9357bToTjfVwel21wtGGlPsLhn3b41oThmzCm2bWDNJngkfnjKE9S0iQlBP6LlGTxupsoC1+DnwGHDDqCCAEUXv6l5ErDOGO70SL2xYyL4HPvPdO8Iyu9InDY0+sB9R/1Zh6wZogv/uM0niGHQzplqOYog7bp/hccdLga1Qt0gmQ1h1Jl5nPGFM5RPmXMQZI8LManlM3R/WEVWwSElu7jVGhTr2K0RrwhkX+VwvIDBY+SiXSvBbqIz0/QEsV0+BegdCweZJGIpRz/q5jUJuz/bXJaedQhZV+Nzv7gs5p2XGn5N47guJ5x0V8dwW8SocWVMR6EGuufOBJEGbZTklrxYns42fJ0zDtyU6tMCM8iNSzHOPjmJnh6VYyaqvNVK9O8XenDp26h+cJqr0ALdb9wCv10DWcNzOKsHFY5NtRS3VCvLxdU4HjXWahc9z+6rrY8PsoPS0nU3+v/N5rQBh87ANDtgJ0dwh8qsdHTIdMippWgeV2eVnw0cJ0Q8ZIE6dYwsQxVXkp8/BZy8tfo+r+j1rceyikVbXIIK8gv1IIgESa9s1iVgq+DKXhpAykocKw7icoNcUa2csofsk1rQxf+dM+6PUp8hWaCSgTL2Og3uoar3DM+pAKXdvzBi8kBnDoyLGoEWMKdWXwhmeYplQKaHKDe31zQz0DUzWKbh0ckmlAuOdMYjbwzt/M50c3vmHz1idGRM2TW0LgjRbMnpP83rgyEzb8w5tWrf90LEzZGHHQrDieUQv7df/N+PFwInMg8gIFZxeujHT7HjxoXPABKAvZKPeSklMFvcgZX6f04wIcl5MaUgVQUQRsCwJzRfbSabYEx7abKu+VRRXtt9AHcFSdWjr5VnCE2jUclaE+woT7ProArhbb6yhpz5hIzsQ0yDIQ+9DvlT3tjdwp+bN0Dltu5PnPOBO3t7c6fRX4Vcr6J7Nb4Ojym/Ftluh9nEGtuItWYYQEfPAeeB42yTIu6ayZTQc3l5Pp+nm5krOVq6gf48feFf+J9OxrxL1wLwzL/xIUKXz2vteSHU4tUxz3ihOnXVfcEHtPgBD853jzWBou/l3Jzn3kSR3CWGOoNZ6JEe9eT5isFKvy0ZV1Ht7Qt1toz58AHRnX6C3X44+Uz/SaF/jrTNnIci8CBllkoglUJVRLEFeR8B3oNNwf3TCbvlDqnnCK3+O9mb/AQ==</diagram></mxfile>
|
<mxfile host="Electron" modified="2023-03-27T15:38:53.651Z" agent="5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/20.8.16 Chrome/106.0.5249.199 Electron/21.4.0 Safari/537.36" etag="NPX1EUEImPl_yUjK8dhA" version="20.8.16" type="device"><diagram name="Seite-1" id="c5J236jw9uxX1O-q0mKY">7VlbV9s4EP41eWRPbIdcHnODsoXuBfbQ7ptiT2wV2fJKcpPw6zuyZHwLkAIh6em+gDQaWdJ8882MlI43jdfngqTRFQ+AddxusO54s47rOs6oh/+0ZGMkQ9cKQkEDq1QKruk9WGHXSjMagKwpKs6Zomld6PMkAV/VZEQIvqqrLTmrr5qSEFqCa5+wtvSWBioqTjEo5R+AhlGxstMfmZGYFMr2JDIiAV9VRN68400F58q04vUUmDZeYRcz7+yR0YeNCUjULhMm/YvVH5uJ+jv2/vp49vnicpaMTwozS7UpTgwBGsB2uVARD3lC2LyUTgTPkgD0Z7vYK3UuOU9R6KDwKyi1sWiSTHEURSpmdhR3LDaf7fy880V3fjsturN1dXC2eegFY40pdheM+3dGdEYZswptm1gzSZ4JH54yhPUtIkJQT+i5Rk8bqbKAtfg58Bhww6gggBFFv9W9iFhnDB/0SrywYSH7EfjMd78RltmVPmpo9IH9iPp3Clu3QBP8d59JEsegmzHVchRD3HH7DI87WQhshbpFMhnCsjP1OpMpYyqfcMZFnDEizKyWx9T9YRVRBdcpyc29wqhQx36JaE054yKf6wUEhksf5VIJfgeVkb4/hMXyKVC/gVCwfhKGYtSzfm6jkNuz/VXJaaeQRRU+97v7Qs5pmfHXJJ67I/G8oyKe2yJehSMrKgI9yDV3PpAkaLMsp+TV9cl87ecJ0/BtgQ4tMKP8jBTz3KOj2OAwFHuGKiUHS9p9qbFuOwdfTjFvR4oN3ppiduqfnCaq9BS3W/cUr9fwALNRO6t0AjQr2VTUUq0gH1/ndNhYp1kgPbevuj42zA5Kj3ywycud1GsFEpuvbRDBTojmDpGH7SiS6dBSSec6+MwvPxneSoh+ykBy6hxbICmuLL98rh7sWiQfV5U8aHHsopF+VyCCvNL9nUQCJNbAKxKxVPBFLg0hZSQPFYZxOUFvKNbYWGr3SaxpY/6eMe2PUp8iW6KRgDL1Og7uofr1Ds+o40zNL2fGcEdmjI6KGMMWMWZUXx7neIpFQqWEKje01zcz0FcwWafg0skllQqMd8Yg7g7v/M10cnjnHz1jdWZM2DS1LQjSbMHoPc3rgSMzbc87tGnd9oPIgyELOxaCJc8jemm//n8ZLwZOZB5Exqjg9NK1mWbHiw+dAyYAfXEb95ZKYrK4Bynze59mRJDzYkZDqggiioBlSWi+2E4yxZ7w0GZb9a2iuLL9BuoIlqpDWy/PEp5Ao5azItxXmGDXRxfA3XoTDT31CRvbgZgGQR56t/lS3dvewJ2aN0jntO1OnrPFnby9udPp/4VfraB7Nr8Njyq/FdtuhdrHGdiKt2QRQkTMQ+iB422TIO+ayhbRaHR3M5ul69srOV+6gv4z2fL+/G+mY18l6oF5j772I0GVzmvveyHV4dQyzXmjODXo7nBB7W6BofnO8WYwtN38h5Oc+0iSu4QwR1BrPZKj3jwfMViq12WjKuq9PaHutlEfbQHd2Rfo7ZejT9SPNNo3eOvMWQgyL0LGmSRiAVRlFEuQ1xHwHeg02h+dsFv+4Gqe8Mqfrb35dw==</diagram></mxfile>
|
||||||
|
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 116 KiB |
@@ -1 +1 @@
|
|||||||
<mxfile host="Electron" modified="2023-03-26T17:28:06.834Z" agent="5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/20.8.16 Chrome/106.0.5249.199 Electron/21.4.0 Safari/537.36" etag="hIg8A2igoXO-HTw_ShVI" version="20.8.16" type="device"><diagram id="k7iwBMskrYiuqxr37yBD" name="Seite-1">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</diagram></mxfile>
|
<mxfile host="Electron" modified="2023-03-30T17:26:57.235Z" agent="5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/20.8.16 Chrome/106.0.5249.199 Electron/21.4.0 Safari/537.36" etag="qHh66gKnss4mO05uyrej" version="20.8.16" type="device"><diagram id="k7iwBMskrYiuqxr37yBD" name="Seite-1">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</diagram></mxfile>
|
||||||
|
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 119 KiB |
BIN
images/pflichtenheft.pdf
Normal file
BIN
images/selbststaendigkeitserklaerung.pdf
Executable file
@@ -1 +1 @@
|
|||||||
<mxfile host="Electron" modified="2023-03-26T17:02:00.107Z" agent="5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/20.8.16 Chrome/106.0.5249.199 Electron/21.4.0 Safari/537.36" etag="eHinVDgxnltw4AcCVRpf" version="20.8.16" type="device"><diagram name="Seite-1" id="4AvssoyQ3F2APBzfr0LI">7VpZk5s4EP41rtp9mBSHje1Hjz32pmp3M7uzSTaPMrRBMwJRQj5/fSQQl/GB48FHKi8zqGkh0f193a3GLXPoryYMhd5f1AHSMjRn1TJHLcPQ9X5b/JOSdSLpGUrgMuwopVzwgjeghJqSzrEDUUmRU0o4DstCmwYB2LwkQ4zRZVltRkl51RC5UBG82IhUpV+xw730Lbq5/A/ArpeurFv95I6PUmX1JpGHHLosiMynljlklPLkyl8NgUjjpXZJ5o333M02xiDgdSb88zoJPn7+F732Fmb/izOZjBbTB6OjNsfX6RuDIwyghpRxj7o0QOQplz4yOg8ckI/VxCjX+ZPSUAh1IXwFztfKm2jOqRB53CfqrtgxW/8v53/opMNv6nHxYLQqjdZqVH1lZYWIzpkNh95TQQcxF/gBPb2XKEojFFZQFp0A9UFsSCgwIIjjRRklSIHNzfRyf4gL5ZJT3JM8d4HIXK307KEIhEiYcSD+jbCLOd6IrdCg4sloiX2CAumypYc5vIQoNtJSULXskL2GXQDjsDpoCXXXTHG+3hovc9oYmpJ5BcoYXa0h6+nmlcFtnInuQ5g4CnmzLuSN94Z8PHXAGFoXFEKKAx4VnvwsBTl+rDJ89O1odpK6uEjWz8GTvciP48msslHQax64Lbn6OKYjchnyfYjZaRFh98cpE1euvPo0fYU3npiRBiAIO9ynJPgBQWR7aMb36P095xtgs9bQbD0OPZbsYiGjgDZCYpIvUzGRk7Xf/luH1Hx4RPYbBM7v4nFfYfowpsyfE4G2CknKFDg5dByMZLXjyVY4aVejiW7tiCa63lg0se47VZ4VTNIgcTyadG4qgab7LnB2DOBMBRWE9PnTXWBf79YEv9kY9tvXwH5DGH7nRFdJTXp7y32dLbckJFKzcs+cmjEr61iHU+YR/WZyZhoPCgT87EfAN0nCKqYqkdmQLxmW/L2v/GTsKHcvzNHufeenuke5Ts1M9O5sP8s7VRoMghllDsjKLRKFHIqimBK3dIbr1zzC6f2mQN2/CqZXmBcgLUbfCndyQMvBuoju5uq0tE1zjBxWTXJ0b4ocVoUcHwMObIFhKTtpmF+uVkt52vQ5pbk0oFXs9IsyhyjTrUmZ2+oMdiuUGTPkwjTuB1hufO5XzQEmLl84egOPEpFv7oJGOzLPZWnUq9j3eUaw7Yly1YMZvwsj6tcPRjvMqBrYRqGBjchNtrCtHfbb3cJuN2bA6xRADbewU1gc/2yj1QzORjNn+5+wiZ2a9Ie72DKp9IdTYFOGAzeZJz/RGtoEItuTtwftGY9CRjcQRRBdJFZmkabpwq3XFNWzA/Cdnt/PZLpRl+ntm6rD0n1ftcF8NvivXykYV/lW2xSKL95iNrb80lSL2TyxxWxeIqO1KxRMq8oIA0szFNuboe6Eo1c/ExnVPk1WHqTVQdbcj8KsqgiQMHqljvgCzKMwk2yRCELkQ/ydW7V7BkGYdETlSTaZKvacLVNxmbApL/sl4oy+wZASyoQkoPEhYoYJ2RIJmLiBGNoge05CID2EbUQG6oaPHYfsO4GUoVLFwsmHkMx967I3C143e+/jdTHMf36WsDH/EZ/59B0=</diagram></mxfile>
|
<mxfile host="Electron" modified="2023-03-30T16:13:26.473Z" agent="5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/20.8.16 Chrome/106.0.5249.199 Electron/21.4.0 Safari/537.36" etag="NBkm3Zraic1t1MOXaLR9" version="20.8.16" type="device"><diagram name="Seite-1" id="4AvssoyQ3F2APBzfr0LI">7VpZc9s2EP41mmkfnOGh81GWLDUzba3WTVI/QuSKhA0CGhA6f30AEbxEHVRk6sjkxSaWCwLc/b7dxVI1uxcshxxN/b+YC6RmGe6yZvdrlmUa7Yb8pySrSNKqdyKBx7GrlVLBC15DPFNLZ9iFMKcoGCMCT/NCh1EKjsjJEOdskVebMJJfdYo8KAheHESK0m/YFX4kbVutVP4HYM+PVzab+v0CFCvrNwl95LJFRmQ/1eweZ0xEV8GyB0QZL7ZLNG+w526yMQ5UlJnwz9uQfv7yL3prz+3OV3c47M/HD5Z2TyhW8RuDKw2gh4wLn3mMIvKUSh85m1EX1GMNOUp1/mRsKoWmFL6BECvtTTQTTIp8ERB9V+6Yr/5X8z814uGrftxm0F/mRis9Kr6ytkLIZtyBQ++poYO4B+KAntmOFJURMitoiw6BBSA3JBU4ECTwPI8SpMHmJXqpP+SFdskp7omeO0dkplca+SgEKZJm7Mp/fexhgddyK4wWPBkucEAQVS5b+FjAyxRtjLSQVM07ZK9h58AFLA9aQt+1Y5yvtsaLlDaWoWV+hjJWy6jIeqZ9ZXBbZ6L7ECaOQt4uC3nroyG/mdrlHK0yClOGqQgzTx4pQYqfZh4+5nY0O0ldXkTrp+BJXuTH8WQX2SjpNaNeTa0+2NAReRwFAWzY2STS7o9jLq88dfU8foN3EZmRUZCE7e1TkvwAGjo+mog9en/PxBr4pNaza489n0e7mKsoYPSRnBSoVEzUZOO3/15Hz/bDI3Legbq/y8d9g/HDgPFgRiTaCiTJU+Dk0HEwkpWOJ1vhpF6MJmZzRzQxzcqiSfO+U+VZwSQOEsejSeOmEmi87wxnBwDuWFJBSkfPd4F9s1US/HZl2K9fA/sVYfiDE10hNZn1Lfc1ttwSkUjPSj1zasYsrNM8nDKP6FeTM+N4kCHglyAEsY4SVjZVycyGAsWw6O995SdrR7l7YY627js/lT3KNUpmog9n+1neKdKgSyeMu6Aqt1AWcigMN5S4pTNcp+QRzuxUBerOVTC9xCIDaTl6zdxJAa0Gqyy6q6vT4jbNMXI0S5KjdVPkaBbI8ZkK4HMMC9VJw+JytVrM06rPKdWlAaNgp1+UOUSZVknK3FZnsFWgzIAjD8bM2xz5dV+Ay8sXgd7BZ0Smmrtg0I6kc1kGtQumHU0IdnxZqfowEXdhRPP6cWiHGXXv2sr0rhG5ye51c4f9dnev65UZ8Dq1T8Xd6xgWx7/YGCXjslXNsf4n7F/HJv3hBrZKKp3eGPiYY+pF89TXWcsYQuj46na3PhHhlLM1hCGEF4mVSaSpumZrV0X15Ox7p0f3M5lulWV6/aZKsHjfV+0tnw3+61cK1lU+01aF4ot3l60tv1TVXbZP7C7bl8ho9QIF46oyxMDjDMX3Zqg74ejVz0RWsUWTlAdxdZD09cNpUlVQJI1eqCO+AvcZTBRbFIIQ+bT5xK07PV06jZqh6iQbTZV7TpYpuEzaVOT9EgrO3qHHCONSQtnmEDHBhGyJJEw8KocOqHaTFCgPYQeRrr4RYNcl+04geagUsXDyISRx3yrvzYzX7fbHeF0O01+eRWxMf79nP30H</diagram></mxfile>
|
||||||
|
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 138 KiB |
@@ -1 +1 @@
|
|||||||
<mxfile host="Electron" modified="2023-03-26T23:37:16.282Z" agent="5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/20.8.16 Chrome/106.0.5249.199 Electron/21.4.0 Safari/537.36" etag="7Urq1FgtA6JGgQcA1dAV" version="20.8.16" type="device"><diagram id="C5RBs43oDa-KdzZeNtuy" name="Page-1">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</diagram></mxfile>
|
<mxfile host="Electron" modified="2023-03-29T16:39:31.942Z" agent="5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/20.8.16 Chrome/106.0.5249.199 Electron/21.4.0 Safari/537.36" etag="UFZe3OcaIXhOXbdWZBG0" version="20.8.16" type="device"><diagram id="C5RBs43oDa-KdzZeNtuy" name="Page-1">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</diagram></mxfile>
|
||||||
|
Before Width: | Height: | Size: 56 KiB After Width: | Height: | Size: 133 KiB |
@@ -1 +1 @@
|
|||||||
<mxfile host="Electron" modified="2023-03-26T23:36:35.951Z" agent="5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/20.8.16 Chrome/106.0.5249.199 Electron/21.4.0 Safari/537.36" etag="_-wEnMYMpQXMPcL-_eck" version="20.8.16" type="device"><diagram name="Seite-1" id="OQF_a6zVYjKttAf1AJ-S">5Vnbkto4EP0aHr0FNnjwIzBANgupbJHNXF5SwpZtBSF5ZZnLfP1Ktnw3l6lhBpKdKmpQq23LfU4fdYuWMVrvpgwE/pw6ELf0trNrGfctXe90rK74Jy17ZbEsI7F4DDnKlhsW6AUqY1tZI+TAsOTIKcUcBWWjTQmBNi/ZAGN0W3ZzKS4/NQAerBkWNsB16wNyuJ9Y+/pdbv8EkeenT+6YVjKzBqmzepPQBw7dFkzGuGWMGKU8+bbejSCW0Uvjklw3OTCbLYxBws+5YDFjd9N58HkBFiPY3/xFHqZjzVBohHyfvjF0RADUkDLuU48SgMe5dchoRBwob9sWo9xnRmkgjB1h/Ak53ys0QcSpMPl8jdWsWDHbP6rr48GTHPzRS4f3u+Lk/T4bOQOJqRguMbVXiWmCMFYO9ZioMIU0YjY8EghdcQswD/JjAVNoyigVnqBCPoV0DcWKhQODGHC0KdMIKDZ6mZ+6VLwW2BccAooIDwt3/ioNwkFllt5X60jzSu+VwX+dv/iSrCAdFV4lN8WEegW5VEw3AEcqDN8gwgT6a8hkhrRGRmto2j6HLd3EIurDpbCbnvz2ABGR8SBriB1IaizNOSgJtfURh4sAxBBvhRSV+eZSwhUZOyKiQw+DMFSUCTmjqyy3pXeWqHLaFeQaUUxZ/FgDxn/ZZYUZwzQswznGwQ1kHO6OkiadbZfRstRwmytQx1Q2v6A+d+3DNCtA/XokuzUkv8T4vFE6ChA1CEajsBSh7JwjCWKk/Pun0cZgCfEQ2CsvXmgKL6EEvkG2DjLipIik2apwfZ2m5CKQulDXDYW6HRWKXpl62bPTeyQKqa6q0OoCmmHWmKaUAIW8rhKAeDAWCP7/FojORyrEJzL9we96XyxtvnTc1erbczTVOjUAbriOKML9znVFWi+cLCy652rC2SLwJsVP111IRLldW6brCi3U25+Bz2AIonALfBwwuoREm4kchQSQEIk9/W0JeYEcyXbNK2yif47ureGODsHzfNhzpovdzO6nKVKMqBI0B21SRcs0rhQ889+IxtZsa9LsRFkG8qkEcQRwcrXyTO/3z6M2wYLZelsTH6mlSUkVEa/wNPE+y+oKhK1hXe+4VLk4DIT/nIZxGzkWYwRdyMRiwy1kqxcYeceWnG8Mh17iICfbZ2wSBaVXFUFZ5JXxAtytUFfT69zVm7hrvpe8X7dNzAa3J+/WufJu3pa8WzUxmsTt2AhjqIRCq6fVPRACHwL+ItcUhVfX+G61rb16HaRfI1E+kPBpmXL6oMS6KcJ3G3dftQOpFmOQHTakE9ochKuG04kNJY01UMNGFJ9xyKLpjWcY75AtV08W63dPFvPMZLmtzaFbb8InlK0jDOSxHViGto/s1Q0Qulonfaj8R3w+Huy/Pz87Xzs2/vn8N5v1Gmr8hQBfNEOTMXGCiKwud1DR/wXOKbp6BaA6PncN8OjvBU/9RHqw4ohe7nj5laBcIMS96lHQtUN8uM2VcWrsFeu94MlL5IQWxkGXfWU/2DX3lCL5YPxDQuQWesLktmc0j2XH6maFMQpCeJog5UQss+USFKhWwR9HgSVx9d1+tHj6zramNZitH59+NIjgDHpiT02wqgRRvCOvRKupqW5ovgFGHhFDW0QOMlmViYghG+CBmlgjx8GH4CnXEdWi4AAEDUCdrX1aAyy9y8AihvnvyMlJfP5zvDH+Dw==</diagram></mxfile>
|
<mxfile host="Electron" modified="2023-03-30T16:34:31.425Z" agent="5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/20.8.16 Chrome/106.0.5249.199 Electron/21.4.0 Safari/537.36" etag="TQ0JShpZqPYf8JSQ05lG" version="20.8.16" type="device"><diagram name="Seite-1" id="OQF_a6zVYjKttAf1AJ-S">5Vnbkto4EP0aHr2FbTD4kXs2C6lskc3M8JIStrAVhMTKMpf5+pVs+YYNAzUwkOxUUYNaLUvuc/q0JGpmb7UbMbD2J9SFuGbU3V3N7NcMQ9fthvgnLXtlsW0ztngMucqWGaboFSpjXVlD5MKg4MgpxRyti0aHEgIdXrABxui26LaguDjrGniwZJg6AJetT8jlfmxtG63M/gkiz09m1i077lmBxFm9SeADl25zJnNQM3uMUh5/W+16EMvoJXGJxw2P9KYLY5DwcwZMx6w1mqw/T8G0B9ubv8jTaKCZCo2A75M3hq4IgGpSxn3qUQLwILN2GQ2JC+Vj66KV+YwpXQujLow/Ied7hSYIORUmn6+w6hUrZvtnNT5qvMjGH82k2d/lO/v7tOV2JKaiOcfUWcamIcJYOZRjosIU0JA58EQgDMUtwDzITwVMoSmjlJtBhXwE6QqKFQsHBjHgaFOkEVBs9FI/NVS8FtjnHNYUER7knvxVGoSDyiyjrdaR5JXRLIJ/mb/4Eq8gaeVeJTNFhLqAXCqmG4BDFYZvEGEC/RVkMkNqPbPWtRyfw5phYRH17lzYLU9+e4KIyHiQFcQuJCWWZhyUhNr6iMPpGkQQb4UUFfm2oIQrMuoiol0PgyBQlAk4o8s0t6V3mqiyeyHI1aOYsmhaE0Z/6bBcj2mZtume4uAGMg53J0mT9NaLaNmquc0USLeUzc+pT6t+nGY5qC9HslFC8kuEzzulIwdRhWBUCkseSv0cSRAt5d9+G20M5hB3gbP0ooUm8BJK4Dtk6ygj3hSRJFsVrpdpSiYCiQtdLAKhbieFolmkXjp38oxYIdWoA1pdQTOsEtOUEqCAl1UCEA9GAsH/3wKhf6RCfCKjH7zV/GJrk7m7WC6/zcKRppcAeOB9RB7uG+8rkv3CmxuLxrmacLYIvEvxk3XnElGWa9taLIQWGvXPwGcwAGGwBT5eMzqHRBuLHIUEkACJmv6+hLxCjqRV8w5F9M9e3+7uaBfMJt2mO5ruxk47SZF8RJWguWiTKFqqcYXgWf+GNLKmpUlzYmXpyFkJ4gjgeLTyTJ73z7M2xILZRl0TH6ml8ZYqJF40OJ5NvM/8cAXCVrGuGy5VLg4D4T+hQXSMrODYFrLlKwy9UwvPysOxVznKzPoZpSKn92pfUJR6ZbwCgw8IrBllBptmBYOtW4n8fQ+LaePxRN4+V+StxxJ5uyRJw+hQ1sMYKrnQymnVB0LmA8Bf5ZrC4O5K3zg83N59N2TcI1E+kPDJZuXt6xL7oQjfqKzBqg6pg0YnvXJIOrQJCJYVdxQbSiqrVEUhim465NbpnTcZN8iWuyeL/bsni3VmsjxWcWiUj+JDylYhBvLyDswDx0fO8gEIfbhP+lD5D/lk0Nl/n83cr7qDf87+ZuNmxU5/KsAXR6LhgLjrkCyvd13R/gVuKxqHAJXxaVXAY9wKnvK9dGfJEb3eJfOFoFwhxM3W3UI8Jwtjt+9NX76zrWV3xqvnlx8VGTCGnhBUGB0DD8Is3pEXY1l5oqo4eQGMPCKajogcZLIki4ghB+CO6lgh140KRhV4xSJyWBFuQHytApbmdWARzeynxPgyNvtF1hz8Bw==</diagram></mxfile>
|
||||||
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 78 KiB |
@@ -2,6 +2,8 @@
|
|||||||
% Selbstständigkeitserklärung
|
% Selbstständigkeitserklärung
|
||||||
%
|
%
|
||||||
|
|
||||||
|
%\includepdf[pages=-]{images/selbststaendigkeitserklaerung.pdf}
|
||||||
|
|
||||||
\chapter*{Selbstständigkeitserklärung}
|
\chapter*{Selbstständigkeitserklärung}
|
||||||
|
|
||||||
Hiermit erkläre ich, dass ich die vorliegende Arbeit selbstständig und ohne Benutzung anderer als der angegebenen Hilfsmittel angefertigt habe.
|
Hiermit erkläre ich, dass ich die vorliegende Arbeit selbstständig und ohne Benutzung anderer als der angegebenen Hilfsmittel angefertigt habe.
|
||||||
|
|||||||