Entwicklung eines computergestützten „Critical Incident ... - Risikous
Entwicklung eines computergestützten „Critical Incident ... - Risikous
Entwicklung eines computergestützten „Critical Incident ... - Risikous
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
HOCHSCHULE ZITTAU/GÖRLITZ (FH)<br />
FACHBEREICH INFORMATIK<br />
<strong>Entwicklung</strong> <strong>eines</strong> <strong>computergestützten</strong><br />
<strong>„Critical</strong> <strong>Incident</strong> Reporting System“ für das<br />
Klinikum Görlitz<br />
Diplomarbeit<br />
zur Erlangung des Grades <strong>eines</strong> Diplom-Informatikers (FH)<br />
des Studienganges Allgemeine Informatik<br />
der Hochschule Zittau/Görlitz (FH)<br />
vorgelegt von:<br />
Lars Rönisch<br />
geboren am 24. August 1978 in Görlitz.<br />
Stephan Schnabel<br />
geboren am 09. Mai 1984 in Görlitz.<br />
Referent:<br />
Prof. Dr. rer. nat. Christian Wagenknecht<br />
Görlitz, 14.10.2007
Danksagung<br />
An dieser Stelle bedanken wir uns bei den Menschen, die uns bei der Erstellung<br />
der Diplomarbeit in vielfältiger Weise unterstützt haben. Bei Herrn Prof. Dr. rer.<br />
nat. Christian Wagenknecht bedanken wir uns für die angenehme Betreuung der<br />
Arbeit und für die konstruktiven Vorschläge während der Umsetzung.<br />
Wir danken allen Mitgliedern der Projektgruppe CIRS des Klinikum Görlitz für<br />
ihre tatkräftige Unterstützung bei der <strong>Entwicklung</strong> des Softwaresystems. Bei<br />
Herrn Prof. Dr. med. habil. Ekkehart Paditz, Geschäftsführer des Klinikum Görlitz,<br />
bedanken wir uns für die gute Zusammenarbeit. Frau Ursula Reiche und<br />
Herrn Alexander Goertchen danken wir für die angenehmen und konstruktiven<br />
Gespräche und für die Bereitstellung von Unterlagen zum Thema Qualitäts- und<br />
Risikomanagement im klinischen Bereich.<br />
Dank gilt der Firma Protec aus Würzburg, die den Meldebogen für das System<br />
zur Verfügung stellte und eine Forschungskooperation mit der Hochschule Zittau/Görlitz<br />
eingegangen ist.<br />
Herzlicher Dank gebührt allen Studenten, die mit Ideen und Kritiken zu diesem<br />
Projekt beigetragen haben. Auch unseren Kommilitonen Fabian Schlegel,<br />
Richard Krüger und Timotheus Israel danken wir für ihre Verbesserungsvorschläge<br />
während der Implementierung.<br />
Lars Rönisch dankt<br />
Dank gebührt meinen Eltern, die mir dieses Studium durch ihre Unterstützung<br />
in jeglicher Hinsicht ermöglicht haben.<br />
Meiner Lebensgefährtin Manuela Schmidt danke ich ganz besonders für ihr Verständnis<br />
und ihre Geduld, gerade im letzten Abschnitt m<strong>eines</strong> Studiums.<br />
Stephan Schnabel dankt<br />
Ich danke meinen Eltern, die mir das Studium der Informatik ermöglicht haben.
Ein besonderer Dank gilt Henry Talke, für die Unterstützung während m<strong>eines</strong><br />
Studiums.
Inhaltsverzeichnis<br />
1 Einleitung 12<br />
1.1 Problembeschreibung . . . . . . . . . . . . . . . . . . . . . . . . . . . 12<br />
1.2 Zielsetzung und Vorgehensweise . . . . . . . . . . . . . . . . . . . . . 12<br />
1.3 Begriffsdefinitionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13<br />
2 Risikomanagement 16<br />
2.1 Klinisches Risikomanagement . . . . . . . . . . . . . . . . . . . . . . 17<br />
2.2 Risikomanagement-Prozess . . . . . . . . . . . . . . . . . . . . . . . . 18<br />
2.3 Fehler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23<br />
2.3.1 Fehlerquelle „Mensch“ . . . . . . . . . . . . . . . . . . . . . . . . . . . 23<br />
2.3.2 Fehlermeldesysteme . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25<br />
3 <strong>Entwicklung</strong> CIRS für das Klinikum GR 28<br />
3.1 Ausgangssituation im Klinikum GR . . . . . . . . . . . . . . . . . . . 28<br />
3.2 <strong>Entwicklung</strong>sziele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31<br />
3.3 Anforderungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32<br />
3.3.1 CIRS Szenario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32<br />
3.3.2 funktionale Anforderungen . . . . . . . . . . . . . . . . . . . . . . . . 34<br />
3.3.3 nichtfunktionale Anforderungen . . . . . . . . . . . . . . . . . . . . . 34<br />
3.3.4 Akteure und Rechte im System . . . . . . . . . . . . . . . . . . . . . . 35<br />
3.3.5 Anwendungsfälle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36<br />
3.3.6 <strong>Entwicklung</strong> der Benutzungsoberfläche . . . . . . . . . . . . . . . . . 39<br />
3.4 Softwaredesign . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.4.1 Basis-Module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43<br />
3.4.2 CIRS-Module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46<br />
4 Auswahl geeigneter Mittel 48<br />
4.1 Client-Server-Architektur . . . . . . . . . . . . . . . . . . . . . . . . . 48<br />
4.2 Webanwendungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49<br />
4.3 Webanwendungen mit Java . . . . . . . . . . . . . . . . . . . . . . . . 50<br />
4.4 Vegleich von Webframeworks für das CIRS . . . . . . . . . . . . . . . 52<br />
4.4.1 Apache Struts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53<br />
4.4.2 Apache Struts2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55<br />
4.4.3 Spring Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57<br />
4.4.4 Apache Cocoon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58<br />
4.4.5 Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60<br />
5 Implementierung 63<br />
5.1 Architektur und Komponenten . . . . . . . . . . . . . . . . . . . . . . 63<br />
5.2 Persistierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64<br />
5.3 Meldebogenrepräsentation . . . . . . . . . . . . . . . . . . . . . . . . 66<br />
5.3.1 Aufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67<br />
5.3.2 XML-Schema des Meldebogens . . . . . . . . . . . . . . . . . . . . . . 69<br />
5.4 Benutzungsoberfläche - Ergonomie . . . . . . . . . . . . . . . . . . . 69<br />
5.5 Internationalisierung des CIRS . . . . . . . . . . . . . . . . . . . . . . 72<br />
5.6 Erzeugen von PDF-Dateien . . . . . . . . . . . . . . . . . . . . . . . . 73<br />
6 Einsatzerprobung 76<br />
7 Ergebnisse und Ausblick 78<br />
7.1 Vorstellung ausgewählter Resultate . . . . . . . . . . . . . . . . . . . 78<br />
7.2 Ausblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82<br />
A Funktionsweise der Webframeworks 84<br />
A.1 Apache Struts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
A.2 Apache Struts2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87<br />
A.3 Spring-MVC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90<br />
A.4 Apache Cocoon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92<br />
B Zusätzliche Quellcodebeispiele 94<br />
B.1 XML-Meldebogen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94<br />
B.2 Benutzungsoberfläche - Ergonomie . . . . . . . . . . . . . . . . . . . 97<br />
B.3 PDF erstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102<br />
C Dokumentationen 107<br />
C.1 <strong>Entwicklung</strong>sdokumentation . . . . . . . . . . . . . . . . . . . . . . . 107<br />
C.2 Benutzungsdokumentation . . . . . . . . . . . . . . . . . . . . . . . . 108<br />
C.3 Installationsdokumentation . . . . . . . . . . . . . . . . . . . . . . . . 109<br />
D Datenträgerbeschreibung 110<br />
Literaturverzeichnis 112
Abbildungsverzeichnis<br />
2.1 Risiko etymologisch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17<br />
2.2 Risikomanagement-Prozess . . . . . . . . . . . . . . . . . . . . . . . . 19<br />
2.3 Risikomatrix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21<br />
2.4 Tabelle 2 Berliner Ärzte Nov. 2001 . . . . . . . . . . . . . . . . . . . . . 24<br />
3.1 QM-Organigramm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30<br />
3.2 Integration von <strong>Risikous</strong> im Klinikum . . . . . . . . . . . . . . . . . . 33<br />
3.3 Use Case <strong>Risikous</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37<br />
3.4 Use Case Risikomanagement . . . . . . . . . . . . . . . . . . . . . . . . 38<br />
3.5 GUI-Mockup Meldebogen . . . . . . . . . . . . . . . . . . . . . . . . . 40<br />
3.6 GUI-Mockup MessageReader . . . . . . . . . . . . . . . . . . . . . . . 41<br />
3.7 Softwaredesign – Meldebogen . . . . . . . . . . . . . . . . . . . . . . . 43<br />
4.1 Client-Server Kommunikation . . . . . . . . . . . . . . . . . . . . . . . 49<br />
4.2 Drei-Tier-Architektur . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52<br />
4.3 Übersicht Spring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58<br />
5.1 <strong>Risikous</strong> Systemarchitektur . . . . . . . . . . . . . . . . . . . . . . . . . 64<br />
5.2 Klassendiagramm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65<br />
5.3 Erzeugen von PDF-Dateien . . . . . . . . . . . . . . . . . . . . . . . . . 74<br />
7.1 Benutzungsoberfläche Mitarbeiter . . . . . . . . . . . . . . . . . . . . . 79<br />
7.2 MessageReader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80<br />
7.3 MessageReader Bewertung . . . . . . . . . . . . . . . . . . . . . . . . . 81
7.4 Auswertung PDF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81<br />
A.1 Systemaufbau Struts1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85<br />
A.2 Systemaufbau Struts2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88<br />
A.3 Bearbeitung <strong>eines</strong> Request . . . . . . . . . . . . . . . . . . . . . . . . . 90<br />
A.4 Pipeline-Architektur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92<br />
B.1 Grafische Darstellung des XML-Schemas . . . . . . . . . . . . . . . . . 97
Quellcodeverzeichnis<br />
5.1 XML Meldebogen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67<br />
5.2 Ausschnitt aus der Period JSP . . . . . . . . . . . . . . . . . . . . . . . 70<br />
5.3 Login – Validation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71<br />
5.4 package.properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73<br />
B.1 XML-Schema des Meldebogens . . . . . . . . . . . . . . . . . . . . . . 94<br />
B.2 Layout JSP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97<br />
B.3 Tiles Konfigurationsfile . . . . . . . . . . . . . . . . . . . . . . . . . . . 99<br />
B.4 createQuestionnaire() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102<br />
B.5 createPdf() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
Abkürzungsverzeichnis<br />
ALARP . . . . . . .<br />
API . . . . . . . . . . .<br />
CIRS . . . . . . . . . .<br />
CSS . . . . . . . . . . .<br />
DAO . . . . . . . . . .<br />
DB . . . . . . . . . . . .<br />
DTD . . . . . . . . . .<br />
DTO . . . . . . . . . .<br />
ERS . . . . . . . . . . .<br />
FOP . . . . . . . . . . .<br />
gGmbH . . . . . . .<br />
GmbH . . . . . . . .<br />
GR . . . . . . . . . . . .<br />
GUI . . . . . . . . . . .<br />
HQL . . . . . . . . . .<br />
HTML . . . . . . . .<br />
HTTP . . . . . . . . .<br />
IRS . . . . . . . . . . .<br />
JSP . . . . . . . . . . . .<br />
MVC . . . . . . . . . .<br />
As Low As Reasonably Practicable<br />
Application Programming Interface<br />
Critical <strong>Incident</strong> Reporting System<br />
Cascading Style Sheet<br />
Data Access Object<br />
Datenbank<br />
Document Type Definition<br />
Data Transfer Object<br />
Error Reporting System<br />
Formatting Objects Processor<br />
gemeinnützige Gesellschaft mit begrenzter Haftung<br />
Gesellschaft mit begrenzter Haftung<br />
Görlitz<br />
Graphical User Interface<br />
Hibernate Query Language<br />
HyperText Markup Language<br />
HyperText Transfer Protocol<br />
<strong>Incident</strong> Reporting System<br />
JavaServer Pages<br />
Model View Controll
OGNL . . . . . . . . Object Graph Navigation Language<br />
OP . . . . . . . . . . . . Operationssaal<br />
ORM . . . . . . . . . Object Relational Mapping<br />
PDF . . . . . . . . . . . Portable Document Format<br />
POJO . . . . . . . . . Plain Old Java Object<br />
PS . . . . . . . . . . . . PostScript<br />
QM . . . . . . . . . . . Qualitätsmanagement<br />
RM . . . . . . . . . . . Risikomanagement<br />
SVG . . . . . . . . . . Scalable Vector Graphics<br />
UML . . . . . . . . . . Unified Modeling Language<br />
URL . . . . . . . . . . Uniform Resource Locator<br />
W3C . . . . . . . . . . World Wide Web Consortium<br />
WYSIWYG . . . . What You See Is What You Get<br />
XML . . . . . . . . . . eXtensible Markup Language<br />
XSL . . . . . . . . . . . eXtensible Stylesheet Language<br />
XSL-FO . . . . . . . eXtensible Stylesheet Language Formatting Objects<br />
XSLT . . . . . . . . . . eXtensible Stylesheet Language Transformation
- 12 -<br />
1 Einleitung<br />
1.1 Problembeschreibung<br />
Critical <strong>Incident</strong> Reporting Systeme entwickeln sich in den letzten Jahren in<br />
Deutschland und in Europa zu einem Thema, welches in den Krankenhäusern,<br />
aber auch in den Versicherungsunternehmen große Aufmerksamkeit erfährt. Die<br />
Praxis zeigt jedoch, dass bei Einführung, Umsetzung und Integration in das bestehende<br />
Risikomanagement solcher Systeme oft große Hürden zu überwinden<br />
sind. Computergestützte Systeme die den CIRS-Prozess abbilden und den Risikomanagementprozess<br />
unterstützen bieten Möglichkeiten, um erfolgreich kritische<br />
Ereignisse zu vermeiden, eine Fehlerkultur zu entwickeln und dabei die<br />
Kosten überschaubar zu halten.<br />
1.2 Zielsetzung und Vorgehensweise<br />
Das Ziel dieser Arbeit soll es sein, ein computergestütztes CIRS für das Melden<br />
von Beinahefehlern zu entwickeln. Dabei soll die Software auch den Risikomanagementprozess<br />
im Klinikum Görlitz unterstützen, die Patientensicherheit erhöhen<br />
und gleichzeitig Kosten einsparen. Um diese Ziele entsprechend effektiv<br />
verwirklichen zu können, wurde ein Kooperationsvertrag zwischen Klinikum<br />
Görlitz, der Firma Protec aus Würzburg und der Hochschule Zittau/Görlitz geschlossen.
- 13 -<br />
Basis für die <strong>Entwicklung</strong> der Software sind die Grundbegriffe des Risikomanagements.<br />
Hierzu werden in Kapitel 2 die Grundlagen des klinischen Risikomanagements<br />
sowie die der Fehlermeldesysteme erläutert.<br />
In Kapitel 3 wird ausgehend von der Struktur des Risikomanagements im Klinikum<br />
Görlitz eine Anforderungsanalyse für das CIRS durchgeführt. Dazu wird<br />
ein Szenario beschrieben, welches den zukünftigen Einsatz der Software im Klinikum<br />
darstellt. Aufbauend darauf werden die Anforderungen an das Softwaresystem<br />
formuliert und mit Anwendungsfällen und GUI-Mockups untermalt.<br />
Vor der Implementierung des Softwaresystems ist die Auswahl geeigneter Mittel<br />
für die softwaretechnische Umsetzung notwendig. Hierfür wurden verschiedene<br />
Webframeworks anhand von praktischen Tests, in Form von Beispielanwendungen,<br />
auf ihre Einsatztauglichkeit hin untersucht. In Kapitel 4 werden diese<br />
Frameworks vorgestellt, miteinander verglichen und bewertet.<br />
Die Umsetzung einzelner Problemstellungen wie beispielsweise die Repräsentation<br />
des Meldebogens, das Erzeugen von PDF Dateien, die Internationalisierung<br />
und die Persistierung werden in Kapitel 5 erläutert.<br />
Die durchgeführten Einsatzerprobungen sowie das Result dieser werden im Kapitel<br />
6 dargestellt.<br />
Zum Abschluss der Arbeit werden einige ausgewählte praktische Ergebnisse<br />
präsentiert und ein Ausblick zu möglichen Erweiterungen des Systems gegeben.<br />
1.3 Begriffsdefinitionen<br />
„Beinahefehler<br />
Im englischen: Near miss, ein → F ehler, wobei das Abweichverhalten<br />
rechtzeitig erkannt wird und so ein tatsächlicher Fehler vermie-
- 14 -<br />
den wird. Als Beinahefehler gilt jedes Vorkommnis, das unerwünschte<br />
Folgen hätte haben können, es im konkreten Fall jedoch nicht hatte<br />
und abgesehen vom Ergebnis (Outcome) von einem richtigen unerwünschten<br />
Ereignis nicht zu unterscheiden war. Beinahefehler erinnern<br />
uns wirksam an Systemrisiken und verhindern, dass die Angst<br />
vor Fehlern allzu schnell in Vergessenheit gerät.“ 1)<br />
„CIRS<br />
Zwischenfallerfassung (<strong>Incident</strong> Reporting/Monitoring) ist die Meldung<br />
von Beinahefehlern (→ Zwischenfall → Beinahefehler) bzw.<br />
von kritischen Beinahefehlern/Ereignissen. Je mehr Zwischenfälle erfasst<br />
werden, desto größer ist die Chance, Schwachstellen im System<br />
zuerkennen und durch geeignete Maßnahmen zu eliminieren. Werden<br />
Beinahefehler reduziert, entstehen weniger echte Fehler.“ 2)<br />
„Fehlerkultur<br />
Beschreibt einen gewandelten Umgang mit Fehlern von einer oberflächlichen,<br />
reaktiven Kultur der Schuldzuweisung (Culture of Blame),<br />
hin zu einer systemanalytischen, proaktiven Sicherheitskultur<br />
(Safety Culture) mit vorurteilsfreiem Umgang mit Fehlern. Es mag<br />
in der Natur des Menschen liegen Fehler zu machen, aber es liegt<br />
ebenso in der Natur des Menschen Lösungen zu entwickeln, bessere<br />
Alternativen zu finden und sich den Herausforderungen der Zukunft<br />
zu stellen.“ 3)<br />
„Kritisches Ereignis<br />
Ein Ereignis, das mit einem Schädigungspotential einhergeht, das eintreten<br />
wird, wenn nicht gegengesteuert wird.“ 4)<br />
„Patientensicherheit<br />
Patientensicherheit ist das Produkt aller Maßnahmen in Klinik und<br />
Praxis, die darauf gerichtet sind, Patienten vor vermeidbaren Schäden<br />
in Zusammenhang mit der Heilbehandlung zu bewahren.“ 5)<br />
1) [AZfQidM05], Seite 4<br />
2) [AZfQidM05], Seite 4<br />
3) [AZfQidM05], Seite 4<br />
4) [AZfQidM05], Seite 7<br />
5) [AZfQidM05], Seite 8
- 15 -<br />
„Schaden (vermeidbarer)<br />
Eine Schädigung, die bei Einhaltung der notwendigen Sorgfaltspflicht<br />
nicht eingetreten wäre.“ 6)<br />
„Unerwünschte Ereignisse<br />
Vorkommnisse bzw. Ereignisse, die möglicherweise aber nicht zwangsläufig<br />
zu einem konsekutiven Schaden für den Patienten führen<br />
(engl. „adverse events“).“ 7)<br />
„Zwischenfall<br />
Ein Ereignis (<strong>Incident</strong>) im Rahmen einer Heilbehandlung, welches zu<br />
einer unbeabsichtigten und /oder unnötigen Schädigung einer Person<br />
oder zu einem Verlust hätte führen können oder geführt hat.“ 8)<br />
6) [AZfQidM05], Seite 8<br />
7) [AZfQidM05], Seite 9<br />
8) [AZfQidM05], Seite 10
- 16 -<br />
2 Risikomanagement<br />
Bevor die Frage beantworten werden kann, was sich hinter Risikomanagement<br />
verbirgt, muss der Begriff Risiko verstanden sein.<br />
Die Begrifflichkeit Risiko erhält in der Literatur verschiedene Auffassungen.<br />
Die Literatur bezeichnet Risiko im allgemeinen als Wagnis, Gefahr. Wirtschaftlich<br />
als Verlustgefahren, Unsicherheits- und Zufälligkeitsfaktoren, die mit jeder<br />
wirtschaftlichen Tätigkeit verbunden sind. 1) Mathematisch als „Risiko = Wahrscheinlichkeit<br />
x Schadensausmaß [R=WxS]“ 2) .<br />
Eine allgemeine Definition wurde auf der Webseite www.risknet.de gefunden.<br />
„Die Möglichkeit <strong>eines</strong> Schadens oder Verlustes als Konsequenz <strong>eines</strong><br />
bestimmten Verhaltens oder Geschehens; dies bezieht sich auf<br />
Gefahrensituationen, in denen nachteilige Folgen eintreten können,<br />
aber nicht müssen. Ethymologisch kann man Risiko zum einen auf riza<br />
(griechisch = Wurzel, Basis) zurückverfolgen; siehe auch risc (arabisch<br />
= Schicksal). Auf der anderen Seite kann Risiko auf ris(i)co<br />
(italienisch) zurückverfolgt werden, die Klippe, die es zu umschiffen<br />
gilt.“ 3)<br />
1) Vgl.[LO]<br />
2) Vgl.[KW05], Seite 13<br />
3) [Ris], Risknet.de
- 17 -<br />
Abbildung 2.1: Risiko etymologisch<br />
Bezieht man sich auf die allgemeine Definition, kann gesagt werden, dass sich<br />
das Risikomanagement mit der Analyse, Bewertung, Verhinderung, Beherrschung<br />
und Folgen von Risiken befasst.<br />
2.1 Klinisches Risikomanagement<br />
Das klinische Risikomanagement stellt ein Präventionssystem dar. Durch den<br />
Einsatz von Präventionssystemen sollen Risiken bei der Patientenversorgung reduziert<br />
werden und letztlich auch der Abwehr ungerechtfertigter Anspruchstellungen<br />
seitens der Patienten gegenüber dem Klinikum dienen. Klinisches Risikomanagement<br />
ist kein theoretisches System, sondern viel mehr ein praktisches<br />
Werkzeug zur Prozessanalyse und Prozesssteuerung im Behandlungsumfeld. So<br />
hat es auch zum Ziel, das Risikobewusstsein aller Mitarbeitern zu fördern und
- 18 -<br />
diese für mögliche Gefahrenherde zu sensibilisieren. An dieser Stelle muss gesagt<br />
werden, das Risikomanagement alle Mitarbeiter im System Krankenhaus<br />
betrifft und auf deren Mitarbeit angewiesen ist. Nur so kann eine effektive Fehlerkultur<br />
im Klinikbereich erreicht werden, um eine maximale Patientensicherheit<br />
zu erzielen.<br />
2.2 Risikomanagement-Prozess<br />
Die Basis des Risikomanagements bildet der Risikomanagement-Prozess. Abbildung<br />
2.2 zeigt die einzelnen Phasen des Prozesses.<br />
Ausgehend von der festgelegten Strategie werden in den ersten Phasen des Risikoprozesses<br />
die Risiken identifiziert, erfasst und bewertet. Im Rahmen der Risikobewältigung<br />
erfolgt die Einleitung von Maßnahmen zur Steuerung der Risiken.<br />
Die Wirksamkeit der eingeleiteten Maßnahmen wird im Prozessschritt Risiken<br />
überwachen beurteilt.
- 19 -<br />
Abbildung 2.2: Risikomanagement-Prozess
- 20 -<br />
Risikostrategie<br />
Die Klinikleitung legt die Risikostrategie fest und schafft die Rahmenbedingungen<br />
für das gesamte Risikomanagement im Klinikum. Die Riskostrategie soll<br />
dazu beitragen, die unternehmensspezifischen Ziele zu erreichen und umfasst<br />
alle risikopolitischen Grundsätze der Organisation.<br />
Risiken identifizieren<br />
Dieser Schritt im Risikomangement-Prozess dient dem Finden von Risiken und<br />
Risikoursachen mit anschließender Erstellung einer Bestandsliste. Hierbei sollen<br />
Schwachstellen systematisch erfasst werden. Der Prozess ist stark abhängig vom<br />
Risikobewusstsein und von der Motivation der Mitarbeiter.<br />
Risiken erfassen<br />
Der Prozess Risiken erfassen ist ein systematischer Vorgang zur Ursachensuche.<br />
Dabei werden die Risiken in Teilrisiken zerlegt, um Ursachen-Wirkungs-<br />
Beziehungen zu finden.<br />
Risiken bewerten<br />
Um Risiken bewerten zu können, nutzt die Risikobewertung zwei Größen. Die<br />
Eintrittswahrscheinlichkeit und die Schadenshöhe. Resultierend aus den beiden<br />
Größen kann das Ergebnis in die Risikomatrix eingetragen werden. Die Risikomatrix<br />
gibt Aufschluss über den Handlungsbedarf. Die folgende Abbildung<br />
verdeutlicht dies.
- 21 -<br />
Abbildung 2.3: Risikomatrix<br />
Der gelb markierte Bereich ist der sogenannte ALARP-Bereich. Die Risiken, die<br />
sich in diesem Bereich befinden, sollen auf ein vernünftiges und durchführbares<br />
Maß minimiert werden. Befindet sich beispielsweise ein Risiko in diesem Bereich,<br />
sollte zunächst abgeschätzt werden, welche Kosten bei Eintritt dieses Risikos<br />
entstehen. Sind die Kosten für die Minimierung des Risikos höher als die<br />
Kosten bei Eintritt des Risikos, so kann das Risiko als tolerierbar eingeschätzt<br />
werden, da hier weitere Maßnahmen nicht praktikabel wären.
- 22 -<br />
Risiken steuern<br />
Risiken steuern ist der Teil im Prozess, der darüber entscheidet, auf welche Weise<br />
die Organisation mit den erfassten und bewerteten Risiken umgeht. Die folgende<br />
Aufzählung bietet fünf Möglichkeiten an mit Risiken umzugehen.<br />
• Risikovermeidung<br />
• Risikoverminderung<br />
• Risikoteilung<br />
• Risikoübertragung<br />
• Risikoselbsttragung<br />
Risiken überwachen<br />
Risiken überwachen dient der kontinuierlichen Kontrolle des gesamten Risikoprozesses<br />
und seiner Wirksamkeit. In diesem Prozess sollen folgende Fragen beantwortet<br />
werden:<br />
• “Wurden im Vorfeld alle Risiken identifiziert? Sind neue Risiken<br />
hinzugekommen? Sind Risiken entfallen?<br />
• Ist die Bewertung der Risiken noch zutreffend?<br />
• Wurden die Risiken in ihrem potenziellen Schadensausmaß zu<br />
gering/zu hoch eingeschätzt?<br />
• Konnten die Maßnahmen zur Risikovermeidung umgesetzt werden,<br />
haben diese den erwünschten Erfolg ergeben?<br />
• Ist die Versicherungsdeckung korrekt? (Ist es günstiger mehr<br />
oder weniger Schäden selbst zu tragen? Muss eine höhere Schadensdeckung<br />
erfolgen?)“ 4)<br />
4) [KW05], Seite 55
- 23 -<br />
2.3 Fehler<br />
Im klinischen Umfeld wird ein Fehler wie folgt definiert:<br />
„Ein richtiges Vorhaben wird nicht wie geplant durchgeführt, oder<br />
dem Geschehen liegt ein falscher Plan zugrunde. Beispiele: diagnosebezogene<br />
oder arzneimittelbezogene Fehler.“ 5)<br />
2.3.1 Fehlerquelle „Mensch“<br />
Die Fehlerforschung der NASA in der Luftfahrt hat herausgefunden, dass 70%<br />
der Flugunfälle auf menschlichem Fehlverhalten beruhen.<br />
„Das Fehler passieren, ist unvermeidlich. So beträgt zum Beispiel<br />
die allgemeine Fehlerrate bei einer banalen Tätigkeit, etwa beim Ablesen<br />
von Instrumenten, bereits drei Promille. Komplexer wird die<br />
Situation beispielsweise bei miteinander agierenden Personengruppen<br />
verschiedener Qualifikation, die entsprechende Geräteüberprüfungen<br />
vornehmen sollen. Hier beträgt die Fehlerquote, wenn keine<br />
schriftlichen Anweisungen Entsprechendes festlegen, bis zu 10<br />
%. Die allgemeine Fehlerrate bei Aktivitäten mit hohem Stresslevel,<br />
wenn gefährliche Ereignisse schnell aufeinander folgen, beträgt sogar<br />
bis zu 25 %. Wie schwer es dabei ist, „fehlerfrei“ bzw. auf dem viel<br />
zitierten 99 % Sicherheitsniveau zu arbeiten, sollen folgende Ausführungen<br />
kurz darstellen.<br />
Grundsätzlich gilt: Die Gesamtleistung <strong>eines</strong> Teams ist gleich dem<br />
Produkt aller Einzelleistungen. Dies verdeutlicht Tabelle 2, modifiziert<br />
nach Nolan und Park: Wenn 1 einem Niveau von 100 % entspricht,<br />
so ist zum Beispiel nach 50 Einzelschritten (oder bei 50 miteinander<br />
agierenden Personen) das Gesamtniveau auf 95 % gesunken.<br />
“<br />
5) [AZfQidM05], Seite 4
- 24 -<br />
Abbildung 2.4: Tabelle 2 Berliner Ärzte Nov. 2001<br />
„Übertragen auf das tägliche Leben bedeutet dies nichts anderes als<br />
folgendes:“<br />
• „Je mehr Menschen miteinander, selbst auf höchstem Sicherheitsniveau<br />
agieren, desto wahrscheinlicher wird es, dass ein Fehler<br />
geschieht.“<br />
• „Je mehr Arbeitsschritte bzw. Verrichtungen (am Patienten) geschehen,<br />
desto wahrscheinlicher wird es, dass ein Fehler passiert.“<br />
6)<br />
Der Mensch als Risikofaktor ist im Bereich der Luftfahrt als natürlicher Teil des<br />
Systems identifiziert. Betrachtet man sich ein Flugzeugcockpit mit Piloten, wird<br />
man leicht Parallelen zu einem Operationssaal feststellen können. Teamarbeit<br />
ist nicht nur im Cockpit gängiger Alltag, sondern auch im OP. Diese Tatsache<br />
zeigt, dass die Erkenntnisse aus der Luftfahrt auch eine Bedeutung für die Medizin<br />
haben. Das Menschen Fehler machen, ist unvermeidlich und bedingt durch<br />
physiologische und psychologische Grenzen des Menschen. Fehlermeldesysteme<br />
stellen eine Möglichkeit dar, Fehler und Beinahefehler im Medizinbereich zu<br />
identifizieren.<br />
6) [Tho01]
- 25 -<br />
2.3.2 Fehlermeldesysteme<br />
Die wichtigste Komponente im klinischen Risikomanagement nehmen die Fehlermeldesysteme<br />
ein. Sie stellen die Kommunikation zwischen Mitarbeiter und<br />
dem Risikomangement her. Wobei der Mitarbeiter die Funktion des Meldenden<br />
besitzt und das Risikomanagement die Funktion des Auswertenden besitzt.<br />
Durch diesen Aufbau bietet das System eine hervorragende Möglichkeit Fehler<br />
zu entdecken. Meldesysteme stellen daher die Basis, „aus Fehlern lernen“ zur<br />
Verfügung. Entdeckt beispielsweise ein Mitarbeiter einen Fehler oder Beinahefehler,<br />
kann er diesen im Meldesystem dokumentieren. Das verantwortliche Risikomanagement<br />
erhält die Meldung und kann gezielt Maßnahmen ergreifen.<br />
Ziele von Fehlermeldesystemen<br />
Die Ziele von Fehlermeldesystemen unterscheiden sich nach dem entsprechenden<br />
Anwendungskontext. Unterschieden wird zwischen zwei Fehlermeldesystemen,<br />
dem „mandatory reporting system“ und dem „voluntary reporting systems“.<br />
Das „mandatory reporting systems“ erfasst meist bestimmte, in der Regel<br />
schwerwiegende Ereignisse, beispielsweise den Tod des Patienten. Bei diesem<br />
System liegt das primäre Ziel in der Bestrafung oder im Verhängen von Sanktionen<br />
für fehlerhafte Handlungen. Der Einsatz solcher Systeme wird meist behördlich<br />
angeordnet und beruht damit nicht auf Freiwilligkeit. In einigen Bundesstaaten<br />
der USA existiert diese Form des Fehlermeldesystems.<br />
Das „voluntary reporting systems“ basiert auf Freiwilligkeit und verfolgt als primäres<br />
Ziel die Patientensicherheit. In der Regel werden durch solche Systeme<br />
Beinahefehler oder Fehler, die zu keiner schwerwiegenden Schädigung des Patienten<br />
geführt haben, erfasst. Durch die Auswertung der erfassten Meldungen<br />
sollen Schwachstellen im System erkannt und Maßnahmen zu dessen Beseitigung<br />
ermöglicht werden.
- 26 -<br />
Damit wird deutlich, dass zwei unterschiedliche Formen von Fehlermeldesystemen<br />
existieren.<br />
Error Reporting Systeme<br />
Das Error Reporting dient zur Erfassung von Fehlern, die zu einem nicht gewünschtem<br />
Ergebnis führen.<br />
Critical <strong>Incident</strong> Reporting (CIRS) / <strong>Incident</strong> Reporting (IRS)-Systeme<br />
Diese Systeme dienen zur Erfassung von Beinahefehlern oder Fehlervorstufen.<br />
Das primäre Ziel ist die Erfassung von kritischen Zwischenfällen zum kontrollierten<br />
Gegensteuern, um Fehler zu vermeiden. Dabei bieten solche Systeme die<br />
Möglichkeit durch das Sammeln von Zwischenfällen Muster zu erkennen, die<br />
immer wieder zu kritischen Zwischenfällen hinleiten. Durch das Erkennen von<br />
Mustern können gezielt Gegenmaßnahmen eingeleitet werden. Es gilt, je mehr<br />
Meldungen erfasst werden, desto größer ist die Wahrscheinlichkeit Schwachstellen<br />
im System zu identifizieren. Der Vorteil von CIRS/IRS im Gegensatz zu<br />
anderen Meldeystemen ist die größere Erfassung von Daten, da Beinahefehler<br />
häufiger auftreten als mittelschwere oder schwere Fehler (Heinrichs Gesetz). 7)<br />
Weiterhin spricht die fehlende Haftungsproblematik für das System, da bei Beinahefehlern<br />
noch nichts passiert ist.<br />
Eigenschaften von Fehlermeldesystemen<br />
Fehlermeldesysteme bringen entsprechend ihres Einsatzgebietes verschiedene<br />
Eigenschaften mit. So können Fehlermeldesysteme auf freiwilliger („voluntary“)<br />
oder verpflichtender („mandatory“) Basis beruhen. Sie können Anonymität oder<br />
7) Heinrichs Gesetz, wurde 1941 vom Ingenieur Heinrich erfunden und beschreibt den statistischen<br />
Zusammenhang zwischen der Auftrittswahrscheinlichkeit von Beinaheunfällen, mittelschweren<br />
Unfällen und einem Katastrophenfall. Das Heinrichs Gesetz sagt aus, dass auf<br />
300 Beinaheunfälle, 29 mittelschwere Unfälle und schließlich eine Katastrophe kommen.
- 27 -<br />
Vertraulichkeit gewährleisten. Bei anonym arbeitenden Systemen wird die Identität<br />
des Meldenden gewahrt, wobei bei vertraulichen Systemen die Identität des<br />
Meldenden bekannt ist, Dritten gegenüber aber verschwiegen bleibt. Dadurch<br />
wird bei Bedarf die Kontaktaufnahme zum Meldenden vereinfacht oder aber<br />
auch die Möglichkeit <strong>eines</strong> direkten Feedbacks seitens des Riskiomanagements<br />
gewährleistet. Meldesysteme können bestrafend oder nichtbestrafend arbeiten.<br />
Wobei ersteres eher eine Eigenschaft von Error Reporting Systemen ist. Dies ist<br />
bedingt durch das Ziel des ERS. Zweiteres wird eher bei CIRS/IRS eingesetzt, da<br />
Nichtbestrafung eine Voraussetzung für eine breite Beteiligung aller Mitarbeiter<br />
darstellt.
- 28 -<br />
3 <strong>Entwicklung</strong> CIRS für das<br />
Klinikum GR<br />
Das folgende Kapitel befasst sich mit der <strong>Entwicklung</strong> <strong>eines</strong> <strong>computergestützten</strong><br />
CIRS für das Klinikum Görlitz. Es beschreibt im ersten Teil die Ausgangssituation<br />
im Städtischen Klinikum Görlitz. Anschließend werden die Anforderungen<br />
an das Software-System, dessen Integration in das bestehende Risikomanagement<br />
und ausgesuchte Anwendungsfälle erläutert.<br />
3.1 Ausgangssituation im Klinikum GR<br />
Das Städtische Klinikum Görlitz gGmbH wurde 1905 gegründet. Es stellt heute<br />
einen zentralen Krankenhauskomplex mit 16 Kliniken, 2 Instituten und 2 Tochter<br />
GmbHs zur Verfügung. Mit über 1000 Mitarbeitern ist das Klinikum einer der<br />
größten Arbeitgeber der Region. Jährlich werden durchschnittlich 22000 stationäre<br />
und 50000 ambulante Patienten behandelt. Das Städtische Klinikum Görlitz<br />
trägt das international anerkannte Qualitätszertifikat der Joint Commission<br />
International Accreditation (JCIA) aus den USA. Das Risikomanagement ist im<br />
Klinikum Görlitz ein fester Bestandteil des Qualitätsmanagements und wird im<br />
Qualitätshandbuch dokumentiert. Das Qualitätsmanagement beschäftigt sich<br />
unter anderem mit der kontinuierlichen Überwachung, Analyse und Verbesserung<br />
von klinischen und organisatorischen Verfahren. Es schafft klare Richtlini-
- 29 -<br />
en für die Analyse und Überwachung von Prozessen. So auch für den Risikomanagementprozess<br />
im Klinikum GR. Die Geschäftsführung legt dabei die Strategie<br />
für die verschiedenen Prozesse fest. Ausgehend von der Strategie erfolgt im<br />
Klinikum Görlitz die Analyse und Überwachung meist durch die verantwortlichen<br />
Projektgruppen. Eine Projektgruppe besteht immer aus einem Projektgruppenleiter<br />
und einer Anzahl von Spezialisten aus verschiedenen Bereichen.<br />
Die Projektgruppen werden durch die Geschäftsführung, die Stabsstelle Qualitätsmanagement<br />
sowie durch die Pflegedienstleitung kontrolliert und angeleitet.<br />
Die Abbildung 3.1 zeigt die Struktur des Qualitätsmanagements in Form <strong>eines</strong><br />
Organigramms.<br />
Um Daten für den Risikomanagementprozess verarbeiten zu können, müssen<br />
diese entsprechend gesammelt werden. Zum Sammeln von Daten werden zum<br />
größten Teil Papierfragebögen verwendet, die an den entsprechenden Stellen<br />
ausgefüllt werden und später an die jeweilige Kontrollinstanz übergeben werden.<br />
Diese wertet dann die Bögen 1) entsprechend aus und leitet, wenn nötig,<br />
Maßnahmen ein oder ruft bei Bedarf die entsprechende Projektgruppe zusammen.<br />
Im Rahmen der Risikoüberwachung werden in dem Bereich, wo die Maßnahmen<br />
eingeleitet worden sind, nach einer Zeit Checklisten vom RM ausgegeben.<br />
Diese müssen vom entsprechenden Abteilungsleiter ausgefüllt und an das<br />
RM zurückgesendet werden. Diese Checklisten werden vom RM geprüft und<br />
ausgewertet. Greifen Maßnahmen nicht, werden die Risiken wieder in den Risikomanagementprozess<br />
gesteckt und neu bewertet.<br />
1) Der Begriff „Bögen“ bezeichnet in dieser Arbeit alle Arten von „Meldebögen“, „Ereignisbögen“,<br />
„Fragebögen“ und „Fehlerbögen“.
- 30 -<br />
Abbildung 3.1: QM-Organigramm – Die dicke schwarze Linie zeigt den<br />
Steuerfluss der QM-Prozesse, Geschäftsführung legt fest, Qualitätsmanagement<br />
leitet ein und kontrolliert, Pflegedienstleitung, Qualitätsbeauftragter<br />
Pflege kontrolliert und Projektgruppen führen durch.
- 31 -<br />
3.2 <strong>Entwicklung</strong>sziele<br />
Mit der Einführung von CIRS will die Klinikleitung nicht nur die Patientensicherheit<br />
und damit die Qualität im Klinikum weiter steigern, sondern auch den<br />
Bearbeitungsprozess der eingehenden CIRS-Meldungen beschleunigen und damit<br />
den Risikomanagementprozess optimieren. Nachfolgend werden die Ziele<br />
genannt, die aus Sicht der Projektmitglieder und der späteren Nutzer mit der<br />
<strong>Entwicklung</strong> des <strong>computergestützten</strong> CIRS verfolgt werden. Dabei ist zu unterscheiden<br />
zwischen den Zielen, die sich direkt auf die Mitarbeiter beziehen und<br />
den Zielen, die sich auf das Qualitätsmanagement beziehen.<br />
Ziele aus Sicht des Mitarbeiters<br />
• Möglichkeit Beinahefehler schnell, anonym und ohne Umwege dem Risikomanagement<br />
zu melden.<br />
• Über die aktuelle Beinahefehler-Situation im Klinikum informiert zu sein.<br />
Ziele aus Sicht des Qualitätsmanagements<br />
• Computergestützt Daten über Beinahefehler zu erfassen und dadurch eine<br />
Möglichkeit zu besitzen, Fehlern vorzubeugen.<br />
• Computergestütze Verwaltung von Bögen.<br />
• Unterstützung des Risikomanagementprozesses und damit Senkung von<br />
Kosten. (Bsp. durch Vorabbewertung muss Projektgruppe nur bei Handlungsbedarf<br />
einberufen werden)<br />
• Durch einfache Benutzung der Meldebögen das Risikobewusstsein aller<br />
Mitarbeitern zu fördern und diese für mögliche Gefahrenherde zu sensibilisieren.
- 32 -<br />
• Senkung der Versicherungsprämien.<br />
• Senkung der Papierkosten.<br />
• Verkürzung der Informationswege (Meldung geht direkt an das Risikomanagement)<br />
3.3 Anforderungen<br />
Anforderungen sind ein Teil des Softwareentwicklungsprozesses und verfolgen<br />
das Ziel, die vom Kunden an die zu entwickelnde Software gestellten Anforderungen<br />
zu ermitteln. Im Folgenden werden die Anforderungen an die zu entwickelnde<br />
Software kurz dargestellt und die Integration der Software in das bestehende<br />
Risikomanagement gezeigt. Im weiteren Verlauf der Arbeit wird der<br />
Begriff <strong>Risikous</strong> verwendet, er steht für das zu entwickelnde Softwaresystem.<br />
3.3.1 CIRS Szenario<br />
Um den Mitarbeitern einen Meldebogen über das Intranet computergestützt<br />
zur Verfügung stellen zu können, muss dieser vom Risikomanager vorbereitet<br />
und in <strong>Risikous</strong> eingegeben werden. Dazu muss die Software eine Möglichkeit<br />
bieten, um Meldebögen aufnehmen und verarbeiten zu können. Anschließend<br />
muss die Software den Meldebogen veröffentlichen und dem Mitarbeiter anonym<br />
zur Verfügung stellen. Der Mitarbeiter kann über das Intranet eine Webseite<br />
mit dem Meldebogen aufrufen und diesen ausfüllen. <strong>Risikous</strong> muss sicherstellen,<br />
dass nur berechtigte Mitarbeiter Zugriff auf den Meldebogen haben. Die<br />
Software muss alle ausgefüllten Meldebögen zentral sammeln und bei Bedarf<br />
dem Risikomanagement zur Verfügung stellen. Dazu muss die Software dem Risikomanager<br />
eine Funktion zum Lesen der ausgefüllten Meldebögen zur Verfügung<br />
stellen. Erkennt der Risikomanager ein Risikopotential, muss die Software
- 33 -<br />
eine Funktion mitbringen, um das Resultat aus Eintrittswahrscheinlichkeit und<br />
Schadenshöhe grob bestimmen zu können. Ergibt sich nun Handlungsbedarf<br />
ruft der Risikomanager die Projektgruppe zusammen. Die Projektgruppe untersucht<br />
die Risiken und entscheidet über einzuleitende Maßnahmen. Um diese<br />
Maßnahmen zu dokumentieren, muss die Software diese an die entsprechende<br />
Meldung anhängen können. Um den Überblick über alle Meldungen zu behalten,<br />
muss <strong>Risikous</strong> eine statistische Auswertung führen, die bei Knopfdruck<br />
als PDF Datei ausgegeben werden kann. Diese Auswertungsdaten können im<br />
Intranet veröffentlicht werden, damit alle Mitarbeiter über die Beinahefehlersituation<br />
im Klinikum informiert sind. Die Geschäftsführung nutzt die Daten der<br />
Auswertung zur Kontrolle der Risikostrategie. Abbildung 3.2 verdeutlicht die<br />
Anforderungen an die Software und die Integration in das Risikomanagement.<br />
Abbildung 3.2: Integration von <strong>Risikous</strong> in das Risikomanagement des<br />
Klinikum Görlitz
- 34 -<br />
3.3.2 funktionale Anforderungen<br />
Das CIRS-Szenario hat einen ersten Einblick auf die Funktionalität der Software<br />
gegeben. Dabei wurden im Szenario die Anforderungen mit den Wörtern muss,<br />
kann und soll beschrieben. Sie geben Aufschluss darüber, was zwingende Anforderungen<br />
sind und welche Anforderungen als optional betrachtet werden. Die<br />
funktionalen Anforderungen beschreiben die konkreten Funktionen an die zu<br />
entwickelnde Software.<br />
Die Software soll Funktionen zum Verwalten von CIRS-Umfragen zur Verfügung<br />
stellen:<br />
• CIRS-Umfrage anlegen/editieren/ansehen (Vorschau)/veröffentlichen/<br />
löschen<br />
• CIRS-Umfrage muss Bogen aufnehmen/anzeigen<br />
• CIRS-Umfrage muss Bogen dem Mitarbeiter zum Ausfüllen zur Verfügung<br />
stellen und die Anonymität gewährleisten<br />
• CIRS-Umfrage muss ausgefüllten Bogen verwalten<br />
Darauf aufbauend sollen Funktionen zur Bewertung und Auswertung von eingegangenen<br />
Meldungen (ausgefüllte Bögen) angeboten werden:<br />
• Meldungen anzeigen/drucken/dokumentieren/löschen<br />
• Risikomatrix zum Bewerten von Risiken (Bewertung)<br />
• alle bewerteten Meldungen auswerten/anzeigen (statistische Auswertung)<br />
3.3.3 nichtfunktionale Anforderungen<br />
Weiterhin existieren nichtfunktionale Anforderungen an das Softwaresystem.<br />
Sie legen fest, welche Eigenschaften das Softwareprodukt besitzen soll.
- 35 -<br />
Benutzerfreundlichkeit<br />
Die Software sollte intuitiv zu bedienen sein. Beim Ausfüllen <strong>eines</strong> Bogens muss<br />
die Software dem Mitarbeiter einen Status über die verbleibende Befragung anzeigen.<br />
(Statusbar)<br />
Kennzeichnung von Pflichtfeldern<br />
Pflichtfelder müssen in der Benutzungsoberfläche angezeigt sein.<br />
Plausibilitätsprüfung<br />
Fehlereingaben muss die Software dem Nutzer mitteilen.<br />
Browserkompatibilität<br />
Da im Klinikum der Standartbrowser der Mozilla Firefox ist, muss die Software<br />
auf diesen Browser optimiert sein.<br />
Plattformunabhängigkeit<br />
Das Programm muss auf Linux- und Windows- Plattformen lauffähig sein.<br />
Sicherheit<br />
Um ausgefüllte Meldebögen gegen Missbrauch zu schützen, sind Zugriffskontrollen<br />
in die Software zu integrieren.<br />
3.3.4 Akteure und Rechte im System<br />
Bei einem Softwaresystem, welches mehrere Nutzer bedienen soll, macht ein<br />
Rollenmanagement Sinn. Es legt die Rechte der Nutzer im System fest und kontrolliert<br />
diese. Dabei soll im <strong>computergestützten</strong> CIRS zwischen drei Akteuren 2)<br />
unterschieden werden, den meldenden Mitarbeiter, den Risikomanager und den<br />
Administrator. Der meldende Mitarbeiter soll nur das Recht besitzen, sich frei im<br />
Meldebogen zu bewegen, ihn ausfüllen und ihn absenden zu können. Der Administrator<br />
soll die Möglichkeit haben, neue Nutzer mit der Rolle Risikomanager<br />
2) Nutzer werden in der Softwareentwicklung als Akteure bezeichnet. Dabei nimmt ein Akteur<br />
eine entsprechende Rolle ein, ähnlich wie bei einer Theateraufführung.
- 36 -<br />
anzulegen und diese mit entsprechenden Rechten zu versehen. Der Administrator<br />
verfügt dazu standardmäßig über alle verfügbaren Rechte. Der Risikomanager<br />
kann entsprechend seiner zugelassenen Rechte die Software nutzen. Die<br />
Rechte, die im System vergeben werden sollen, sind in der folgenden Aufzählung<br />
zu sehen.<br />
• CIRS-Umfragen erstellen und bearbeiten<br />
• Meldebogen lesen<br />
• Meldebogen bewerten<br />
• Auswertung erstellen<br />
3.3.5 Anwendungsfälle<br />
Anwendungsfälle werden in der Softwareentwicklung mit sogenannten Use Cases<br />
modelliert. Das Use Case ist ein Diagramm aus der Unified Modeling Language<br />
(UML) und soll das Verhalten aus der Sicht des Nutzers veranschaulichen,<br />
der als Akteur an einem Anwendungsfall beteiligt ist.<br />
Die folgenden Use Cases zeigen ausgesuchte Anwendungsfälle der <strong>Risikous</strong>software.<br />
Jeder einzelne der Anwendungsfälle kann in einem weiteren Use Case<br />
verfeinert werden.<br />
Die Abblidung 3.3 zeigt Anwendungsfälle der <strong>Risikous</strong>software und dessen Akteure.<br />
Bedingt durch das Rollenmanagement sind einige Anwendungsfälle nur<br />
für bestimmte Akteure zugänglich. Risikomanagement ist der Anwendungsfall<br />
der die Bewertung, die Auswertung und Funktionen rund um die CIRS-Umfrage<br />
beinhaltet. Ereignis melden ist der Anwendungsfall, der die Ereignisse mit Hilfe<br />
des Meldebogens entgegennimmt und diese nach dem Ausfüllen entsprechend<br />
an das Risikomanagement weiterleitet. Das Use Case Benutzerverwaltung dient
- 37 -<br />
Abbildung 3.3: Use Case <strong>Risikous</strong><br />
dem Administator, um neue Risikomanager im System anzulegen oder zu löschen,<br />
beziehungsweise die Rechte des Nutzers entsprechend anzupassen. Der<br />
Anwendungsfall User Einstellungen stellt dem Risikomanager Funktionen zum<br />
ändern s<strong>eines</strong> Nutzerprofils zur Verfügung.<br />
Die Abbildung 3.4 zeigt den Anwendungsfall Risikomanagement. Er enthält alle<br />
Anwendungsfälle, die im Risikomanagement enthalten sind. So haben die Akteure<br />
die Möglichkeit, ein oder mehrere CIRS-Umfragen zu erstellen. Mehrere CIRS-<br />
Umfragen machen dann Sinn, wenn in den einzelnen Kliniken verschiedene<br />
Meldebögen verwendet werden oder wenn eine separate Auswertung erfolgen<br />
soll. Das Reporting dient zur statistischen Auswertung aller eingegangenen bewerteten<br />
Meldebögen. Der MessageReader stellt den primären Anwendungsfall<br />
des Risikomanagers dar. In diesem Anwendungsfall hat der Manager die Möglichkeit,<br />
eingegangene Meldebögen anzuschauen und diese zu bewerten. Auf-
- 38 -<br />
Abbildung 3.4: Use Case Risikomanagement<br />
bauend darauf kann er den Meldebogen inklusive Risikomatrix als PDF Datei<br />
erstellen lassen. Im Anwendungsfall Meldebogen Vorschau stellt das System eine<br />
Vorschau des Meldebogens zur Verfügung. Der Risikomanager kann den Meldebogen<br />
voll durchspielen, ohne dass die Daten die er erzeugt, in eine Auswertung<br />
einfließen. Sollte er einen Fehler feststellen, kann er diesen mit Hilfe des Anwendungsfalls<br />
CIRS Umfrage bearbeiten beseitigen. Der Fall CIRS Umfrage bearbeiten<br />
ermöglicht das Bearbeiten aller Umfrageparameter. CIRS Meldebogen ausfüllen ist<br />
ähnlich der Vorschau, mit dem Unterschied, dass hier alle erzeugten Daten in die<br />
Auswertung einfließen. Dieser Fall ist notwendig, wenn neben dem softwaregestützten<br />
CIRS noch ein papierbasiertes CIRS existiert, weil eventuell nicht jede<br />
Klinik über Computer verfügt oder Mitarbeiter diese nicht bedienen können. So
- 39 -<br />
kann der Risikomanger den ausgefüllten Papiermeldebogen in das System übertragen.<br />
Dieser wird dann bei der Auswertung mit berücksichtigt.<br />
3.3.6 <strong>Entwicklung</strong> der Benutzungsoberfläche<br />
Bei der <strong>Entwicklung</strong> der Benutzungsoberfläche wurden sehr detaillierte GUI-<br />
Mockups erstellt. Ein GUI-Mockup in der Softwareentwicklung bezeichnet einen<br />
rudimentären Wegwerfprototyp der Benutzungsoberfläche einer zu erstellenden<br />
Software. Sie dienen in erster Linie zum besseren Verständnis zwischen<br />
Entwickler und Auftraggeber. 3) Des Weiteren können die Mockups zum Vermessen<br />
einzelner GUI-Elemente eingesetzt werden, um so eine ergonomische<br />
Benutzungsoberflächen-Gestaltung zu gewährleisten.<br />
Die Benutzungsoberfläche in der <strong>Risikous</strong>software wird zwei Hauptansichten<br />
besitzen, eine Meldebogenansicht und eine Managementansicht. Die Meldebogenansicht<br />
ist die Oberfläche, die dem Mitarbeiter den Meldebogen zum Ausfüllen<br />
breitstellt. Der Risikomanager benutzt die Managementansicht. Sie stellt alle für<br />
den Manager relevanten Funktionen und Ansichten bereit. Die folgenden zwei<br />
GUI-Mockups zeigen die jeweiligen Ansichten.<br />
Die in Abbildung 3.5 abgebildete Meldebogenansicht besteht aus dem Header, der<br />
Navigationsleiste und dem Fragenbereich. Der Header trägt das Logo des Städtischen<br />
Klinikums Görlitz. Der Navigationsbereich bietet auf der linken Seite<br />
Funktionen in Form von Buttons an. Auf der rechten Seite wird ein Statusbar<br />
angezeigt, der dem meldenden Mitarbeiter den Verlauf signalisiert. Im Meldebogenteil<br />
werden die entsprechenden Fragen mit den dazugehörigen Antworten<br />
angezeigt. Neben den Antworten befinden sich Radiobuttons 4) . Sie dienen<br />
3) Vgl.[DfE07]<br />
4) Ein Radiobutton ist ein Benutzungsoberflächenelement. Es kann zwei Zustände besitzen: angewählt<br />
oder nicht angewählt. Angewählt wird ein Radiobutton mit der Computermaus.
- 40 -<br />
Abbildung 3.5: GUI-Mockup Meldebogen<br />
zum Selektieren einer Antwort. Um die einzelnen Fragen übersichtlich darstellen<br />
zu können, werden diese mit Rahmen voneinander abgegrenzt. Im oberen<br />
Teil befindet sich eine Leiste, die den entsprechenden Blocknamen enthält. Der<br />
Blockname beschreibt eine Kategorie von Fragen. In Abbildung 3.5 ist der Block<br />
Ereignis mit seinen entsprechenden Fragen dargestellt. Der Fragenbereich kann<br />
bei Bedarf mit Hilfe der Scrollbar 5) vertikal bewegt werden.<br />
Das GUI-Mockup MessageReader zeigt einen Teil aus der Managementansicht.<br />
Diese Ansicht teilt sich in den Header, den Navigationsbereich, die Titelleiste<br />
und in den Funktionsbereich auf. In den Funktionsbereich wird entsprechend<br />
der angewählten Funktion die Ansicht angezeigt. In diesem Fall der Message-<br />
5) Die Scrollbar wird durch den Browser bereitgestellt. Der Browser blendet die Scrollbar ein,<br />
wenn der Inhalt der Webseite größer ist als der Anzeigebereich des Browserfensters.
- 41 -<br />
Abbildung 3.6: GUI-Mockup MessageReader<br />
Reader. Um die Navigation unter den verschiedenen Ansichten des Managementbereiches<br />
zu gewährleisten, befindet sich ein weiterer Navigationsbereich im oberen<br />
Teil der Funktionsansicht. Dieser enthält auf der rechten Seite jeweils auch<br />
Funktionen bereit, die in der jeweiligen Ansicht angewendet werden können. In<br />
der Abbildung 3.6 stellt die Ansicht MessageReader dem Manager die Funktionen<br />
pdf, bewerten und löschen bereit.<br />
Wie auf den GUI-Mockups zu sehen ist, soll die Software überwiegend die Farbe<br />
blau tragen. Blau ist die beliebteste Farbe bei Männer und Frauen und assoziiert<br />
viele positive Eigenschaften wie Sympathie, Harmonie, Freundlichkeit, Vertraulichkeit<br />
und Verläßlichkeit. Sie wirkt still und entspannend. 6) Diese Eigenschaf-<br />
6) Vgl. [uHR]
- 42 -<br />
ten sind eine wichtige Voraussetzung für den erfolgreichen Einsatz der Software<br />
im Klinikumfeld.<br />
3.4 Softwaredesign<br />
Aus den Anforderungen geht hervor, das <strong>Risikous</strong> verschiedene Meldebögen<br />
verwalten und veröffentlichen soll. Diese Forderung ist notwendig, da es vorkommen<br />
kann, dass speziell angepasste Meldebögen einzelnen Kliniken bereitgestellt<br />
werden sollen. Diese Tatsache hat einen entscheidenen Einfluss auf das<br />
Design der Software. Der Inhalt 7) der Meldebögen kann natürlich variieren, was<br />
zur Folge hat, dass auch sein softwaretechnisches Abbild variabel sein muss.<br />
Um die Forderung zu erfüllen, muss eine softwaretechnische Repräsentation<br />
des Meldebogens bereitgestellt werden, welche die Struktur des Bogens vorgibt,<br />
vom Inhalt aber vollkommen abstrahiert. Diese Repräsentation soll mittels Extensible<br />
Markup Language 8) erreicht werden. Der XML-Bogen wird vom Mitarbeiter<br />
mit Hilfe <strong>eines</strong> Editors erstellt. Nach dem Erstellen wird dieser vom<br />
System aufgenommen und in einer Datenbank gespeichert. Danach erzeugt das<br />
System den Online-Bogen, der anschließend dem Mitarbeiter zum Ausfüllen zur<br />
Verfügung steht.<br />
Die Abbildung 3.7 verdeutlicht die eben erläuterte Funktionsweise.<br />
Durch den „flexiblen“ Bogen entsteht die Möglichkeit, nicht nur CIRS-Meldebögen<br />
in das System zu laden, sondern jegliche andere Arten von Bögen. Im Krankenhausbereich<br />
existieren weitere Bögen, wie beispielsweise Sturzmelde-, Besch-<br />
7) Der Inhalt <strong>eines</strong> Meldebogens besteht in der Regel aus Fragen, Antworten und verschiedenen<br />
Antwortmöglichkeiten (Freitext, Felder zum Ankreuzen)<br />
8) Bei der Extensible Markup Language (XML) handelt es sich um eine Metasprache. Eine Metasprache<br />
hat die Eigenschaft, dass man mit dieser weitere Sprachen für einen konkreten<br />
Anwendungsfall bilden kann.
- 43 -<br />
Abbildung 3.7: Softwaredesign – Meldebogen<br />
werde-, Patientenbefragungs-, Mitarbeiterbefragungsbögen und viele andere. Allerdings<br />
existieren unterschiedliche Anforderungen beim weiteren Verarbeiten<br />
der ausgefüllten Bögen. Um diese Anforderungen entsprechend zu strukturieren<br />
soll <strong>Risikous</strong> modular aufgebaut sein. Das heißt, dass für jeden Prozess der<br />
abgebildet werden soll, ein entsprechendes Modul entwickelt werden muss. In<br />
dieser Arbeit werden neben dem Meldebogensystem (Basis) für die Weiterverarbeitung<br />
von Bögen nur Module, welche die CIRS Funktionalität betreffen, entwickelt.<br />
3.4.1 Basis-Module<br />
Die Basis der Software soll in vier Modulen abgebildet werden. Diese Module<br />
sollen Funktionen zum Erstellen, Veröffentlichen, Speichern, Löschen und Bearbeiten<br />
von Umfragen implementieren. Eine Umfrage besteht in der Software<br />
immer aus einem Bogen und Parametern.
- 44 -<br />
Modul setup<br />
Dieses Modul soll den Bogen im XML-Format entgegennehmen und diesen in<br />
der Datenbank abspeichern. Das Setup-Modul soll weiterhin Funktionen zum<br />
Konfigurieren von Parametern für eine Umfrage zur Verfügung stellen. Die einzelnen<br />
Parameter werden im Folgenden aufgelistet:<br />
• Name der Umfrage<br />
• Start- und Endzeitpunkt der Umfrage<br />
• Email und Hotline Funktion<br />
• anonyme Feedbackfunktion<br />
• PDF-Dokument herunterladen (Mitarbeiter)<br />
• Zugangsparole (für anonymen Zugriff auf Umfrage)<br />
• Umfrage-Startseite mit Inhalt<br />
• Umfrage für Mitarbeiter verfügbar<br />
Das Modul soll nach dem Erstellen der Umfrage einen Link erzeugen, der auf<br />
die entsprechende Umfrage zeigt. Dieser URL wird ein vom Modul erzeugter,<br />
eindeutiger Code angehangen, welcher der Umfrage zugeordnet ist.<br />
Modul questionnaire<br />
Dieses Modul soll alle Funktionen enthalten die notwendig sind, um die Umfrage<br />
dem Mitarbeiter über eine Webeite zur Verfügung zu stellen. Dazu verwendet<br />
es die im Modul Setup konfigurierten Parameter und passt entsprechend
- 45 -<br />
die Umfrageelemente 9) an. Ist beispielsweise der Parameter Zugangsparole aktiviert,<br />
soll das Modul eine Startseite erzeugen, die den Mitarbeiter nach der Parole<br />
fragt und diese entsprechend überprüft. Weiterhin soll das Modul Funktionen<br />
zum Speichern des ausgefüllten Meldebogens enthalten.<br />
Modul usermanagement<br />
Das Modul usermanagement soll die komplette Benutzerverwaltung 10) implementieren.<br />
Es soll Funktionen zum Anlegen, Bearbeiten und Löschen von Nutzern<br />
enthalten. Folgende Parameter sollen einen Nutzer beschreiben:<br />
• Vorname<br />
• Nachname<br />
• Email<br />
• Passwort<br />
Mögliche Rechte im System (Beziehen sich auf das Risikomanagement, für die<br />
Weiterverarbeitung von Bögen):<br />
• Administrator (besitzt alle Rechte, die es in der Anwendung gibt)<br />
• Umfragen erstellen, bearbeiten, löschen<br />
• Bogen lesen, drucken, löschen<br />
• Reporting erstellen<br />
9) Umfrageelemente sind in diesem Fall Buttons, welche die einzelnen Funktionen dem Mitarbeiter<br />
verfügbar machen.<br />
10) Standartmäßig bezieht sich die Benutzerverwaltung im Fall der CIRS-Webanwendung für das<br />
Klinikum Görlitz nur auf den Teil der Risikomanager. Das Modul kann auch den Zugriff auf<br />
die Umfrage steuern, dann wäre aber im Fall des CIRS die Anonymität nicht mehr gewährleistet.
- 46 -<br />
Modul XML<br />
Das XML-Modul ist eher als ein Hilfs-Modul anzusehen, da es keinen konkreten<br />
Geschäftsprozess abbildet. Dennoch ist es für die Basisfunktionalität der Software<br />
nicht wegzudenken. Es soll Funktionen bereitstellen, um Daten entsprechend<br />
ausserhalb der Software weiterverarbeiten zu können. Zu nennen wären das Erzeugen<br />
von XML- und PDF-Dateien.<br />
3.4.2 CIRS-Module<br />
Modul messages<br />
Das Modul messages soll alle Funktionen für ausgefüllte Meldebögen enthalten.<br />
Das wären die Bewertung, das Lesen, das Löschen und die Dokumentation von<br />
Meldungen. Für die Bewertung und Dokumentation von Meldungen soll das<br />
System folgende Parameter zur Verfügung stellen:<br />
• Bewertung des Risikos einer Meldung durch Riskomatrix<br />
• Datum der Bewertung<br />
• Datum, wann die Meldung abgeschlossen wurde<br />
• Dokumentation zu Maßnahmen/Weiterverfolgung sowie Notizen zur Meldung<br />
Um über die ausgefüllten Meldungen einen Überblick zu haben, soll das Modul<br />
einen Baum implementieren, der die Meldungen in folgende Kategorien unterteilt:<br />
• ungelesene Meldungen<br />
• gelesene, aber unbewertete Meldungen
- 47 -<br />
• bewertete Meldungen<br />
• unbewertbare Meldungen<br />
Modul reporting<br />
Das Reporting-Modul soll Funktionen zur statistischen Auswertung aller bewerteten<br />
Meldebögen enthalten. Dabei sollen jeweils die abgegebenen Antworten<br />
in allen bewerteten Meldungen erfasst werden sowie die Gesamtanzahl aller bewerteten<br />
Meldungen. Die Antworthäufigkeit jeder einzelnen Antwort soll absolut<br />
und prozentual ermittelt werden. Um die jeweiligen Ergebnisse besser bewerten<br />
zu können, soll das Modul die Ergebnisse grafisch aufarbeiten und als<br />
PDF zur Verfügung stellen. Zum Auswerten von einzelnen Zeiträumen soll die<br />
Software entsprechende Möglichkeiten implementieren.
- 48 -<br />
4 Auswahl geeigneter Mittel<br />
Dieses Kapitel beschäftigt sich mit der Auswahl der geeigneten Mittel für die<br />
Implementierung des <strong>computergestützten</strong> CIRS. Dabei werden im ersten Abschnitt<br />
die Funktionsweise und die Grundlagen von Webanwendungen kurz<br />
erläutert. Anschließend werden verschiedene Webframeworks kurz vorgestellt<br />
und an Hand verschiedener Kriterien, die für die <strong>Entwicklung</strong> des <strong>computergestützten</strong><br />
CIRS ausschlaggebend waren, verglichen. Der Vergleich beruht dabei<br />
auf einem ausgiebigen, praktischen Test der einzelnen Frameworks 1) . Abschließend<br />
wird eine Bewertung vorgenommen, welche den Einsatz <strong>eines</strong> der verglichenen<br />
Webframeworks begründet.<br />
4.1 Client-Server-Architektur<br />
Das CIRS für das Klinikum Görlitz soll laut den Anforderungen eine Webanwendung<br />
werden. Webanwendungen setzen auf einer Client-Server-Architektur<br />
auf. Das heißt, es gibt einen Server, auf dem die Webanwendung läuft und einen<br />
Client, auf dem ein Browser installiert ist. Der Client kann mit Hilfe des Browsers<br />
eine Anfrage (HTTP-Request) an den Server stellen. Dazu schickt ein Benutzer<br />
über eine URL einen HTTP-Request an den Server. Der Server empfängt<br />
1) Als Framework bezeichnet man eine Menge von verknüpften Klassen, welche zusammen ein<br />
wiederverwendbares und erweiterbares Gerüst für die <strong>Entwicklung</strong> von Software <strong>eines</strong> bestimmten<br />
Typs bilden. [Vli94]
- 49 -<br />
den HTTP-Request und bearbeitet diesen mit Hilfe von serverseitigen Zusatzprogrammen.<br />
Nach der Bearbeitung der Anfrage wird eine Antwort (HTTP-<br />
Response) generiert und diese an den Client geschickt. Der Browser zeigt dem<br />
User nun die angeforderte Webseite an. Abbildung 4.1 zeigt die Kommunikation<br />
zwischen Client, Server und serverseitigen Programmen.<br />
Abbildung 4.1: Client-Server Kommunikation<br />
4.2 Webanwendungen<br />
Für Webanwendungen wird auf dem Client nur ein Browser benötigt, welcher<br />
heutzutage auf jedem Rechner installiert ist. Dies hat die zwei Vorteile, dass<br />
man clientseitig keine Software installieren muss und zweitens somit auch Plattformunabhängigkeit<br />
gewährleistet ist. Webanwendungen haben weiterhin den<br />
Vorzug, dass der Client immer mit der aktuellsten Version der Anwendung arbeitet,<br />
da die Anwendung komplett auf dem Server ausgeführt wird und durch<br />
den Client nur Nutzereingaben getätigt werden. Dadurch ist es möglich, eine<br />
Webanwendung zentral auf dem Server zu warten. Von Vorteil ist auch, dass<br />
auf einem Client eingegebene Daten anschließend auf dem Server gespeichert<br />
werden und sofort anderen Clients zur Verfügung stehen.<br />
Allerdings hat dies den Nachteil, dass immer eine Verbindung zum Server erforderlich<br />
ist. Ein großes Problem bei Webanwendungen stellt auch die unterschiedliche<br />
HTML, CSS und Javascript Interpretation der gängigen Browser In-
- 50 -<br />
ternet Explorer, Mozilla Firefox, Opera und Apple Safari dar, obwohl Standards des<br />
W3C 2) dafür existieren. Teilweise wird HTML und CSS sogar von unterschiedlichen<br />
Browserversionen anders interpretiert.<br />
Die serverseitige Verarbeitung der Daten und das Erstellen der HTML-Seite kann<br />
durch Technologien wie PHP, CGI, ASP, ASP.NET oder Java-basierte Technologien<br />
wie Servlets und JavaServer Pages realisiert werden. Dazu ist je nach Technologie<br />
ein entsprechender Server oder Module für den bestehenden Webserver<br />
notwendig. Um das CIRS zu implementieren wurden Java-basierte Technologien<br />
gewählt. Java ist eine objektorientierte Programmiersprache, welche unter<br />
anderem die Vorteile hat, dass sie plattformunabhängig ist und eine Vielzahl an<br />
Frameworks für diese Sprache verfügbar ist, welche die <strong>Entwicklung</strong> von Software<br />
beschleunigen.<br />
4.3 Webanwendungen mit Java<br />
Für die <strong>Entwicklung</strong> von verteilten Anwendungen in Java hat sich die „Java<br />
Plattform Enterprise Edition“ (JavaEE) durchgesetzt. Sie spezifiziert eine Technologieplattform<br />
und Architekturplattform für eben diese Anwendungen. Dafür<br />
werden eine Reihe von „Application Programming Interfaces“ (kurz API)<br />
mitgeliefert, welche als klar definierte Programmierschnittstellen zwischen den<br />
Schichten und Komponenten des Systems dienen. Zur Ausführung von JavaEE-<br />
Anwendungen werden spezielle, erweiterte Webserver benötigt, sogenannte Applikationsserver.<br />
Diese müssen alle APIs bereitstellen, um als Webapplikationsserver<br />
zu gelten. Als kleinsten Nenner stellt Sun Referenzimplementierung der<br />
Schnittstellen zur Verfügung. Für das CIRS wurden unter anderem die Servlet<br />
API und die JavaServer Pages API genutzt. JavaEE-Anwendungen stellen immer<br />
eine Drei-Tier-Architektur dar. Bei einer Drei-Tier-Architektur wird eine Anwendung<br />
in drei Schichten unterteilt:<br />
2) Das W3C ist ein Verband zur Standardisierung der World Wide Web betreffenden Techniken.
- 51 -<br />
• Präsentationsschicht (client tier) - auch Front End genannt. Sie enthält nur<br />
minimalste Anwendungslogik, die zum Darstellen der Benutzungsoberfläche<br />
erforderlich ist. Im Fall einer Webanwendung wäre es der auf dem Client<br />
installierte Webbrowser, der nur die Verbindung herstellt und die Daten<br />
zur Anzeige bringt. Die Präsentationsschicht stellt somit dem Nutzer<br />
die Möglichkeit bereit mit der Anwendung zu interagieren. Dabei nimmt<br />
sie Benutzer-Events entgegen, steuert das Benutzer-Interface und die Präsentation<br />
der Daten.<br />
• Applikationsschicht (application-server tier) - auch Middelware genannt.<br />
Sie wird oft noch einmal in Webschicht (web tier) und Businessschicht<br />
(business tier) unterteilt. Die Webschicht steuert das Verhalten der Applikation<br />
und die Businessschicht enthält die Geschäftslogik und den kompletten<br />
Verarbeitungsmechanismus. Weiterhin verfügt die Businessschicht<br />
über Funktionen zum Schutz der Datenbestände und stellt eine Schnittstelle<br />
(Dienst) zur Verfügung, auf die die Webschicht zugreifen kann. Weitere<br />
Schnittstellen sind denkbar, wie beispielsweise die Bereitstellung der Datenbestände<br />
an bereits bestehende Anwendungen. Beide Schichten befinden<br />
sich auf einem Applikationsserver, wie zum Beispiel dem JBoss.<br />
• Datenschicht (data-server tier) - auch Backend genannt. Sie ist für das Laden<br />
und Speichern von Daten verantwortlich, was in den meisten Fällen<br />
durch eine Datenbank realisiert wird. Die Datenschicht enthält keine Geschäftslogik.<br />
Durch die klare Trennung von Präsentationsschicht, Applikationsschicht und<br />
Datenschicht ist eine Applikation gut skalierbar, da die einzelnen Schichten logisch<br />
von einander getrennt sind. So kann, im Fall einer Webanwendung, beispielsweise<br />
die Datenschicht auf einem zentralen Datenbank-Server und die Applikationsschicht<br />
auf einem Applikationsserver laufen. Die Präsentationsschicht<br />
wird durch den Browser des Clients realisiert. Weiterhin bietet diese Architektur<br />
bei der Wartung und Erweiterbarkeit einen großen Vorteil, da die Funktiona-
- 52 -<br />
lität der einzelnen Schichten relativ leicht auszutauschen ist, ohne die anderen<br />
Schichten ändern zu müssen. Abbildung 4.2 zeigt eine Webapplikation nach der<br />
Drei-Tier-Architektur:<br />
Abbildung 4.2: Drei-Tier-Architektur<br />
4.4 Vegleich von Webframeworks für das CIRS<br />
Webframeworks helfen bei der <strong>Entwicklung</strong> von größeren Webanwendungen.<br />
Sie abstrahieren von JavaEE und verbergen dessen Komplexität vor dem Entwickler.<br />
Sie geben auch eine grundlegende Struktur der Webanwendung vor,<br />
zu welcher es sonst keine Vorgaben gibt. Die meisten Webframeworks bringen<br />
auch nützliche Software-Pakete für Validierung, Internationalisierung oder Datenbankzugriff<br />
mit, welche dem Entwickler Arbeit abnehmen. Durch Webframeworks<br />
erreicht man also bessere Wartbarkeit, Wiederverwendbarkeit einzelner<br />
Komponenten, einfache Erweiterbarkeit sowie Konfigurierbarkeit und vor<br />
allem kürzere <strong>Entwicklung</strong>szeiten<br />
Um das passende Framework für die <strong>Entwicklung</strong> der CIRS-Software für das<br />
Klinikum Görlitz zu finden, wurden die folgenden Kriterien aufgestellt:<br />
• Konfigurationsaufwand des Webframeworks<br />
• Implementierungsaufwand
- 53 -<br />
• Darstellung<br />
• Validierung von Benutzereingaben<br />
• Internationalisierung (i18n)<br />
• Vorhandensein von Literatur und Dokumentation<br />
Die vier großen Webframeworks Spring, Struts1, Struts2 und Cocoon wurden<br />
mit Hilfe einer Beispielanwendung auf ihre Einsatztauglichkeit hin überprüft<br />
und anhand dieser Kriterien bewertet. Die Beispielanwendung bestand aus einer<br />
Seite, welche durch Internationalisierung in mehreren Sprachen verfügbar<br />
sein soll. Auf dieser Seite soll ein Nutzer Daten eingeben können, welche im<br />
Anschluß validiert werden. Je nach Erfolg der Validierung soll der Nutzer auf<br />
unterschiedliche Seiten weitergeleitet werden.<br />
4.4.1 Apache Struts<br />
Apache Struts, auch Struts1 oder Struts Classic genannt, ist ein Open-Source-<br />
Framework für die Präsentations- und Steuerungsschicht von Webanwendungen.<br />
Es wurde von Craig McClanahan entwickelt und im Jahr 2000 an die Apache<br />
Software Foundation zur weiteren <strong>Entwicklung</strong> übergeben. Seit dem Jahr<br />
2005 besitzt Struts1 den Status <strong>eines</strong> „Apache Toplevel Project“. Struts1 ist das<br />
derzeit am weitesten verbreitete Framework zur <strong>Entwicklung</strong> von Webanwendungen.<br />
Eine genauere Erläuterung der Funktionsweise von Struts ist im Anhang<br />
unter A.1 zu finden
- 54 -<br />
Bewertung von Struts an Hand der Kriterien<br />
Der Konfigurationsaufwand ist bei Struts1 recht groß, da alle Formklassen 3) und<br />
Actionklassen 4) in der zentralen Konfigurationsdatei angemeldet werden müssen.<br />
Im Anschluß wird das Verhalten der Actionklassen definiert, indem die jeweilige<br />
Formklasse zugewiesen wird und die „ActionForwards“ angelegt werden,<br />
welche auf eine JSP-Seite bzw. Tiles-Zusammenstellungen verweisen. Optional<br />
kann auch angegeben werden, ob die Eingabedaten validiert werden sollen<br />
oder nicht. Wird Tiles 5) genutzt, müssen in einer extra XML-Datei die Tiles-<br />
Zusammenstellungen definiert werden.<br />
Aufgrund der Tatsache, dass man für jede Action immer eine neue Actionklasse<br />
und für jedes Formular eine Formklasse schreiben muss, kann der Implementierungsaufwand<br />
als recht hoch eingeschätzt werden, worunter auch die Wartbarkeit<br />
leidet. In der View-Komponente profitiert Struts1 von der mitgelieferten<br />
Template Engine Tiles, welche die einzelnen JSP-Seiten leicht wiederverwendbar<br />
und diese Komponente leicht wartbar macht.<br />
Die Validierung von Nutzereingaben ist einfach gehalten, da man entweder die<br />
Validierung in der „validate“-Methode in der entsprechenden Formklasse selbst<br />
implementiert oder die Validierung in einer XML-Datei beschreibt. Das Schema<br />
dieser Datei ist mit dem Schema des Commons Validator 6) Projekts identisch, wodurch<br />
Entwickler mitgebrachte Erfahrungen mit diesem Projekt nutzen können.<br />
Mehrsprachigkeit wird in Struts1 durch „Resource Bundles“ gelöst. Dazu existiert<br />
eine Datei mit mehreren Schlüssel/Wert-Paaren. Für jede zu unterstützende<br />
Sprache muss eine Datei, mit der jeweiligen Übersetzung angelegt werden, wobei<br />
jeder Datei der jeweilige Ländercode im Dateinamen angehangen wird. In<br />
einer JSP-Seite wird mittels der mitgelieferten Tags über einen Schlüssel zugegriffen<br />
und das Tag durch den jeweiligen Wert ersetzt. Aus dem Request des Cli-<br />
3) Eine Formklasse ist eine JavaBean, welche Nutzereingaben aufnimmt und speichert.<br />
4) Anfragen <strong>eines</strong> Clients werden von Actionklassen bearbeitet.<br />
5) Tiles ist eine Template Engine, siehe Anhang A.1<br />
6) http://commons.apache.org/validator/
- 55 -<br />
ents wird dabei der Ländercode ausgelesen und die entsprechende Sprachdatei<br />
ausgewählt. Dieses Verfahren kann als recht einfach und effizient eingeschätzt<br />
werden. Ein Problem bei Struts1 stellt die Literatur und Dokumentation dar. Einerseits<br />
existieren viele Bücher, Tutorials zu Struts1, andererseits sind viele von<br />
eher schlechter Qualität, oberflächlich oder regelrecht falsch.<br />
4.4.2 Apache Struts2<br />
Bei der <strong>Entwicklung</strong> von Struts1 wurde sehr auf die Wünsche der Industrie<br />
eingegangen, unter anderem die vollständige Abwärtskompatibilität zu älteren<br />
Versionen. Dadurch war es nicht immer möglich, Verbesserungen und neue Features<br />
laut Roadmap der Entwickler zu implementieren oder zumindest nur mit<br />
großer Verspätung. Aufgrund dieses Umstandes entstand das Framework Apache<br />
WebWork, welches eine Alternative zu Struts1 darstellen sollte. Im Jahr 2005<br />
wurde beschlossen, Struts1 komplett neu zu implementieren, wobei die Roadmap<br />
für die Neuimplementation mit der Roadmap für das WebWork Framework<br />
nahezu identisch war. Aufgrund dessen wurde die Weiterentwicklung von<br />
WebWork im Jahr 2007 eingestellt. Alle Entwickler und ein Großteil des Quellcodes<br />
wurden in die Neuimplementation übernommen, welche später Struts2<br />
getauft wurde. Die erste Version von Struts2 erschien im Oktober 2006 und besitzt<br />
aktuell den Status <strong>eines</strong> „Apache Toplevel Project“. Auf die Funktionsweise<br />
von Struts2 wird in A.2 näher eingegangen.<br />
Bewertung von Struts2 an Hand der Kriterien<br />
Aufgrund dessen, dass die Konfiguration der Actions nur aus einem Namen,<br />
optional einer Klasse mit dazugehörigen Interceptoren 7) sowie einer Liste von<br />
Results bestehen, kann der Konfigurationsaufwand als recht gering eingeschätzt<br />
7) Interceptoren werden vor der Ausführung einer Action aufgerufen und bereiten Daten auf.
- 56 -<br />
werden. Viele Einstellungen haben Standartwerte, die ohne Änderungen übernommen<br />
werden können. Sollte die Konfigurationsdatei zu groß werden, kann<br />
diese in mehrere Teile unterteilt werden. Die Implementierung einer auf Struts2<br />
basierenden Webanwendung kann als recht einfach bezeichnet werden. Die benötigten<br />
Actions sind alle normale Java-Klassen. Zusätzlich hilft in Struts2 ein<br />
sogenannter <strong>Entwicklung</strong>smodus. Ist dieser aktiviert, werden bei jedem Aufruf<br />
alle JSP-Seiten neu zu Servlets übersetzt. Die Konfigurationsdatei, „Resource<br />
Bundles“ wird neu eingelesen und der Browser wird angewiesen nichts zu cachen.<br />
In der View-Komponente von Struts2 sind vielfältige Technologien, wie<br />
JSP, XSLT, Freemarker, Velocity oder auch JasperReports möglich. Für JSP-Seiten<br />
kann das Tiles-Framework genutzt werden.<br />
Die Validierung von Nutzereingaben wird in Struts2 mit der Object Graph Navigation<br />
Language (kurz OGNL) verwirklicht. Mit dieser Sprache ist es möglich<br />
auf Daten von Java-Objekten zuzugreifen. Diese Daten können dann mit Hilfe<br />
von regulären Ausdrücken verglichen werden. Wie Eingabedaten validiert werden<br />
sollen, ist in einer XML-Datei definiert. Mit Hilfe des Javascript-Themes ist<br />
es möglich die Daten bereits clientseitig zu validieren. Die Syntax dieser XML-<br />
Datei ist dem „Commons Validator“ Projekt ähnlich und somit leicht zu erlernen.<br />
Die Mehrsprachigkeit wird exakt genauso wie in Struts1 über „Resource<br />
Bundles“ und Tags zum Auslesen dieser erreicht.<br />
Für Struts2 ist nur wenig Dokumentation verfügbar, Bücher existieren fast keine<br />
und Tutorials sind schwer zu finden. Die ist dem Umstand geschuldet, dass<br />
Struts2 ein recht neues Framework ist. Das Struts2-Projekt stellt aber eine Beispielanwendung<br />
bereit, welche die verschiedenen Funktionen von Struts2 verdeutlicht.<br />
Weiterhin existiert eine vorkonfigurierte, leere Webanwendung, wodurch<br />
der Einstieg in die eigene Anwendung recht leicht gelingt.
- 57 -<br />
4.4.3 Spring Framework<br />
Das Spring Framework ist ein Open-Source-Framework. Es bietet eine komplette<br />
Umgebung zur <strong>Entwicklung</strong> von JavaEE-Applikationen. Spring ist modular<br />
aufgebaut, wobei die einzelnen Module sich durch andere, bereits existierende<br />
Lösungen wie Hibernate austauschen lassen. Man bezeichnet Spring aus diesem<br />
Grund auch als Metaframework. Der Kern des Frameworks kann für jede Java-<br />
Applikation genutzt werden. Für die Programmierung von JavaEE-Anwendungen<br />
stehen weitere Module wie Spring-MVC, Spring-DAO oder Spring-AOP zur<br />
Verfügung. Spring setzt dabei auf ein POJO-basiertes Programmiermodell, dass<br />
heißt, die Businessschicht wird mit Hilfe von POJOs realisiert. Die Verbindungen<br />
zwischen diesen Objekten wird mit Dependency Injection hergestellt, dass heißt,<br />
Konfigurationsparameter und zu verwendende Beans werden vom Framework<br />
zur Laufzeit, bei der Instanziierung der POJOs injiziert. Die Konfiguration dazu<br />
erfolgt deklarativ in XML-Dateien, wodurch es möglich ist, einzelne Programmbausteine<br />
recht einfach durch andere zu ersetzen. In Abbildung 4.3 sind alle Module<br />
von Spring dargestellt. Für die Webschicht einer JavaEE-Webanwendung<br />
ist das Modul Spring-MVC verantwortlich. Die Funktionsweise dieses Moduls<br />
ist im Anhang unter A.3 kurz erläutert.<br />
Bewertung von Spring-MVC an Hand der Kriterien<br />
Die Konfiguration einer Spring-MVC Anwendung ist einfach gehalten, kann<br />
aber umfangreich werden. Zu jedem Servlet muss eine XML-Konfigurationsdatei<br />
angelegt werden, welche die Definition für die Controller, ViewResolver sowie<br />
das URL-Mapping enthält. Bei dem URL-Mapping wird jedem Request ein Controller<br />
zugeordnet. Der Aufwand bei der Implementierung ist gering, da für jede<br />
Klasse eine Referenzimplementation zur Verfügung gestellt wird, welche bei<br />
Bedarf ersetzt werden kann. Die Möglichkeiten zu Darstellung sind im Spring-<br />
MVC recht umfangreich. Neben JSP-Seiten sind zum Beispiel ebenfalls die View-
- 58 -<br />
Abbildung 4.3: Übersicht Spring 8)<br />
Technologien XSLT, Velocity oder PDF möglich.<br />
Die Validierung von Nutzereingaben kann wahlweise über eine selbst geschriebene<br />
Klasse geschehen oder wie bei Struts1 mit Hilfe des „Commons Validator“<br />
Projekts über eine XML-Datei. Internationalisierung wird erreicht, indem man<br />
„Resource Bundles“ am Servlet anmeldet. Im Anschluß kann man, wie bereits in<br />
Struts1 und Struts2, in Java-Klassen oder in JSP-Seite durch Custom-Tags darauf<br />
zugreifen.<br />
Zu Spring existiert eine umfangreiche Dokumentation und eine Vielzahl an Büchern.<br />
Im Internet findet man auch leicht eine Vielzahl guter Tutorials.<br />
4.4.4 Apache Cocoon<br />
Apache Cocoon ist ein Open-Source-Framework und basiert auf dem komponentenbasierten<br />
Framework Apache Avalon. Cocoon ist hauptsächlich als XML-<br />
Publishing-System konzipiert, weshalb viele Content Management Systeme wie<br />
8) http://static.springframework.org/spring/docs/1.2.x/reference/
- 59 -<br />
Apache Lenya oder Daisy auf Cocoon aufbauen. Es wurde 1998 von Stefano<br />
Mazzocchi entwickelt und später an die Apache Software Foundation übergeben.<br />
Mittlerweile existiert eine Neuimplementation, welche die Versionsnummer<br />
2 trägt. Die Funktionsweise dieses Frameworks ist im Anhang unter A.4<br />
beschrieben.<br />
Bewertung von Cocoon an Hand der Kriterien<br />
Cocoon läßt sich zentral in der „SiteMap“ einfach konfigurieren. Diese läßt sich<br />
auch in „SubSiteMaps“ unterteilen. Bei einer Neuentwicklung einer Webanwendung,<br />
auf Basis von Cocoon, entsteht vorerst ein immens hoher Konfigurationsaufwand.<br />
Allerdings nimmt dieser Aufwand ab, da sich einzelne Komponenten<br />
später wiederverwenden lassen.<br />
Der Implementationsaufwand von Cocoon kann nicht direkt mit dem von Struts1,<br />
Struts2 oder Spring verglichen werden. In Cocoon ist es nicht zwingend<br />
nötig Java-Code zu schreiben, da alles mit XML-Dateien beschrieben wird. Allerdings<br />
kann der Aufwand für das Schreiben dieser XML-Daten höher als bei<br />
den restlichen Frameworks eingeschätzt werden. Auch muss ausführlicher getestet<br />
werden, da keine Validierung der Komponenten zur Übersetzungszeit geschieht.<br />
Durch die Trennung von Inhalt und Präsentation müssen selbst für einfache<br />
Seiten mehrere Dateien, wie XML-Dokumente, XML-Schemas und XSL-<br />
Dokumente, geschrieben werden. Zu Gute kommt Cocoon allerdings die Wiederverwendbarkeit<br />
der einzelnen Komponenten. Wurde zum Beispiel eine Komponente<br />
definiert, kann diese beliebig wiederverwendet werden. Als Ausgabeformat<br />
sind unter anderem XML, HTML, PDF, PS oder SVG möglich.<br />
Für Eingabedaten steht das „Cocoon Forms“-Framework, welches auf XForms<br />
basiert, zur Verfügung. Mit diesem ist es möglich Formulare zu definieren und<br />
gegebenenfalls zu validieren. Forms bestehen aus einem Template und einer<br />
Definition. Um Formulare ausliefern zu können, werden spezielle Formular-<br />
Generatoren und Transformatoren, benötigt. Für die Internationalisierung exis-
- 60 -<br />
tiert ebenfalls ein Transformator, welcher den SAX-Stream der jeweiligen Sprache<br />
entsprechend transformiert. Hier wird ebenfalls über einen Schlüssel auf den<br />
jeweiligen Wert zugegriffen. Allerdings sind diese Schlüssel/Wert-Paare bei Cocoon<br />
in XML-Dateien beschrieben.<br />
Die verfügbare Literatur für Cocoon ist ausgesprochen hochwertig und die Dokumentation<br />
des Projekts selbst hervorragend.<br />
4.4.5 Fazit<br />
Das CIRS für das Klinikum nimmt einen Meldebogen in XML-Form auf und<br />
soll auch Ausgaben in XML-Form abliefern können. Hierfür eignet sich Apache<br />
Cocoon besonders, da Cocoon komplett auf XML basiert und somit kein Technologiewechsel<br />
nötig ist. Ein weiterer Vorteil von Cocoon ist die leichte Austauschbarkeit<br />
des Ausgabeformats, ohne viel zu implementieren. Neben XML<br />
und XHTML können auch PDF und Excel-Dokumente ausgegeben werden.<br />
Cocoon setzt allerdings fundiertes Wissen über XML, XPath, XForm und XSL<br />
voraus. Als Nachteil muss die Validierung über „cForms“ angesehen werden,<br />
mit deren Hilfe man beispielsweise bei weitem nicht die Möglichkeiten der OG-<br />
NL von Struts2 erreicht. Die Internationalisierung von Cocoon ist ebenfalls etwas<br />
komplexer, da die Schlüssel/Wert-Paare nicht in einfachen Text-Dateien,<br />
sondern in XML-Dateien abgelegt sind. Da die einzelnen Komponenten, wie<br />
XSL-Dokumente nicht zur Übersetzungszeit validiert werden, entsteht später<br />
ein erhöhter Testaufwand. Aufgrund dieser Tatsachen wurde vom Einsatz von<br />
Cocoon abgesehen.<br />
Struts1 ist ein leicht zu erlernendes Frameworks und unterstützt den Entwickler<br />
in einer Reihe von Punkten wie Internationalisierung, Validierung oder Modularisierung<br />
der View durch Tiles stark. Zu Struts1 existieren eine Reihe von Tutorials<br />
und Bücher.<br />
Ein großer Kritikpunkt ist das System der Action- und Formklassen. Wurde ei-
- 61 -<br />
ne Actionklasse einmal instanziiert, so wird diese Instanz für jeden Request benutzt.<br />
Dies kann zu Fehlern führen, wenn man bei der <strong>Entwicklung</strong> nicht auf<br />
die Nebenläufigkeit der Actionklasse achtet. Struts1 Actionklassen und Formklassen<br />
sind keine POJOs und müssen immer von einer abstrakten Klasse ableiten,<br />
was den Entwickler dazu zwingt, spezielle Implementationsdetails zu beachten<br />
und schränkt ihn somit in seiner Flexibilität ein. Unnötige Komplexität<br />
wird dadurch erzeugt, dass zu jedem Eingabeformular immer eine Formklasse<br />
existieren muss. Problematisch beim Füllen von Eingabedaten aus einem übertragenen<br />
Formular in eine Formklasse ist die fehlende Typenkonvertierung. Alle<br />
Daten müssen den Typ String haben und werden nicht automatisch in Integer-,<br />
Boolean-, Long- oder Date-Werte konvertiert. Aufgrund dieser Probleme wurde<br />
vom Einsatz des Struts1 Frameworks abgesehen.<br />
Das Spring Framework bietet eine Grundlage zur <strong>Entwicklung</strong> kompletter JavaEE<br />
Anwendungen. Für die Webschicht einer Webanwendung ist das Spring-<br />
MVC gedacht. Das Spring-MVC ist dabei einfach strukturiert und schnell zu<br />
verstehen. Verglichen mit Struts1 und Cocoon kann der Konfigurations- und<br />
Implementierungsaufwand als wesentlich geringer eingeschätzt werden. In der<br />
View-Komponente sind vielfältige Technologien möglich. Das Spring-MVC ermöglicht<br />
es dem Entwickler Nutzereingaben recht einfach zu validieren und vereinfacht<br />
die Internationalisierung einer Webanwendung.<br />
Struts2 ist ein recht junges Webframework, welches momentan noch stark weiterentwickelt<br />
wird. Der Implementierungsaufwand kann mit dem vom Spring-<br />
MVC verglichen werden. Der Aufwand zur Konfiguration kann allerdings bei<br />
Struts2 als geringer eingeschätzt werden. Struts2 geht bei der Validierung von<br />
Nutzereingaben soweit, dass mit Hilfe der OGNL auf Java-Objekte zugegriffen<br />
werden kann, was die Möglichkeiten der Validierung erweitert. Die Internationalisierung<br />
wird ähnlich einfach wie bei Spring erreicht. Ein Problem bei Struts2<br />
stellt die Literatur dar, weil kaum Bücher zu Struts2 existieren. Die projekteigene<br />
Dokumentation ist recht knapp, wird aber immer wieder erweitert und verbes-
- 62 -<br />
sert.<br />
Mit beiden Frameworks ist es möglich, einfach und schnell Webanwendungen<br />
zu entwickeln. Als Basis für die Implementierung des CIRS wurde das Webframework<br />
Struts2 ausgesucht. Den Ausschlag dazu gaben zusätzliche Features,<br />
wie das automatische Einbinden von Javascript für Interaktivität auf Clientseite,<br />
der <strong>Entwicklung</strong>smodus, die OGNL sowie die umfangreichen Tag-Bibliotheken.<br />
Zusätzlich stellt das Struts2-Projekt eine leere, aber vorkonfigurierte Webanwendung<br />
bereit, wodurch der Start der Implementierung stark beschleunigt wird.
- 63 -<br />
5 Implementierung<br />
Ausgehend von der Architektur der CIRS-Webanwenendung sollen in diesem<br />
Kapitel einzelne Technologien und deren Zusammenspiel anhand von einigen<br />
Codebeispielen erläutert werden. Dazu wird im ersten Teil des Kapitels die Drei-<br />
Tier-Architektur mit den eingesetzten Komponenten dargestellt. Ausgehend davon<br />
werden die verwendeten Komponenten im weiteren vorgestellt.<br />
5.1 Architektur und Komponenten<br />
Als Container für die Webanwendung soll das Struts2-Framework dienen, welches<br />
sich nicht nur hervorragend zur Abbildung der Geschäftslogik eignet, sondern<br />
auch in der Lage ist weitergehende Funktionalität, wie zum Beispiel das<br />
PDF-Generieren, zu integrieren. Dementsprechend sind die Komponenten auf<br />
dem Apache Tomcat Server in der Programmiersprache Java implementiert. Des<br />
weiteren wurde Hibernate zur Anwendung gebracht, um die Arbeit der Persistierung<br />
zu übernehmen. In diesem Zusammenhang wurde auch das Konzept<br />
des DataAccessObjects verwendet, um persistenz-bezogene Funktionalität zu<br />
kapseln. Zur Darstellung wurden ausschließlich JavaServer Pages unter Zuhilfenahme<br />
der Struts2-Tag-Bibliothek eingesetzt. Die Abbildung 5.1 zeigt die Architektur<br />
mit den einzelnen Komponenten. Alle wesentlichen Komponenten der<br />
Webanwendung werden von Struts2 verwaltet und miteinander verknüpft. Dies<br />
geschied maßgeblich in der Struts2-Konfigurationsdatei /<strong>Risikous</strong>/src/struts.xml.
- 64 -<br />
Abbildung 5.1: <strong>Risikous</strong> Systemarchitektur<br />
Neben den Komponenten werden in der Konfigurationsdatei auch Parameter<br />
gesetzt, die das Verhalten der Webanwendung beinflussen. Das wären beispielsweise<br />
der Entwicklermodus, das Cacheverhalten des Browsers und die Internationalisierung.<br />
Da die Webanwendung aus mehreren Modulen besteht, wurden<br />
für die jeweiligen Module extra Konfigurationsdateien angelegt. Das hat den<br />
Vorteil, dass die Konfiguration übersichtlich bleibt und auch neuen Entwicklern<br />
den Einstieg in die Software erleichtert.<br />
5.2 Persistierung<br />
In Webanwendungen existieren Daten nur eine begrenzte Zeit. Möchte man diese<br />
Daten speichern, muss man auf eine Persistenzlösung zurückgreifen. Eine<br />
Möglichkeit besteht darin, die Daten in Dateien zu speichern, was aber bei großen<br />
Datenmengen zu Unübersichtlichkeit und schlechter Leistung führt. Eine Datenbank<br />
ist eine weitere Möglichkeit. Sie kümmert sich selbst um die Verwaltung<br />
und einen effektiven Zugriff auf die Daten. Allerdings hat sie den Nachteil, dass
- 65 -<br />
exakt festgelegt werden muss, wie alle Objekte der Anwendung auf die Datenbank<br />
abgebildet werden sollen. Eine Möglichkeit, diesen Nachteil zu umgehen,<br />
ist Object-Relational-Mapping (kurz: ORM) . Dabei wird der Zustand <strong>eines</strong> Objekts<br />
in einer relationalen Datenbank gespeichert und aus entsprechenden Datensätzen<br />
wiederum Objekte erzeugt.<br />
Bei <strong>Risikous</strong> fiel die Wahl auf das Open-Source-Framework „Hibernate“. Es gilt<br />
als stabil und ist leicht über externe XML-Dateien konfigurierbar. Mit Hilfe der<br />
Hibernate Query Language (kurz HQL) wird auf die persistenten Objekte zugegriffen.<br />
Die persistenten Objekte stellen in der Webanwendung die Modellklassen<br />
dar. Die Abbildung 5.2 zeigt das Klassendiagramm der Modellklassen. Die zu<br />
Abbildung 5.2: Klassendiagramm DataTransferObjects<br />
speichernden Klassen werden, unter Verwendung von Hibernate, auf Tabellen<br />
in der Datenbank gemappt. Diese Klassen sind einfache JavaBeans. Der Zugriff<br />
aus der Businesslogik auf die Modellklassen wird mit Hilfe von DataAccessObjects<br />
(kurz DAO) realisiert. Sie entkoppeln die Persitenzlogik von der Geschäftslogik<br />
und sind für den Datenzugriff optimiert.
- 66 -<br />
5.3 Meldebogenrepräsentation<br />
<strong>Risikous</strong> soll die Möglichkeit bieten, verschiedene CIRS-Umfragen im Klinikum<br />
durchführen zu können. Dabei soll die Software den Meldebogen im einheitlichen<br />
Layout, als Webseite dem Mitarbeiter zur Verfügung stellen. Als Vorlage<br />
für den Aufbau der Webseite wurde der Meldebogen der Firma Protec verwendet.<br />
Der Meldebogen teilt dabei die verschiedenen Fragen in Blöcke ein. Jeder<br />
Block enthält die entsprechenden Fragen und die dazugehörige Auswahl<br />
an Antworten. Für die Abgabe der Antwort stellt der Meldebogen Felder zum<br />
Ankreuzen zur Verfügung. Weiterhin stellt der Meldebogen die Möglichkeit bereit,<br />
ausgesuchte Fragen schriftlich zu beantworten, beispielsweise „Was ist passiert?“.<br />
Aufbauend auf dem Meldebogen der Firma Protec und dessen Aufbau<br />
wurde XML 1) als Sprache zur Repräsentation gewählt. Die Entscheidung für den<br />
Einsatz von XML beschreibt der folgende Satz recht präzise.<br />
„Die EXTENSIBLE MARKUP LANGUAGE (XML) ist ein einfaches,<br />
universales Format für den Austausch strukturierter Informationen.“ 2)<br />
Der Satz erwähnt, das XML Informationen strukturiert weitergegeben und gespeichert<br />
werden können. Der Aufbau des Meldebogens der Firma Protec besitz<br />
auch eine Struktur, bestehend aus Blöcken, Fragen und Antworten. Diese<br />
lässt sich mittels XML wunderbar abbilden. Zum Abbilden der einzelnen Informationen<br />
werden in XML so genannte Tags verwendet. Die Tags besitzen<br />
einen Bezeichner, welcher in spitzen Klammern geschrieben wird. Die Tags treten<br />
meist paarweise auf. Das erste dieser Tags ist das öffnende Tag () und<br />
das schließende Tag besitzt nach der öffnenden, spitzen Klammer einen Schrägstrich<br />
(). Zwischen den Tags stehen die jeweiligen Informationen, beziehungsweise<br />
können auch weitere Tags eingeschlossen werden. Es gibt allerdings<br />
1) Bei XML handelt es sich um eine Metasprache. Eine Metasprache hat die Eigenschaft, dass<br />
man mit dieser weitere Sprachen für einen konkreten Anwendungsfall bilden kann.<br />
2) [WK03], Seite 17
- 67 -<br />
auch leere Tags, welche vor der schließenden Klammer mit einem Schrägstrich<br />
geschlossen werden (). In einem Tag können auch Attribute stehen, welche<br />
aus einem Schlüssel und einem dazugehörigen Wert bestehen. Die Kombination<br />
aus Starttag und Endtag nennt man Element. Das Listing 5.1 zeigt einen<br />
Ausschnitt aus dem aktuellen Meldebogen in XML. Wie zu sehen ist, kann die<br />
XML-Datei vom Menschen gelesen werden, was einer der Vorteile von XML<br />
ist.<br />
1 <br />
2 <br />
3 <br />
4 <br />
5 <br />
6 verantwortlich<br />
7 verursachend<br />
8 helfend, zum Ereignis hinzu gerufen<br />
9 beobachtet<br />
10 selbst vom Ereignis betroffen<br />
11 sonstiges<br />
12 <br />
13 <br />
14 <br />
15 <br />
Quellcode 5.1: Ausschnitt aus der XML-Datei des Meldebogens der Firma Protec<br />
5.3.1 Aufbau<br />
Das Listing 5.1 enthält einen Teil des ersten Blocks des Meldebogens. Am Anfang<br />
des XML-Dokuments wurde eine Deklaration
- 68 -<br />
UTF-8“?> eingefügt. Das encoding=“UTF-8“ gibt den verwendeten Zeichensatz<br />
an. Beim Meldebogen von Protec wurde der Unicode Zeichensatz UTF-8 verwendet.<br />
Dadurch besteht die Möglichkeit, die Fragen und Antworten im Meldebogen<br />
in einer beliebigen Sprache, zu schreiben. Die Zeile 2 im Listing 5.1 enthält<br />
sogenannte Processing Instruction. Sie richten sich an ein „nichtmenschliches<br />
Publikum“, nämlich an ein Anwendungsprogramm, dass das XML-Dokument<br />
ganz oder teilweise verarbeiten soll. Im Kommenden sollen die wichtigsten Tags<br />
des Meldebogens kurz vorgestellt werden.<br />
<br />
Das Block-Tag repräsentiert, wie im Meldebogen der Firma Protec, einen Block<br />
bestehend aus Fragen und Antworten. Weiterhin enthält das Tag ein Attribut<br />
Text, welches als Wert den Namen des Blockes enthält. Ist das -Tag geöffnet,<br />
folgt danach das question-Tag.<br />
<br />
Das question-Tag repräsentiert eine Frage und enthält als Attribut den Text der<br />
Frage. Nach dem question-Tag folgen die möglichen Antworten.<br />
<br />
Mit dem -Tag kann angegeben werden, ob es sich bei der<br />
Frage um eine Pflichtfrage handelt oder nicht. Dazu wird der Wert des Attributes<br />
auf true für keine Pflichtfrage oder auf false für eine Pflichtfrage verwendet.<br />
verantwortlich<br />
Da es im Meldebogen mehrere Möglichkeiten zum Beantworten von Fragen gibt,<br />
müssen diese auch im XML-Meldebogen entsprechend angegeben werden. Dazu<br />
stehen zwei Tags zur Verfügung. Das -Tag repräsentiert die Antwortmöglichkeit<br />
des Ankreuzens und das -Tag repräsentiert Freitextfelder.<br />
Zwischen den Tags wird die entsprechende Antwort formuliert, beispielsweise<br />
verantwortlich.
- 69 -<br />
5.3.2 XML-Schema des Meldebogens<br />
Da mit XML beliebige XML-basierende Markup-Sprachen definiert werden können,<br />
ist es erforderlich, dass Regeln für die entsprechende Sprache existieren.<br />
Diese Regeln werden in XML-Schemas oder mit Hilfe der Document Type Definition<br />
(DTD) umgesetzt. Das XML-Schema ist dabei eine Sprache zum Definieren<br />
von XML-Strukturen. Für den XML-Meldebogen wurde ein XML-Schema<br />
entworfen, dieses befindet sich im Anhang B.1. Das XML-Schema wird beim<br />
Laden <strong>eines</strong> XML-Meldebogens in die Software zum Validieren benötigt. Entspricht<br />
der XML-Meldebogen nicht dem Regelwerk, erkennt das der Parser anhand<br />
des Schemas und gibt einen Fehler zurück.<br />
5.4 Benutzungsoberfläche - Ergonomie<br />
Um die Anwendung mit einer intuitiven Benutzungsoberfläche zu versehen,<br />
werden verschiedene Technologien eingesetzt. Die Benutzungsoberfläche wird<br />
bei Webanwendungen in Form von HTML-Seiten in einem entsprechenden Webbrowser<br />
dargestellt. Diese HTML-Seiten werden von der <strong>Risikous</strong>-Anwendung<br />
mittels JSP’s erzeugt. JavaServer Pages sind meist normale HTML-Dokumente,<br />
welche mit speziellen Tags Serlvetfunktionalitäten einbinden. Das Framework<br />
Struts2 stellt eine umfangreiche Tag-Bibliothek zur Verfügung. Dabei teilt die<br />
Struts2 Tag-Bibliothek die Tags in die Kategorien Control Tags, Data Tags, Form-<br />
Tags, Non-Form UI Tags und in JavaScript Tags ein. 3) Die einzelnen Struts2-<br />
Tags werden in einer JSP immer mit dem Präfix benutzt. Eine Neuheit<br />
stellt Struts2 mit den JavaScript Tags zur Verfügung. Sie ermöglichen es, ohne<br />
große JavaScript Kenntnisse, clientseitige Dynamik zu implementieren. In <strong>Risikous</strong><br />
wurde der Kalender für das Reporting und das Setup mit Hilfe der Ajax-<br />
3) Die komplette Tagreferenz stellt das Struts2 Projekt auf der Webseite<br />
http://struts.apache.org/2.x/docs/tag-reference.html bereit.
- 70 -<br />
Tags implementiert. Weiterhin wurde auch das Nachladen von<br />
verschiedenen Teilen einer Ansicht mit den JavaScript-Tags realisiert.<br />
Die Abbildung 5.2 zeigt einen Ausschnitt aus der period.jsp, welche für die Angabe<br />
des Zeitraumes für das Reporting zuständig ist.<br />
1 <br />
2<br />
3 <br />
4 :<br />
5 <br />
6 <br />
7 <br />
8 <br />
Quellcode 5.2: Ausschnitt aus der Period JSP<br />
Weiterhin wurde das Tiles-Framework, welches mit Struts2 mitgeliefert wird,<br />
eingesetzt. Es ermöglicht die Webseite komponentenbasiert aufzubauen. Im Fall<br />
von <strong>Risikous</strong> ist die Benutzungsoberfläche in Header, Titel, Navigation, Content<br />
und Footer eingeteilt, wobei nicht in jeder Ansicht alle Komponenten benötigt<br />
werden. Durch den Einsatz von Tiles wird zur Laufzeit das benötigte Layout<br />
mit den jeweiligen Komponenten erstellt. Um dies Realisieren zu können, existiert<br />
in der <strong>Risikous</strong>-Anwendung eine layout.jsp, welche das globale Layout enthält.<br />
In dieser sind die View-Elemente enthalten, die in jeder Ansicht verwendet<br />
werden sowie Tiles-Attribute. Die Tiles-Attribute werden während der Laufzeit<br />
mit den entsprechenden Komponenten verknüpft. Damit die Webanwendung<br />
die entsprechenden Komponenten zuordnen kann, werden diese in der tiles.xml<br />
konfiguriert. Dies hat den Vorteil, dass das Layout zentral in einer XML-<br />
Konfigurationsdatei festlegt werden kann, was vor allem die Wartbarkeit der<br />
Software erhöht. Soll zum Beispiel global das Layout ausgetauscht werden, so
- 71 -<br />
ist nur ein Eintrag in der tiles.xml zu ändern. Die komplette layout.jsp sowie die<br />
Tiles-Konfiguration der Webanwendung kann im Anhang B.2 und B.3 eingesehen<br />
werden.<br />
Für die Eingabe von Daten stellt die Anwendung dem Nutzer entsprechende<br />
Eingabefelder zur Verfügung. Bei einigen dieser Eingabefelder, beispielsweise<br />
beim Login, muss eine Überprüfung der Eingabedaten stattfinden. Dabei prüft<br />
das System beim Login, ob es sich um eine Email-Adresse handelt oder ob die<br />
Länge des Passwortes aus min. 8 Zeichen besteht. Im Fehlerfall signalisiert die<br />
Anwendung den Fehler, in dem es die fehlerhafte Eingabe mit der Farbe rot<br />
anzeigt. Die Validierung ist in <strong>Risikous</strong> in XML-Dateien definiert. Um die Validierung<br />
zu aktivieren, muss sich der Interceptor, welcher die Validierung durchführt,<br />
in dem Interceptor-Stack der Action befinden. In den XML-Dateien kann<br />
nach Integerwerten, Emails, Zeichenketten validiert werden, oder für komplexere<br />
Begriffe können reguläre Ausdrücke definiert werden. Auf Java-Objekte und<br />
deren Eigenschaften kann durch OGNL zugegriffen werden.<br />
1 <br />
2 <br />
3 <br />
4 <br />
5 true<br />
6 <br />
7 <br />
8 <br />
9 true<br />
10 <br />
11 <br />
12 <br />
13 <br />
Quellcode 5.3: Login – Validation
- 72 -<br />
In Listing 5.3 ist ein Ausschnitt der XML-Datei zu sehen, welche die Validierung<br />
der Eingaben auf der Login-Seite beschreibt. Der Ausschnitt gibt an, wie das<br />
Email-Eingabefeld validiert wird. Für das Feld existieren zwei Validierungsregeln.<br />
Mit der ersten Regel wird überprüft, ob überhaupt eine Eingabe getätigt<br />
wurde. Wurde eine Eingabe getätigt, wird in der zweiten Regel geprüft, ob die<br />
Eingabe eine gültige Email ist, wobei führende und nachstehende Leerzeichen<br />
mit Hilfe des Parameters „trim“ entfernt werden. Beide Regeln verweisen auf<br />
einen Key, welcher die Fehlermeldung in der jeweils verwendeten Sprache beschreibt.<br />
5.5 Internationalisierung des CIRS<br />
Um die vielen Bezeichnungen innerhalb der Webanwendung einheitlich und<br />
zentral verwalten zu können, wurden der Struts2 Message Resources eingesetzt.<br />
Der Struts2 Message Resource besteht aus einer oder mehreren Properties-Dateien.<br />
Sie enthalten einzelne Bezeichnungen, die in der Webanwendung verwendet<br />
werden. Die einzelnen Bezeichnungen werden zur Laufzeit entsprechend<br />
von Struts2 aus der Properties-Datei ausgelesen und an die entsprechenden Stellen<br />
der Webanwendung geschrieben. Dieses Verfahren hat den Vorteil, dass die<br />
einzelnen Bezeichnungen zentral an einer Stelle verwaltet werden können, ohne<br />
den Quellcode antasten zu müssen. Das Listing 5.4 stellt einen Teil aus einer<br />
Properties-Datei der Webanwendung dar. Bei der <strong>Risikous</strong> Webanwendung<br />
wurde für jedes Modul eine extra Propertie-Datei angelegt. Das hat den Vorteil,<br />
dass nicht erst in einer langen Datei nach der entsprechenden Bezeichnung gesucht<br />
werden muss.
- 73 -<br />
1 # Resources for parameter ’de.klinikum.struts.action.questionnaire’<br />
2 # Project CIRS for Klinikum Görlitz<br />
3 # Application Resource for German Language<br />
4<br />
5 # Info<br />
6 questionnaire.link.hotline=Hotline<br />
7 questionnaire.link.email=Email<br />
8 questionnaire.link.feedback=Feedback<br />
9 questionnaire.link.help=Hilfe<br />
Quellcode 5.4: Teil aus der package.properties des CIRS-Umfrage Package<br />
Weitherhin lässt der Struts2 Message Source die Möglichkeit offen, die Software<br />
zu einem späteren Zeitpunkt zu internationalisieren. Dazu müssen nur weitere<br />
Propertie-Dateien mit den entsprechenden Bezeichnungen in der neuen Sprache<br />
erstellt werden. Diese müssen aber am Ende des Dateinamens die entsprechende<br />
Länderkennung angehängt bekommen. Für die Englische Sprache würde<br />
ein „en“ angehangen werden. Die Datei sollte dann package.properties_en heißen.<br />
Wird die <strong>Risikous</strong>-Webanwendung nun von einem Browser gestartet, der<br />
als Standardsprache 4) Englisch eingestellt hat, wird automatisch die Webanwendung<br />
in der Sprache Englisch ausgeliefert.<br />
5.6 Erzeugen von PDF-Dateien<br />
Zur Weiterverarbeitung der erzeugten Daten wird an den entsprechenden Stellen<br />
in der Webanwendung die Möglichkeit geboten, PDF-Dateien zu erstellen.<br />
Die PDF-Dateien sollen über eine Download-Funktion dem Nutzer bereitgestellt<br />
werden. Das Layout dieser Dateien soll dem Klinikum üblichen Style genügen.<br />
4) Die Sprachen können im Firefox unter Extras->Einstellung->Erweitert->Sprachen eingestellt<br />
werden.
- 74 -<br />
Dieser schreibt vor, dass das Logo oben über die ganze Seite und die Seitenanzahl<br />
mittig unten zu platzieren sind. Zum Erstellen von PDF-Dateien wird in<br />
<strong>Risikous</strong> ein XML Dokument benötigt, welches die Parameter enthält, die im zu<br />
erstellenden PDF angezeigt werden sollen. Das XML Dokument wird von der<br />
Methode createQuestionnaire() zur Laufzeit erzeugt. Dabei legt die Methode den<br />
erzeugten XML-Stream nicht auf die Festplatte in Form einer Datei ab, sondern<br />
behält diesen für die Weiterverarbeitung im Speicher. Den kompletten Quellcode<br />
der Methode createQuestionnaire() finden Sie im Anhang B.4.<br />
Abbildung 5.3: Vorgang zum Erstellen einer PDF-Datei Mittels XSL-<br />
FO<br />
Weiterhin ist für das Erzeugen von PDF-Dateien eine XSL-Datei notwendig. Sie<br />
enthält Regeln für die Transformation des XML-Dokuments in das XSL-FO-
- 75 -<br />
Dokument 5) . Die Transformation wird durch einen XSLT-Prozessor durchgeführt.<br />
Im Falle von <strong>Risikous</strong> wurde der Xalan 6) XSLT-Prozessor verwendet. Der XSLT-<br />
Prozessor wählt aus dem XML-Dokument die erforderlichen Elemente aus und<br />
transformiert diese mit Hilfe des XSL-Stylesheets in eine Kombination aus XSL-<br />
FO-Elementen und -Attributen. Das fertige XSL-FO-Dokument enthält nun das<br />
Erscheinungsbild des Zielmediums. Das sind im Falle des Meldebogen-PDF’s,<br />
das Logo, die Überschrift, die Fragen mit den entsprechenden Antworten und<br />
die Seitenzahl. Weiterhin sind auch Formatierungsoptionen für das Dokument<br />
und für einzelne Elemente im XSL-FO-Dokument enthalten.<br />
Im letzten Schritt wird durch einen Formatierer das XSL-FO-Dokument in das<br />
PDF-Format übersetzt. In <strong>Risikous</strong> wird der frei verfügbare Apache Formatting<br />
Objects Processor 7) verwendet. Dazu wird die Methode createPdf() aufgerufen,<br />
diese nimmt als Parameter den XSL-FO-Bytestream und gibt als Resultat das<br />
fertige PDF zurück. Die Methode createPdf() ist im Anhang B.5 dieser Arbeit einzusehen.<br />
5) Extensible Stylesheet Language Formatting Objects (XSL-FO) ist eine XML-Spezifikation, die der<br />
grafischen Aufarbeitung von XML-Dokumenten dient. Bei XSL-FO geht es darum, Dokumente<br />
in druckbare Formate wie PDF oder PostScript umzuwandeln.<br />
6) Xalan ist ein XSLT-Prozessor, der mit Hilfe von XSL-Stylesheets XML-Dokumente in ein Zielformat<br />
überführt, beispielsweise in XSL-FO oder XHTML.<br />
7) Der Formatting Objects Processor (FOP) erstellt aus XSL-FO-Dokumenten verschiedene Ausgabeformate.<br />
Der Processor wurde von der Apache Foundation entwickelt.
- 76 -<br />
6 Einsatzerprobung<br />
Nach dem Abschluss der Implementierung von Riskous fand eine Einsatzerprobung<br />
mit verschiedenen Kommilitonen des Matrikels II03 des Fachbereiches Informatik<br />
der Hochschule Zittau/Görlitz statt. Dazu wurde die Webanwendung<br />
auf einem virtuellen Server ausserhalb des Klinikums installiert. Für den Test<br />
wurde der Meldebogen der Firma Protec verwendet. Die Testkandidaten erhielten<br />
über „https“ Zugriff auf die CIRS-Umfrage und konnten diese testen. Über<br />
die in der CIRS-Umfrage eingebaute Feedback-Funktion konnte bei Bedarf Kontakt<br />
mit den Entwicklern aufgenommen werden. Das Feedback war recht positiv,<br />
es wurde die gut strukturierte Anordnung der Fragen und Antworten sowie<br />
der Statusbar gelobt. Die Erprobung verlief recht reibungslos bis auf einen<br />
Fehler, der auf ein MySQL Problem zurückgeführt werden konnte. So trennte<br />
die Datenbank standartmäßig nach 8 Stunden Inaktivität, zwischen der Webanwendung<br />
und der DB, die Verbindung. Das Problem wurde versucht mit der<br />
AutoReconnect Funktion von Hibernate zu lösen, was aber nicht zu einem zufriedenstellenden<br />
Ergebnis führte. Aus diesem Grund wurde in Riskous eine Methode<br />
implementiert, die auf das MySQL Ereignis reagiert. Nach dem Beheben<br />
des Fehlers traten keine Probleme mehr zwischen Webanwendung und Datenbank<br />
auf.<br />
Nach der Präsentation der Webanwendung vor der Projektgruppe CIRS im Klinikum<br />
GR wurde die Software zum Testen der Projektgruppe freigegeben. Dazu<br />
wurde wie schon im ersten Test ein virtueller Server aus der Hochschule Zittau/Görlitz<br />
benutzt. Weiterhin wurde eine Testwebseite eingerichtet, welche die
- 77 -<br />
Teile Risikomanagement und Meldebogen ausfüllen, trennt. Dadurch konnten<br />
die Projektmitarbeiter einmal das System aus Sicht des Mitarbeiters und aus<br />
der Sicht des Risikomanagers testen. Für das Benutzen des Risikomanagements<br />
wurde für jedes Projektmitglied ein extra Konto mit vollen Rechten in der Software<br />
angelegt. Dadurch war jedes Mitglied in der Lage, alle Funktionen und Ansichten<br />
der Software zu testen. Der Test verlief ohne große technische Probleme.<br />
Es wurde lediglich anhand der Tomcat Logfiles ein java.lang.OutOfMemoryError<br />
festgestellt, der auf zu wenig Arbeitsspeicher des Servers zurückgeführt werden<br />
konnte. Nach Anpassung der Speicherkonfiguration des virtuellen Servers<br />
trat der Fehler nicht mehr auf. Von seitens der Tester gab es keine technischen<br />
Beanstandungen, lediglich inhaltliche Fragen zum Meldebogen wurden gestellt.<br />
Diese Fragen wurden in einer weiteren Sitzung der Projektgruppe CIRS diskutiert.<br />
Das Resultat wurde in den Meldebogen der Firma Protec integriert.
- 78 -<br />
7 Ergebnisse und Ausblick<br />
In diesem Kapitel sollen die erreichten Ergebnisse präsentiert werden. Dazu<br />
werden ausgewählte Ergebnisse des praktischen Teils der Diplomarbeit in Bezug<br />
auf die Anforderungen kurz vorgestellt. Anschließend soll ein Ausblick über<br />
weitere Ideen zur Weiterentwicklung von <strong>Risikous</strong> gegeben werden.<br />
7.1 Vorstellung ausgewählter Resultate<br />
Ziel dieser Arbeit war es, ein computergestütztes CIRS zu entwickeln, welches<br />
den Risikomanagementprozess unterstützt und die Patientensicherheit im Klinikum<br />
Görlitz steigert. Dazu wurde ausgehend von den Anforderungen ein webbasiertes<br />
CIRS implementiert, was zum einen dem Mitarbeiter einen Meldebogen<br />
für Beinahefehler zur Verfügung stellt und zum anderen dem Risikomanagement<br />
ein Mittel für die Bewertung und Auswertung dieser bereitstellt.<br />
Um Maßnahmen zum Vermeiden von Beinahefehler ergreifen zu können, müssen<br />
diese erkannt und erfasst werden. Zum Erfassen <strong>eines</strong> Beinahefehlers ist ein<br />
Bogen notwendig, der für <strong>Risikous</strong> mittels einer XML-Datei repräsentiert wird.<br />
Dazu wurde ein XML-Schema entwickelt, welches beliebige Bögen als XML abbilden<br />
kann. Dadurch können unterschiedliche Bögen erstellt werden und von<br />
Riskous aufgenommen werden. Zum Erstellen von CIRS-Umfragen wurden in<br />
die Software umfangreiche Funktionen implementiert. Wie beispielsweise die
- 79 -<br />
zeitliche Begrenzung von Umfragen, die Feedbackfunktion, Zugangsbeschränkung<br />
und andere. Zum Ausfüllen des Meldebogens stellt das System nach dem<br />
Einrichten automatisch den Bogen als Webseite dem Mitarbeiter dar. Die Webseite<br />
besitzt eine ergonomische Benutzungsoberfläche, welche intuitiv zu bedienen<br />
ist. Dabei werden die Fragen und Antworten in Kategorien eingeteilt, damit<br />
der Mitarbeiter stehts den Überblick über diese behält. Des Weiteren wurden<br />
die Fragen durch Rahmen von einander getrennt, damit diese übersichtlich wirken.<br />
Ein Statusbar signalisiert dem Mitarbeiter stets den Verlauf der Meldung.<br />
Mit Hilfe der Navigationsbuttons weiter und zurück kann sich der Mitarbeiter<br />
problemlos im Meldebogen bewegen. Abbildung 7.1 zeigt einen Ausschnitt aus<br />
einem Online-Meldebogen.<br />
Abbildung 7.1: Benutzungsoberfläche aus der Sicht des meldenden Mitarbeiters<br />
Eine der Hauptfunktion des Riskomanagers ist das Lesen und Bewerten von eingegangenen<br />
Meldungen. Für diese Aufgabe wurde in <strong>Risikous</strong> der MessageReader<br />
implementiert, der nicht nur Meldungen anzeigen kann, sondern diese auch<br />
in einem Baum strukturiert darstellt. Wird im Baum auf eine Meldung geklickt,<br />
wird diese angezeigt. Meldungen die schon bewertet wurden, werden im MessageReader<br />
entsprechend ihrer Einteilung in der Risikomatrix rot, gelb oder grün
- 80 -<br />
markiert. Die Abbildung 7.2 zeigt den MessageReader. Weiterhin wurde eine<br />
XML-Schnittstelle eingebaut, welche das Weiterverarbeiten des Meldebogens,<br />
beispielsweise in anderen Anwendungen erlaubt. Zum Bewerten von Risiken<br />
Abbildung 7.2: Die Abbildung zeigt den MessageReader<br />
wurde in die Software eine Risikomatrix implementiert, die nach dem Ausfüllen<br />
der entsprechenden Meldung mit angehangen wird. Zum Dokumentieren<br />
von Maßnahmen wurde in die Bewertungsansicht ein Textfeld aufgenommen,<br />
wo eingeleitete Maßnahmen oder auch Notizen hinterlegt werden können. Abbildung<br />
7.3 stellt die Bewertungsansicht mit Risikomatrix dar.<br />
Als letztes Resultat dieser Arbeit soll noch die Auswertung kurz vorgestellt werden.<br />
Die Auswertung von <strong>Risikous</strong> bietet einen Überblick über alle bewerteten<br />
Meldungen. Dazu wurde eine Webseite erstellt, die alle Fragen und die dazugehörigen<br />
Antworten dieser Meldungen auflistet. Hinter jeder Antwort ist jeweils<br />
eine Zahl angezeigt, die Auskunft darüber gibt, wie oft diese Antwort bei<br />
den bewerteten Meldungen ausgewählt wurde. Weiterhin wurde eine grafische
- 81 -<br />
Abbildung 7.3: Dialog zum Bewerten von Meldungen<br />
Auswertung implementiert, die Mittels PDF ausgegeben werden kann. Die Abbildung<br />
7.4 zeigt einen Teil der Auswertung, welche als PDF-Datei ausgegeben<br />
wurde. Um die Auswertung später eventuell anderweitig weiterzuverarbeiten,<br />
wurde eine XML-Schnittstelle eingebaut.<br />
Abbildung 7.4: Teil einer Auswertung als PDF
- 82 -<br />
7.2 Ausblick<br />
Trotz der kompletten Implementierung der CIRS-Software ergeben sich für die<br />
Zukunft noch weitere <strong>Entwicklung</strong>sstufen. So ist das Erstellen und Bearbeiten<br />
von Bögen für Nichtinformatiker nicht ganz trivial. Gewisse Kenntnisse im Umgang<br />
mit XML sollte für das erfolgreiche Erstellen und Bearbeiten vorhanden<br />
sein. Da das in der Praxis nicht immer der Fall ist, wäre hier ein grafischer Editor<br />
(WYSIWYG) zum Erstellen und Bearbeiten von Bögen eine sinnvolle Ergänzung.<br />
Für die Realisierung <strong>eines</strong> solchen Editors liefert die <strong>Risikous</strong>-Software ein<br />
XML-Schema mit, was die Grundlage für den grafischen Editor bildet.<br />
Eine weitere Ergänzung zum bisherigen System wären Werkzeuge für die Risikoüberwachung.<br />
Beispielsweise könnte die Software eine zweite Risikomatrix<br />
zur Verfügung stellen. Diese kann dann nach einem bestimmten Zeitraum, nachdem<br />
Maßnahmen eingeleitet wurden, ausgefüllt werden. Anhand der Unterschiede<br />
zwischen der Riskomatrix, die bei der Bewertung ausgefüllt wurde und<br />
der zweiten Matrix, kann dann überprüft werden, wie sich das Risiko verändert<br />
hat und ob die eingeleiteten Maßnahmen gegriffen haben.<br />
Weiterhin könnte in das System ein Maßnahmenkatalog für kritische Ereignisse<br />
integriert werden, der bei der Bewertung von Risiken von der Software zur<br />
Verfügung gestellt wird. Natürlich müssen die verschiedenen Maßnahmen erst<br />
einmal zusammengetragen werden, aber auch die Software kann bei jeder eingeleiteten<br />
neuen Maßnahme diese im Maßnahmenkatalog speichern. So entsteht<br />
mit der Zeit ein brauchbares Sammelsurium an Maßnahmen, auf das zu jeder<br />
Zeit zurückgegriffen werden kann.<br />
Abschliessend soll noch erwähnt werden, dass das Softwaresystem <strong>Risikous</strong> nur<br />
eine kleine Spitze des Risikomanagements implementiert. Und es ist natürlich<br />
denkbar, dass je nach Anforderung, weitere Prozesse des Risikomanagements<br />
computergestützt abgebildet werden können. <strong>Risikous</strong> kann in dem Fall als Ba-
- 83 -<br />
sis für weitere Implemenetierungen betrachtet und entsprechend weiterentwickelt<br />
werden.
- 84 -<br />
A Funktionsweise der<br />
Webframeworks<br />
A.1 Apache Struts<br />
Struts1 liegt das JSP Model 2 und somit auch dem Entwurfsmuster „Model View<br />
Controller“ zu Grunde, durch welches die Daten (Model) von der Präsentation<br />
(View) abgekoppelt werden und über die Logik (Controller) miteinander verbunden<br />
werden. Der Controller besteht in Struts1 aus einem Servlet namens<br />
„ActionServlet“, Actionklassen und Formklassen. Das „ActionServlet“ nimmt<br />
den Request <strong>eines</strong> Client entgegen und leitet ihn an eine JSP-Seite bzw. Tiles-<br />
Zusammenstellung oder an eine Actionklasse und wenn nötig an die dazugehörige<br />
Formklasse weiter. Welche Actionklasse den jeweiligen Request verarbeiten<br />
soll oder an welche JSP-Seite weitergeleitet werden soll, ist in einer zentralen<br />
Konfigurationsdatei abgespeichert. Dieser Systemaufbau ist in Abbildung A.1<br />
dargestellt.<br />
Wurde bei dem Request ein Formular übertragen, wird die dazugehörige Formklasse<br />
instanziiert. Formklassen sind JavaBeans, denen die Daten des Formulars<br />
über Setter-Methoden übergeben werden. Über die „validate“-Methode können<br />
die Eingaben durch selbst geschriebenen Java-Code validiert werden. Alternativ<br />
kann zu der Formklasse eine XML-Datei angelegt werden, in welcher beschrieben<br />
ist, wie die Eingaben zu validieren sind. Schlägt die Validierung der Nut-
- 85 -<br />
Abbildung A.1: Systemaufbau Struts1<br />
zereingaben fehl, wird dem Client die zuletzt angezeigte Seite mit Hinweisen<br />
auf die fehlerhaften Eingaben erneut zugesandt.<br />
War die Validierung erfolgreich oder nicht nötig, wird die Actionklasse instanziiert<br />
und die „execute“-Methode ausgeführt. Dieser wird, sofern vorhanden,<br />
die Instanz der Formklasse als Parameter übergeben. Nachdem der Request bearbeitet<br />
wurde, gibt die „execute“-Methode ein „ActionForward“ an das „ActionServlet“<br />
zurück. Ein „ActionForward“ ist ein Objekt, welches angibt, welche<br />
Seite nach der Ausführung der Action an den Client geliefert werden soll. Die<br />
Seite liest die benötigten Daten des Models aus und liefert dem Client den Response.<br />
Tiles<br />
Tiles ist eine für Struts1 entwickelte Template Engine. Durch Tiles ist es möglich,<br />
Webseiten aus einzelnen Komponenten aufzubauen und diese auf Wunsch
- 86 -<br />
auszutauschen. Wie die einzelnen Seiten aufgebaut sind, ist in einer zentralen<br />
Konfigurationsdatei beschrieben. Um Tiles-Seiten zu verwenden, muss eine Actionklasse<br />
auf den Namen einer Tiles-Zusammenstellung verweisen. Mit Tiles<br />
erreicht man eine Modularisierung der View, wodurch die Wiederverwendbarkeit<br />
der einzelnen Komponenten gefördert wird.
- 87 -<br />
A.2 Apache Struts2<br />
In Struts2 wird das komplette Verhalten der Webanwendung in einer zentralen<br />
Konfigurationsdatei definiert. Diese Datei besteht aus Konstanten und Packages,<br />
welche voneinander ableiten können. Konstanten beschreiben, wie sich das<br />
System verhält, so kann zum Beispiel die Kodierung fest eingestellt oder die Erweiterung<br />
für Struts2 Actions festgelegt werden. Packages beinhalten Definitionen<br />
für die Actions, Fehlerbehandlung, globale Weiterleitungen, Interceptoren<br />
oder Interceptor-Stacks. Interceptoren werden vor dem Ausführen einer Action<br />
aufgerufen und bereiten für diese Action zum Beispiel Daten auf, validieren<br />
Nutzereingaben oder stellen „Resource Bundles“ für die Internationalisierung<br />
bereit. Ein Interceptor-Stack ist eine geordnete Liste von Interceptoren. Vor jeder<br />
Action können beliebig viele Interceptoren ausgeführt werden. Bei der Fehlerbehandlung<br />
kann jeder Exception einer Action zugeordnet werden, welche aufgerufen<br />
werden soll, wenn die Exception auftritt.<br />
Eine Action besitzt immer einen Namen über den sie angesprochen werden<br />
kann, sowie mindestens ein „Result“. Optional kann eine Java-Klasse angegeben<br />
werden, welche den Request behandelt. In diesem Fall können verschiedene<br />
Interceptoren bzw. Interceptor-Stacks angegeben werden, andernfalls wird<br />
der Standartstack verwendet. Bei dem Namen ist Wildcard-Mapping möglich,<br />
wodurch eine Action mehrere Requests bedienen kann. Ein „Result“ hat immer<br />
einen Typ, welcher das weitere Vorgehen vorgibt. Hier ist zum Beispiel eine<br />
Weiterleitung auf eine andere Action, auf eine JSP-Seite bzw. andere View-<br />
Technologie möglich oder einen Stream für Downloads.<br />
Bei einem Request wird durch das Struts2 Servlet die entsprechende Action aufgerufen.<br />
Besitzt die Action eine dazugehörige Klasse, wird diese instanziiert und<br />
alle angegebenen Interceptoren der Action aufgerufen. Im Anschluß wird die<br />
gewünschte Methode der Action aufgerufen und der Request verarbeitet. Die<br />
Actionklasse liefert den Namen des „Result“ zurück, welches nun aufgerufen<br />
werden soll. Ist dieser „Result“ eine View-Technologie, wird der Response an
- 88 -<br />
den Client geliefert. Der Systemaufbau des Struts2 Frameworks ist in Abbildung<br />
A.2 abgebildet.<br />
Abbildung A.2: Systemaufbau Struts2 1)<br />
Tag Bibliotheken<br />
Struts2 bringt eine umfangreiche Tag-Bibliothek mit, in welcher fast alle HTML-<br />
Elemente zur einfacheren Nutzung definiert sind. Diese Tags besitzen ein Theme,<br />
welches angibt wie sie verarbeitet werden sollen. Struts2 liefert einige Themes<br />
für zum Beispiel HTML oder XHTML mit, es ist aber auch möglich eigene<br />
1) http://struts.apache.org/2.x/docs/big-picture.html
- 89 -<br />
Themes zu definieren. Ein spezielles Theme bindet die Javascript-Funktionalitäten<br />
des Javascript-Toolkits Dojo ein. So können zum Beispiel Eingabedaten clientseitig<br />
validiert werden.
- 90 -<br />
A.3 Spring-MVC<br />
Das Spring-MVC setzt das MVC Paradigma folgendermaßen um:<br />
• Model:<br />
Das Model wird durch JavaBeans realisiert, welche in XML-Konfigurationsdateien<br />
verwaltet werden.<br />
• View:<br />
In der View sind vielfältige Technologien möglich. Neben JSP-Seiten können<br />
unter anderem die View-Technologien XSLT oder Velocity eingesetzt<br />
werden.<br />
• Controller:<br />
Ein „DispatcherServlet“ genanntes Servlet verteilt die Requests auf Controller,<br />
welche diese bearbeiten.<br />
Abbildung A.3: Bearbeitung <strong>eines</strong> Request
- 91 -<br />
Das „DispatcherServlet“ nimmt den Request entgegen und ruft den entsprechenden<br />
Controller auf. Welcher Controller welchen Request bedient ist in einer<br />
XML-Konfigurationsdatei definiert. Nachdem der Controller den Request bearbeitet<br />
hat, liefert er ein ModelAndView-Objekt zurück. Im Anschluss ruft das<br />
Servlet einen ViewResolver auf, welcher zurück gibt, welche View an den Client<br />
geliefert wird. Welche View jeweils zurückgeliefert wird, ist ebenfalls in der<br />
XML-Datei beschrieben. Die View liest die auszugebenden Daten aus dem Model<br />
und liefert dem Client den Response aus. Die Bearbeitung <strong>eines</strong> Request ist<br />
in Abbildung A.3 dargestellt.
- 92 -<br />
A.4 Apache Cocoon<br />
Technisch basiert Cocoon auf der Servlet-Technologie. Ein „CocoonServlet“ genanntes<br />
Servlet nimmt einen Requests entgegen, erzeugt ein SAX-Stream, welcher<br />
im Anschluß mit XSLT transformiert und das Ergebnis an den Client geliefert<br />
wird. Diese Architektur wird Pipeline-Architektur genannt und ist in Abbildung<br />
A.4 aufgezeigt. Zum Parsen von XML-Dokumenten und Erzeugen des<br />
SAX-Streams bedient sich Cocoon des Apache Projekts „Xerces“. Die Transformation<br />
mit Hilfe des Apache Projekts „Xalan“ durchgeführt.<br />
Abbildung A.4: Pipeline-Architektur<br />
In Cocoon wird die Software ebenfalls in die drei Komponenten Model, View<br />
und Controll nach dem MVC-Paradigma unterteilt. Der Controller besteht aus<br />
dem „CocoonServlet“ und der „SiteMap“. Die SiteMap ist eine XML-Datei in<br />
der die Cocoon Komponenten definiert sind. Welche Komponenten, bei welchem<br />
Request in einer Pipeline verarbeitet werden, ist ebenfalls in dieser Datei<br />
beschrieben. Komponenten einer Pipeline sind:<br />
• Matcher: Ein Matcher prüft mit Hilfe <strong>eines</strong> Pattern ob ein bestimmter Request<br />
vorliegt. Ist dies der Fall, so werden die Komponenten aufgerufen,<br />
die für diesen Request verantwortlich sind.<br />
• Generatoren: Jede Pipeline beginnt mit einem Generator, welcher einen<br />
SAX-Stream erzeugt.<br />
• Transformatoren: Der von einem Generator erzeugt SAX-Stream wird durch<br />
Transformatoren umgewandelt. Dabei kümmert sich ein Transformator
- 93 -<br />
meist nur um einzelne Elemente des Streams, weshalb es in einer Pipeline<br />
beliebig viele Transformatoren geben kann.<br />
• Serializer: Ein Serializer wandelt den SAX-Stream in ein Ausgabeformat<br />
um, welches an den Client gesendet wird.<br />
• View: Views stellen Ausstiegspunkte in einer Pipeline dar und liefern immer<br />
den aktuellen Zustand des SAX-Streams.<br />
• Selektor: Als eine Art Switch-Anweisung können Selektoren verstanden<br />
werden, sie werten bestimmte Informationen des Requests aus und verweisen<br />
auf unterschiedliche Zweige innerhalb der Pipeline.<br />
• Reader: Bilder- und Videodateien müssen nicht geparst und verarbeitet<br />
werden. Für die Auslieferung dieser Dateien an den Client sind Reader<br />
zuständig.<br />
• Actions: Actions erzeugen keine Ausgabe und nehmen nicht an der XML-<br />
Verarbeitung teil, können aber Parameter und den Verlauf der Pipeline beeinflussen.
- 94 -<br />
B Zusätzliche Quellcodebeispiele<br />
B.1 XML-Meldebogen<br />
Das folgende Listing und die folgende Abbildung beziehen sich auf den Abschnitt<br />
XML-Schema im Kapitel Implementierung. Der XML-Code B.1 und die<br />
Abbildung B.1 sind das Regelwerk für die Dokumentenstruktur des Meldebogens.<br />
1 <br />
2 <br />
3 <br />
4 <br />
5 <br />
6 <br />
7 <br />
8 <br />
9 <br />
10 <br />
11 <br />
12 <br />
13 <br />
14 <br />
15 <br />
16 <br />
17
- 95 -<br />
18 <br />
19 <br />
20 <br />
21 <br />
22 <br />
23 <br />
24 <br />
25 <br />
26 <br />
27 <br />
28 <br />
29 <br />
30 <br />
31 <br />
32 <br />
33 <br />
34 <br />
35 <br />
36 <br />
37 <br />
38 <br />
39 <br />
40 <br />
41 <br />
42 <br />
43 <br />
44 <br />
45 <br />
46 <br />
47 <br />
48
- 96 -<br />
49 <br />
50 <br />
51 <br />
52 <br />
53 <br />
54 <br />
55 <br />
56 <br />
57 <br />
58 <br />
59 <br />
60 <br />
61 <br />
62 <br />
63 <br />
64 <br />
65 <br />
66 <br />
67 <br />
68 <br />
69 <br />
70 <br />
71 <br />
72 <br />
73 <br />
Quellcode B.1: XML-Schema für den Meldebogen
- 97 -<br />
Abbildung B.1: Grafische Darstellung des XML-Schemas für den Meldebogen<br />
B.2 Benutzungsoberfläche - Ergonomie<br />
Das Listing B.2 und das Listing B.3 bezieht sich auf den Abschnitt Benutzungsoberfläche<br />
- Ergonomie. Die layout.jsp enthält das globale Layout der Anwendung.<br />
Listing B.3 zeigt die Teils-Konfiguration von <strong>Risikous</strong>.<br />
1 <br />
2 <br />
3 <br />
4 <br />
5
- 98 -<br />
6 <br />
7 <br />
8 <br />
9 <br />
10 <br />
11 <br />
12 <br />
13 <br />
14 <br />
15 <br />
16 <br />
17 <br />
18 <br />
19 <br />
20 <br />
21 <br />
22 <br />
23 <br />
24 <br />
25 <br />
26 <br />
27 <br />
28 <br />
29 <br />
30 <br />
31 <br />
32 document.onkeypress = disableKey;<br />
33 showClock();<br />
34 <br />
35 <br />
36 <br />
Quellcode B.2: Layout JSP
- 99 -<br />
1 <br />
2 <br />
5<br />
6 <br />
7<br />
8 <br />
9 <br />
10 <br />
11 <br />
12<br />
13 <br />
14 <br />
15 <br />
16 <br />
17 <br />
18 <br />
19 <br />
20 <br />
21 <br />
22<br />
23 <br />
24 <br />
25 <br />
26 <br />
27
- 100 -<br />
28 <br />
29 <br />
30 <br />
31 <br />
32 <br />
33 <br />
34 <br />
35 <br />
36 <br />
37 <br />
38 <br />
39 <br />
40 <br />
41 <br />
42 <br />
43<br />
44 <br />
45 <br />
46 <br />
47 <br />
48 <br />
49 <br />
50<br />
51 <br />
52 <br />
53 <br />
54 <br />
55
- 101 -<br />
56 <br />
57 <br />
58 <br />
59 <br />
60 <br />
61 <br />
62 <br />
63 <br />
64 <br />
65 <br />
66<br />
67 <br />
68 <br />
69 <br />
70 <br />
71 <br />
72 <br />
73<br />
74 <br />
75 <br />
76
- 102 -<br />
77<br />
78 <br />
79 <br />
80 <br />
81 <br />
82 <br />
83 <br />
84 <br />
85 <br />
86<br />
87 <br />
Quellcode B.3: Tiles Konfigurationsfile<br />
B.3 PDF erstellen<br />
Die kommenden Code-Ausschnitte beziehen sich auf den Abschnitt PDF erzeugen<br />
und zeigen die Methoden createQuestionnaire() und createPdf() aus der<br />
Klasse XMLCreator.<br />
1 public static Document createQuestionnaire( Questionnaire<br />
questionnaire ) throws ParserConfigurationException<br />
2 {<br />
3 DocumentBuilderFactory docBFac = DocumentBuilderFactory.<br />
newInstance();<br />
4 DocumentBuilder docBuild = docBFac.newDocumentBuilder();<br />
5 Document doc = docBuild.newDocument();<br />
6
- 103 -<br />
7 Element questionnaireElement = doc.createElement( "<br />
questionnaire" );<br />
8 questionnaireElement.setAttribute( "name" , questionnaire.<br />
getName() );<br />
9<br />
10 // Blöcke addieren<br />
11 for( int i = 0 ; i < questionnaire.getContent().size() ; i++ )<br />
12 {<br />
13 Block block = ( Block ) questionnaire.getContent().get( i );<br />
14 Element blockElement = doc.createElement( "block" );<br />
15 blockElement.setAttribute( "text" , block.getText() );<br />
16 questionnaireElement.appendChild( blockElement );<br />
17<br />
18 // Fragen addieren<br />
19 for( int j = 0 ; j < block.getQuestions().size() ; j++ )<br />
20 {<br />
21 Question question = ( Question ) block.getQuestions().get(<br />
j );<br />
22 Element questionElement = doc.createElement( "question" );<br />
23 questionElement.setAttribute( "text" , question.getText()<br />
);<br />
24 blockElement.appendChild( questionElement );<br />
25<br />
26 // Radio addieren<br />
27 for( int k = 0 ; k < question.getContent().size() ; k++ )<br />
28 {<br />
29 QuestionRadio questionRadio = ( QuestionRadio ) question<br />
.getContent().get( k );<br />
30 Element questionRadioElement = doc.createElement( "radio<br />
" );<br />
31 // optional<br />
32 questionRadioElement.setAttribute( "optional" , String.<br />
valueOf( questionRadio.getOptional() ) );<br />
33 // text<br />
34 if( questionRadio.getText() != null )<br />
35 questionElement.setAttribute( "text" , question.<br />
getText() );
- 104 -<br />
36 questionElement.appendChild( questionRadioElement );<br />
37<br />
38 for( int l = 0 ; l < questionRadio.getContent().size() ;<br />
l++ )<br />
39 {<br />
40 String value = ( String ) questionRadio.getContent().<br />
get( l );<br />
41 Element questionradioElement = doc.createElement( "<br />
radio.value" );<br />
42 questionradioElement.setTextContent( value );<br />
43 questionRadioElement.appendChild( questionradioElement<br />
);<br />
44 }<br />
45<br />
46 if( questionRadio.hasFreetext() )<br />
47 {<br />
48 Element freetextElement = doc.createElement( "radio.<br />
freetext" );<br />
49 freetextElement.setTextContent( questionRadio.<br />
getFreetext() );<br />
50 questionRadioElement.appendChild( freetextElement );<br />
51 }<br />
52 }<br />
53<br />
54 if( question.hasFreetext() )<br />
55 {<br />
56 Element freetextElement = doc.createElement( "freetext"<br />
);<br />
57 freetextElement.setTextContent( question.<br />
getFreetextDefault() );<br />
58 freetextElement.setAttribute( "text" , question.getText<br />
() );<br />
59 freetextElement.setAttribute( "optional" , String.<br />
valueOf( question.getFreetextOptional() ) );<br />
60 freetextElement.setAttribute( "row" , String.valueOf(<br />
question.getFreetextRows() ) );<br />
61 questionElement.appendChild( freetextElement );
- 105 -<br />
62 }<br />
63 }<br />
64 }<br />
65 doc.appendChild(questionnaireElement);<br />
66<br />
67 return doc;<br />
68 }<br />
69 }<br />
Quellcode B.4: Methode createQuestionnaire() aus der Klasse XMLCreator. Diese<br />
Methode gibt als Rückgabewert einen Meldebogen in Form von XML zurück.<br />
1<br />
2 public static ByteArrayOutputStream createPdf( ByteArrayInputStream<br />
xmlFo ) throws TransformerException, FOPException<br />
3 {<br />
4 FopFactory fopFactory = FopFactory.newInstance();<br />
5 FOUserAgent foUserAgent = fopFactory.newFOUserAgent();<br />
6<br />
7 ByteArrayOutputStream out = new ByteArrayOutputStream();<br />
8<br />
9 // Construct fop with desired output format<br />
10 Fop fop = fopFactory.newFop( MimeConstants.MIME_PDF ,<br />
foUserAgent , out );<br />
11<br />
12 // Setup JAXP using identity transformer<br />
13 TransformerFactory factory = TransformerFactory.newInstance();<br />
14 Transformer fotransformer = factory.newTransformer(); //<br />
identity transformer<br />
15<br />
16 // Setup input stream<br />
17 Source src = new StreamSource( xmlFo );<br />
18<br />
19 // Resulting SAX events (the generated FO) must be piped<br />
through to FOP<br />
20 Result res = new SAXResult( fop.getDefaultHandler() );
- 106 -<br />
21<br />
22 // Start XSLT transformation and FOP processing<br />
23 fotransformer.transform( src, res );<br />
24<br />
25 return out;<br />
26 }<br />
Quellcode B.5: Die Methode createPdf() erzeugt aus einem XSL-FO-Stream eine PDF-<br />
Datei.
- 107 -<br />
C Dokumentationen<br />
C.1 <strong>Entwicklung</strong>sdokumentation<br />
Bitte beachten Sie, dass es sich bei der <strong>Entwicklung</strong>sdokumentation um ein separates<br />
Dokument handelt.
- 108 -<br />
C.2 Benutzungsdokumentation<br />
Bitte beachten Sie, dass es sich bei der Benutzungsdokumentation um ein separates<br />
Dokument handelt.
- 109 -<br />
C.3 Installationsdokumentation<br />
Bitte beachten Sie, dass es sich bei der Installationsdokumentation um ein separates<br />
Dokument handelt.
- 110 -<br />
D Datenträgerbeschreibung<br />
Auf der beiliegenden CD befinden sich der Quellcode der <strong>Risikous</strong> Webanwendung,<br />
die Benutzungsdokumentation, die <strong>Entwicklung</strong>sdokumentation, die Installationsanleitung<br />
sowie die Diplomarbeit in digitaler Form. Weiterhin befinden<br />
sich für die Inbetriebnahme der Webanwendung alle benötigten Server auf<br />
der CD. Die Server sind alle ab dem Betriebssystem Windows2000 lauffähig. Für<br />
Linuxanwender müssen die entsprechenden Server noch gedownloaded werden,<br />
Hinweise dazu befinden sich in der Installationsanleitung.<br />
Die folgende Auflistung gibt Aufschluss über die Struktur der CD.<br />
documents/<br />
Diplomarbeit.pdf Diplomarbeit als PDF-Dokument.<br />
<strong>Entwicklung</strong>sdokumentation.pdf <strong>Entwicklung</strong>sdokumentation als PDF-<br />
Dokument<br />
Benutzungsdokumentation.pdf Benutzungsdokumentation als PDF-<br />
Dokument<br />
Installationsanleitung.pdf Installationsanleitung als PDF-Dokument<br />
software/<br />
Server/<br />
tomcat 5.5.25.exe Tomcat Servlet-Container
- 111 -<br />
mySql 5.1.22.zip MySql Datenbankserver<br />
tools/<br />
mysql-gui-tools.msi MySql Datenbankwerkzeuge<br />
risikous<br />
<strong>Risikous</strong>.war <strong>Risikous</strong>-Webanwendung<br />
sourcefiles/<br />
<strong>Risikous</strong>/ Quellcode-Dateien der <strong>Risikous</strong>-Webanwendung
- 112 -<br />
Literaturverzeichnis<br />
[AZfQidM05] Ärztliches Zentrum für Qualität in der Medizin. Glossar Patientensicherheit,<br />
Definitionen und Bergiffsbestimmungen.<br />
http://www.forum-patientensicherheit.de/glossar_faqs/<br />
pdf/glosspatsich.pdf, 2005. [Online: Stand 01. Juli 2007].<br />
[DfE07]<br />
[KW05]<br />
[LO]<br />
[Ris]<br />
[Tho01]<br />
[uHR]<br />
Wikipedia Die freie Enzyklopädie. Mock-up.<br />
http://de.wikipedia.org/wiki/Diskussion:Mock-up, 2007. [Online:<br />
Stand 03 August 2007].<br />
Heike A. Kahla-Witzsch. Praxis des Klinischen Risikomanagements.<br />
ecomed, 2005.<br />
Meyers Lexikon Online. Begriff Risiko.<br />
http://lexikon.meyers.de/meyers/Risiko. [Online: Stand 23. Juli<br />
2007].<br />
Risknet.de. Definition Risiko.<br />
http://www.risknet.de/Glossar.93.0.html?&tx_simpleglossar_<br />
pi1[headerList]=R&tx_simpleglossar_pi1[showUid]=159. [Online:<br />
Stand 19. Juli 2007].<br />
Dr. med. Christian Thomeczek. Fehlerquelle Mensch. BERLINER<br />
ÄRZTE, 2001.<br />
Brigitte Hallenberger und Hartmut Rudolf. Tutorial: Farben im<br />
Webdesign.
- 113 -<br />
http://www.metacolor.de/farben/lieblingsfarben.htm. [Online:<br />
Stand 07 August 2007].<br />
[Vli94]<br />
[WK03]<br />
Erich Gamma; Richard Helm; Ralph Johnson; John Vlissides. Design<br />
Patterns: Elements of reusable object oriented software. Addison-<br />
Wesley Publishing Company, 1994.<br />
Wittenbrink, Heinz and Köhler, Werner. XML – Wissen, das sich<br />
auszahlt. Teia Lehrbuch Verlag, 2003.
- 114 -<br />
Arbeitsaufteilung zwischen den Autoren<br />
Die Webanwendung, die Diplomarbeit sowie die einzelnen Dokumentationen<br />
wurden gemeinsam von beiden Autoren entwickelt. Dennoch war jeder einzelne<br />
für bestimmte Aufgaben verantwortlich, oder hat sie zum größten Teil selbstständig<br />
bewältigt. Selbstverständlich gab es dabei auch viele Überschneidungen,<br />
da gerade dem Zusammenspiel und der Verbindung verschiedener Teilergebnisse<br />
große Aufmerksamkeit geschenkt werden musste.<br />
Lars Rönisch<br />
Diplomarbeit<br />
Kapitel 1<br />
Abschnitt: komplett, Seite 9 - 12<br />
Kapitel 2<br />
Abschnitt: komplett, Seite 13 - 24<br />
Kapitel 3<br />
Abschnitt: 3.0, Seite 25<br />
Abschnitt: 3.1, Seite 25 - 27<br />
Abschnitt: 3.2, Seite 28 - 29<br />
Abschnitt: 3.3.5, Seite 33 - 36<br />
Abschnitt: 3.3.6, Seite 36 - 39<br />
Kapitel 5<br />
Abschnitt: 5.0, Seite 59<br />
Abschnitt: 5.1, Seite 59 - 60<br />
Abschnitt: 5.3, Seite 62 - 63<br />
Abschnitt: 5.3.1, Seite 63 - 64<br />
Abschnitt: 5.3.2, Seite 65
- 115 -<br />
Abschnitt: 5.6, Seite 69 - 71<br />
Kapitel 7<br />
Abschnitt: komplett, Seite 74 - 79<br />
<strong>Entwicklung</strong>sdokumentation<br />
Kapitel 1<br />
Abschnitt: komplett, Seite 3<br />
Kapitel 2<br />
Abschnitt: komplett, Seite 4 - 5<br />
Kapitel 3<br />
Abschnitt: komplett, Seite 6 - 7<br />
Kapitel 4<br />
Abschnitt: 4.5, Seite 22<br />
Abschnitt: 4.6, Seite 22 - 23<br />
Abschnitt: 4.7, Seite 24 - 25<br />
Benutzungsdokumentation<br />
komplett, Seite 4 - 33<br />
Implementierung der Webanwendung<br />
Erstellung des Layouts und der Grafiken<br />
Implementierung der JSP-Files<br />
Implementierung der CSS-Files<br />
Implementierung des XML-Moduls<br />
Meldebogenrepräsentation (xsd)
- 116 -<br />
Implementierung der Helferklassen
- 117 -<br />
Stephan Schnabel<br />
Diplomarbeit<br />
Kapitel 3<br />
Abschnitt: 3.3, Seite 29<br />
Abschnitt: 3.3.1, Seite 29 - 30<br />
Abschnitt: 3.3.2, Seite 31<br />
Abschnitt: 3.3.3, Seite 31 - 32<br />
Abschnitt: 3.3.4, Seite 32 - 33<br />
Abschnitt: 3.4, Seite 39 - 40<br />
Abschnitt: 3.4.1, Seite 40 - 42<br />
Abschnitt: 3.4.2, Seite 42 - 43<br />
Kapitel 4<br />
Abschnitt: komplett, Seite 44 - 58<br />
Kapitel 5<br />
Abschnitt: 5.2, Seite 60 - 61<br />
Abschnitt: 5.4, Seite 65 - 68<br />
Abschnitt: 5.5, Seite 68 - 69<br />
Kapitel 6<br />
Abschnitt: komplett, Seite 72 - 73<br />
<strong>Entwicklung</strong>sdokumentation<br />
Kapitel 4<br />
Abschnitt: 4.0, Seite 8<br />
Abschnitt: 4.1, Seite 8 - 9<br />
Abschnitt: 4.1.1, Seite 9 - 11
- 118 -<br />
Abschnitt: 4.1.2, Seite 11 - 12<br />
Abschnitt: 4.2, Seite 12 - 13<br />
Abschnitt: 4.3 komplett, Seite 13 - 16<br />
Abschnitt: 4.4 komplett, Seite 16 - 21<br />
Installationsanleitung<br />
komplett, Seite 3 - 10<br />
Implementierung der Webanwendung<br />
Konfiguration von Struts2 sowie der verwendeten Plugins<br />
Mapping mit Hibernate<br />
DataAccessObjects<br />
DataTransferObjekts<br />
Implementierung der Geschäftslogik der einzelnen Module
Eidesstattliche Erklärung<br />
Hiermit erkläre ich, dass ich diese Arbeit selbstständig verfasst und keine anderen<br />
als die angegebenen Quellen und Hilfsmittel benutzt habe.<br />
Die Arbeit wurde bisher keiner anderen Prüfungsbehörde vorgelegt und auch<br />
noch nicht veröffentlicht.<br />
Görlitz, 14.10.2007<br />
Lars Rönisch
Eidesstattliche Erklärung<br />
Hiermit erkläre ich, dass ich diese Arbeit selbstständig verfasst und keine anderen<br />
als die angegebenen Quellen und Hilfsmittel benutzt habe.<br />
Die Arbeit wurde bisher keiner anderen Prüfungsbehörde vorgelegt und auch<br />
noch nicht veröffentlicht.<br />
Görlitz, 14.10.2007<br />
Stephan Schnabel