generated from leonetienne/LaTeX-Paper-template
feat: feeedback 2
This commit is contained in:
parent
00f5f28ed6
commit
e2db47a588
@ -22,15 +22,15 @@ Wie oben erwähnt, sind bereits die Constraints und einige funktionale und nicht
|
||||
\hdashline
|
||||
Constraint & Nutzer-UI im Frontend\\
|
||||
\hdashline
|
||||
\ac{NFA} & \makecell[l]{Aus dem Papierformular soll ein\\Webformular werden}\\
|
||||
\ac{NFA} & \makecell[l]{Aus dem Papierformular soll ein\\Webformular werden.}\\
|
||||
\hdashline
|
||||
\ac{NFA} & \makecell[l]{Angaben zum Weingut des Weines\\sollen aus dem Accountdatensatz anstatt\\aus dem Webform kommen}\\
|
||||
\ac{NFA} & \makecell[l]{Angaben zum Weingut des Weines\\sollen aus dem Accountdatensatz anstatt\\aus dem Webform kommen.}\\
|
||||
\hdashline
|
||||
\ac{NFA} & \makecell[l]{Registrierte Weinteilnahmen\\bestehen aus einem Wein und einem Zustand\\(Ausstehend,Eingegangen,Abgelehnt).}\\
|
||||
\ac{NFA} & \makecell[l]{Registrierte Weinteilnahmen\\bestehen aus einem Wein und einem Zustand\\(ausstehend,eingegangen,abgelehnt).}\\
|
||||
\hdashline
|
||||
\ac{FA} & \makecell[l]{Beim Erstellen einer Weinteilnahme\\soll ein QR-Code als PDF generiert werden,\\der den Wein identifiziert}\\
|
||||
\ac{FA} & \makecell[l]{Beim Erstellen einer Weinteilnahme\\soll ein QR-Code als PDF generiert werden,\\der den Wein identifiziert.}\\
|
||||
\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}\\
|
||||
\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
|
||||
\end{tabular}
|
||||
\caption{Initial bekannte Anforderungen}
|
||||
@ -42,7 +42,7 @@ Um nähere Anforderungen zu ermitteln, werden die Befragungstechniken \enquote{I
|
||||
|
||||
\section{Interview mit Product Owner}
|
||||
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 konkrete Anforderungen zu formulieren.
|
||||
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,
|
||||
aber auch Freiraum für Improvisation und Persönlichkeit.
|
||||
@ -83,7 +83,7 @@ Aus dem Interview mit dem \ac{PO} ergibt sich ein Pflichtenheft.
|
||||
Das Pflichtenheft und das Protokoll zum Interview sind im Anhang unter je
|
||||
\fullref{chap:anhang-pflichtenheft} und \fullref{chap:anhang-interview-protokoll} zu finden.
|
||||
|
||||
Ergebnis dieses Interviews sind zahlreiche Anforderungen und Ideen. Eine der wichtigsten Ideen stellt das
|
||||
Ergebnisse 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
|
||||
des Projektes vorgestellt, diskutiert und Rücksprache gehalten werden.
|
||||
|
||||
@ -97,7 +97,7 @@ Die wichtigsten Erkenntnisse des Interviews sind:
|
||||
\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
|
||||
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.
|
||||
Diese Weine sind ebenso anklickbar und führen zu einer Einzelansicht der Weine.
|
||||
\item[Genaue Nutzerführung für Teilnehmer]\hfill\\
|
||||
@ -111,8 +111,8 @@ Die wichtigsten Erkenntnisse des Interviews sind:
|
||||
Sonstige Aktionen sind im TYPO3-Backend mit nativen Werkzeugen erreichbar.
|
||||
\item[Verschiedene Web-Ansichten]\hfill
|
||||
\begin{itemize}
|
||||
\item Jahreauswahlproben-ListView
|
||||
\item Jahreauswahlproben-SingleView
|
||||
\item Jahreauswahlproben-Listenansicht
|
||||
\item Jahreauswahlproben-Detailansicht
|
||||
\item Wein-Registrierungsformular
|
||||
\item PDF-Url für Versandbriefe
|
||||
\item Registrierungsseite mit mehreren Schritten
|
||||
|
@ -102,4 +102,8 @@ Hierbei muss jedoch berücksichtigt werden, dass es sich hierbei um nur ein konk
|
||||
verallgemeinerbare Schlüsse gezogen werden können. Eine Forschungsempfehlung ist es daher, weitere Möglichkeiten
|
||||
zur Integration verschiedener Teilprozesse zu recherchieren.
|
||||
|
||||
%\paragraph*{Welche Endgeräte verwenden Weingüter und 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.
|
||||
|
||||
%\paragraph*{Wie können unangemessen hohe Entwicklungskosten vermieden werden?}
|
||||
|
@ -14,7 +14,7 @@ TYPO3-Extension darstellt, lokal in den versionierten Ordner \enquote{packages}
|
||||
Dieses Verzeichnis wird als Quelle für Composer-Pakete in der
|
||||
Haupt-composer.json-Datei hinterlegt.
|
||||
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
|
||||
@ -31,15 +31,15 @@ Das bedeutet, dass in dieser Phase Datenobjekte definiert und implementiert werd
|
||||
Ein Datenobjekt besteht nach firmeninternen Konventionen aus zumindest
|
||||
vier Komponenten:
|
||||
\begin{description}
|
||||
\item{Datenbanktabelle} \\
|
||||
\item{\textbf{Datenbanktabelle}} \\
|
||||
Die Datenbanktabelle persistiert Informationen.
|
||||
\item{Domain Model} \\
|
||||
\item{\textbf{Domain Model}} \\
|
||||
Das Domain Model (auch Model genannt) ist eine PHP-Klasse,
|
||||
die jeweils die Daten einer Zeile der Datenbanktabelle abbildet.
|
||||
\item{Repository} \\
|
||||
\item\textbf{{Repository}} \\
|
||||
Ein Repository ist eine PHP-Klasse, die die Schnittstelle
|
||||
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
|
||||
und bearbeitbar sind.
|
||||
\end{description}
|
||||
@ -72,10 +72,10 @@ Rebsorten, Geschmack, Weineigenschaften und Qualität sollen eigene Datentypen
|
||||
anstatt einfacher Zeichenfolgen sein.
|
||||
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.
|
||||
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.
|
||||
Je Wein sollen beliebig viele Weineigenschaften auswählbar sein, Wettbewerbskategorien,
|
||||
Geschmacksrichtung, etc, jeweils nur ein Element.
|
||||
Je Wein sollen beliebig viele Weineigenschaften auswählbar sein. Wettbewerbskategorien,
|
||||
Geschmacksrichtung, etc, sind jeweils nur ein Element.
|
||||
Weitere Notizen zu diesem Gespräch sind im Anhang unter \fullref{chap:anhang-notizen-digitization}
|
||||
zu finden.
|
||||
\\
|
||||
@ -130,7 +130,7 @@ anbei in \fullref{chap:anhang-anmeldeformular}.
|
||||
\label{fig:uxflow-registrierung}
|
||||
\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.
|
||||
Accountregistrierungen werden über den
|
||||
\enquote{femanager} \cite{bib:typo3-docs-femanager} realisiert, während Logins via TYPO3s nativem
|
||||
@ -205,8 +205,8 @@ Es gilt also, dass ein MasterRecord $a$ die Teilnehmer\ac{UID} von einem Teilneh
|
||||
$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,
|
||||
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
|
||||
bekannt machen um sie danach erneut zu persistieren.
|
||||
Die Lösung hierfür ist, beide Elemente zu erstellen und zu persistieren und erst danach ihre \acp{UID} gegenseitig
|
||||
bekannt zu machen um sie anschließend erneut zu persistieren.
|
||||
|
||||
\subsection{Weinregistrierung}
|
||||
Ein Basismerkmal des Jahresauswahlprobenwerkzeuges ist die Möglichkeit, Weine zu Jahresauswahlproben
|
||||
@ -218,8 +218,8 @@ Zugriff auf eine Auflistung aller zeitlich freigegebenen Jahresauswahlproben.
|
||||
Soweit der Registrierungszeitraum dieser Jahresauswahlprobe den aktuellen Zeitpunkt miteinschließt,
|
||||
wird eine \enquote{Jetzt Wein anmelden}-Schaltfläche angeboten.
|
||||
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
|
||||
Mitarbeitern bearbeitet werden müssen. Davon profitiert \ac{WM}, da diese Zeit nun anderweitig genutzt werden kann.
|
||||
der seitens \ac{WM} für Anmeldungen geleistet werden muss. Das ist so, da diese Formular nun nicht mehr von
|
||||
Mitarbeitern bearbeitet werden müssen. Davon profitiert \ac{WM}, da diese Zeit nun für andere Aufgaben genutzt werden kann.
|
||||
|
||||
\begin{nicepic}
|
||||
\includegraphics[width=0.9\textwidth]{images/ux-flow-teilnahme.png}
|
||||
@ -292,7 +292,7 @@ Das ist so, da das in der Rekursion weitergereichte Problem nicht kleiner wird,
|
||||
sondern gleich groß bleibt.
|
||||
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}.
|
||||
Der Algortihmus besteht aus $m, m \in \mathbb{N}$ verschachtelten For-Schleifen
|
||||
Der Algorithmus besteht aus $m, m \in \mathbb{N}$ verschachtelten For-Schleifen
|
||||
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.
|
||||
|
||||
@ -333,14 +333,14 @@ Formfeld-IDs des Formfeldparameter-Arrays heraus, die den Wert \enquote{<formfel
|
||||
aller Formfeld-IDs der Checkboxen des SelectMultiples, die angehakt wurden.
|
||||
Mit der eingebauten PHP-Funktion \enquote{array\_map} wird nun eine Operation auf alle Schlüssel
|
||||
der Liste angewandt, die \enquote{strlen('formfeldname-')} Zeichen, von links ausgehend, von der Formfeld-ID
|
||||
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.
|
||||
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 Zeichenkette.
|
||||
Ü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.
|
||||
|
||||
\subsection{PDF- und QR-Code-Generierung}
|
||||
Das dynamische Erstellen und Ausgeben des Versandbeilageblattes als PDF ist ein essenzieller Bestandteil des
|
||||
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 PDF stark eingeschränkt, da
|
||||
einkommende Weine händisch, von Mitarbeitern, zugeordnet werden müssten.
|
||||
Wie im \fullref{chap:stand-der-forschung} erläutert, werden für die dynamische
|
||||
Generierung dieses PDFs die Bibliotheken \enquote{chillerlan/php-qrcode} und
|
||||
@ -348,43 +348,44 @@ Generierung dieses PDFs die Bibliotheken \enquote{chillerlan/php-qrcode} und
|
||||
|
||||
\subsubsection{QR-Code-Generierung}
|
||||
Der QR-Code beinhaltet lediglich die Wein-\ac{UID} anstatt einer vollständigen URL. Hintergrund dessen 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.
|
||||
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 Resourcen zu sparen und somit den Gewinn zu erhöhen, wird der QR-Code zu einem Base64-kodiertem Bild gerendert.
|
||||
Das ist der Standardrückgabewert des QR-Code-Generators
|
||||
und erfordert somit keine nähere Konfiguration. Ebenfalls lässt sich ein Base64-kodiertes Bild als Quellurl eines
|
||||
IMG-HTML-Tags angeben, womit das Bild eingebettet ist. Hier wird der Profit erhöht, indem Arbeitszeit gespart wird,
|
||||
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 Gewinn erhöht, indem Arbeitszeit gespart wird,
|
||||
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.
|
||||
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}.
|
||||
|
||||
\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
|
||||
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,
|
||||
diese mit TYPO3-Fluid befüllt wird 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,
|
||||
die in Fluid verfügbar sein sollen und anschließend über die \enquote{render}-Methode zu einem String gerendert
|
||||
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 einer Zeichenkette gerendert
|
||||
\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
|
||||
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}
|
||||
als 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.
|
||||
Über dieses Response-Objekt werden einige Header gesetzt und direkt übertragen. Dieser 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
|
||||
Ü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 übertragen. Damit ist die Verbindung beendet und das
|
||||
PDF zum Nutzer übertragen.
|
||||
|
||||
\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
|
||||
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 berechtiger Weine
|
||||
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
|
||||
Sichtbarkeitszeitraumes der Jahresauswahlprobe befindet.
|
||||
Detailansichten für Weine sind immer für den zugehörigen Teilnehmer einsichtig.
|
||||
@ -392,15 +393,15 @@ Nach Abschluss einer Jahresauswahlprobe sind alle ihr angehörigen Weine öffent
|
||||
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.
|
||||
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.
|
||||
Die Wein-Detailseite verfügt außerdem über einen \enquote{Versandetikett drucken}-Button, der auf das Versand-PDF verlinkt.
|
||||
Mitarbeiter von Weinland Mosel, wenn sie mit einem solchen Account angemeldet sind, haben immer Einsicht in Wein-Detailansichten.
|
||||
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.
|
||||
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
|
||||
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
|
||||
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}.
|
||||
|
||||
|
||||
\section{Digitalization}
|
||||
@ -450,18 +451,22 @@ Um gut wartbaren PHP-Code zu erzeugen, werden alle CSV-Zeilen in einem zweidimen
|
||||
der das gesamte CSV-Dokument darstellt,
|
||||
durch alphanumerisch indizierte, innere Arrays abgebildet. Somit ist bei jeder Wertzuweisung der zugehörige Spaltenname ersichtlich.
|
||||
Über die nativen PHP-Funktionen \enquote{array\_keys} und \enquote{array\_values} wird dieser zwar gut lesbare,
|
||||
aber mit \enquote{fputcsv} inkompatibler
|
||||
Array zu einer Reihe kompatibler Array konvertiert. Hierbei werden durch \enquote{array\_values} die Kopfzeile und durch
|
||||
aber mit \enquote{fputcsv} inkompatible
|
||||
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}
|
||||
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.
|
||||
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
|
||||
angeboten. Das erspart das manuelle Kopieren und Abspeichern von CSV-Code von IT-Fachfremden, reduziert damit die Anzahl
|
||||
an benötigten Übergangsschritten in weitere Prozesse und reduziert somit die Komplexität der Umstellung.
|
||||
Um Weinland Mosel weitere Arbeitszeit zu ersparen wird eine Download-Funktion für CSV-Dateien
|
||||
angeboten. Das erspart das manuelle Kopieren und Abspeichern von CSV-Zeichenketten durch IT-Fachfremde, reduziert damit die Anzahl
|
||||
an benötigten Übergangsschritte in weitere Prozesse und reduziert somit die Komplexität der Umstellung.
|
||||
Auch im Interesse, Arbeitszeit in der Umsetzung zu sparen,
|
||||
wurde diese Downloadfunktion JavaScript-seitig umgesetzt. Dadurch ist der Download in derselben Action implementiert.
|
||||
Somit muss weder abstrahiert werden, noch ein weiterer Exporter gebaut werden.
|
||||
wurde diese Downloadfunktion JavaScript-seitig umgesetzt.
|
||||
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
|
||||
\enquote{a}-Element erstellt, über das \enquote{download}-Attribut den Download-Dateinamen festlegt und als \enquote{href}-Attribut
|
||||
eine Blob-Url zuweist. Diese Blob-Url wird über ein Blob-Objekt generiert \cite{bib:tutorialspoint-js-save-text}.
|
||||
\enquote{a}-Element erstellt, über das HTML-Attribut \enquote{download} des \enquote{a}-Elementes den Download-Dateinamen
|
||||
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}.
|
||||
|
@ -10,7 +10,7 @@
|
||||
\newcommand{\cfgDocClassification}{Abschlussarbeit}
|
||||
|
||||
% Document version
|
||||
\newcommand{\cfgDocVersion}{1.5}
|
||||
\newcommand{\cfgDocVersion}{1.7}
|
||||
|
||||
% Last modification date
|
||||
\newcommand{\cfgDateLastModification}{22. Dezember 2022}
|
||||
|
Loading…
x
Reference in New Issue
Block a user