13.06.2014 Aufrufe

Entwicklung eines computergestützten „Critical Incident ... - Risikous

Entwicklung eines computergestützten „Critical Incident ... - Risikous

Entwicklung eines computergestützten „Critical Incident ... - Risikous

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!