Login| Sign Up| Help| Contact|

Patent Searching and Data


Title:
METHOD AND SYSTEM FOR MANAGING AND EDITING DATA OF A MEDICAL DEVICE
Document Type and Number:
WIPO Patent Application WO/2015/043640
Kind Code:
A1
Abstract:
The invention relates to a method and to a system for managing and editing data of a medical device (2, 2'). According to the invention, separate memory areas (22-25) in a cloud storage (19) of a public cloud (13) are provided for at least two different types of medical data sets (P, W, C, B). The data sets (P, W, C, B) stored in a particular memory area (22-25) are each held available in such a way that said data sets (P, W, C, B) can be directly accessed from the Internet (16) if a subscription (18, 18') associated with the memory area (22-25) exists. In addition, at least one specifically associated application (31-34, 94, 95) for running on a user device (8, 9, 11, 12) is provided for each memory area (22-25), said application being designed to retrieve and/or display the data sets (P, W, C, B) contained in the associated memory area (22-25).

Inventors:
DORN KARLHEINZ (DE)
Application Number:
PCT/EP2013/070097
Publication Date:
April 02, 2015
Filing Date:
September 26, 2013
Export Citation:
Click for automatic bibliography generation   Help
Assignee:
SIEMENS AG (DE)
International Classes:
G16H30/40; G16H10/60
Foreign References:
US20130208966A12013-08-15
US20100036879A12010-02-11
US20100049740A12010-02-25
US20120233668A12012-09-13
US20100332401A12010-12-30
Other References:
BENJAMIN M ET AL: "From shared data to sharing workflow: Merging PACS and teleradiology", EUROPEAN JOURNAL OF RADIOLOGY, ELSEVIER SCIENCE, NL, vol. 73, no. 1, 1 January 2010 (2010-01-01), pages 3 - 9, XP026832170, ISSN: 0720-048X, [retrieved on 20091114]
BAHGA ARSHDEEP ET AL: "A Cloud-based Approach for Interoperable Electronic Health Records (EHRs)", IEEE JOURNAL OF BIOMEDICAL AND HEALTH INFORMATICS, IEEE, PISCATAWAY, NJ, USA, vol. 17, no. 5, 1 September 2013 (2013-09-01), pages 894 - 906, XP011525485, ISSN: 2168-2194, [retrieved on 20130830], DOI: 10.1109/JBHI.2013.2257818
PATEL G: "DICOM Medical Image Management the challenges and solutions: Cloud as a Service (CaaS)", COMPUTING COMMUNICATION&NETWORKING TECHNOLOGIES (ICCCNT), 2012 THIRD INTERNATIONAL CONFERENCE ON, IEEE, 26 July 2012 (2012-07-26), pages 1 - 5, XP032443043, DOI: 10.1109/ICCCNT.2012.6396083
Download PDF:
Claims:
Patentansprüche

1. Verfahren zur Verwaltung und Bearbeitung von Daten einer medizinischen Einrichtung (2, 2'),

- bei welchem für mindestens zwei unterschiedliche Arten von medizinischen Datensätzen (P,W,C,B) jeweils separate Speicherbereiche (22-25) in einem Cloud Storage (19) einer Public Cloud (13) zur Verfügung gestellt werden, wobei die in dem jeweiligen Speicherbereich (22-25) gespeicherten Daten- sätze (P,W,C,B) derart vorgehalten werden, dass ein unmittelbarer Zugriff auf diese Datensätze (P,W,C,B) aus dem Internet (16) bei Vorliegen einer dem Speicherbereich (22-25) zugeordneten Subscription (18, 18 möglich ist,

- bei welchem für jeden Speicherbereich (22-25) mindestens eine spezifisch zugeordnete Applikation (31-34,94,95) zum

Ablauf auf einem Nutzer-Gerät (8,9,11,12) zur Verfügung gestellt wird, die zum Abruf und/oder zur Darstellung der in dem zugeordneten Speicherbereich (22-25) enthaltenen Datensätze (P,W,C,B) eingerichtet ist.

2. Verfahren nach Anspruch 1,

bei welchem mindestens zwei der nachfolgend aufgezählten Speicherbereiche zur Verfügung gestellt werden:

- ein Patienten-Speicherbereich (22), in dem jeder Datensatz (P) persönliche und medizinische Daten über einen bestimmten Patienten enthält,

- ein Arbeitslisten-Speicherbereich (23), in dem jeder Datensatz eine von einem medizinischen Nutzer zu erledigende Aufgabe (W) oder Aufgabefolge enthält,

- ein Bilddaten-Speicherbereich (25), in dem jeder Datensatz

(B) Bilddaten enthält und/oder

- ein Kontext-Speicherbereich (24), in dem jeder Datensatz

(C) Kontextinformation zu einem Bilddatensatz (B) insbesondere einen Verweis (29) auf den Speicherort des Bilddaten- satzes (B) enthält.

3. Verfahren nach Anspruch 1 oder 2 ,

bei welchem mittels mindestens einer der Applikationen (31- 34,94,95) auf einen in dem zugeordneten Speicherbereich (22- 25) enthaltenen Datensatz (P,W,C,B) unmittelbar zugegriffen wird.

4. Verfahren nach einem der Ansprüche 1 bis 3,

bei welchem mittels mindestens einer der Applikationen (31- 34) ein in dem zugeordneten Speicherbereich (22-25) enthalte- ner Datensatz (P,W,C,B) unmittelbar erzeugt, editiert und gelöscht wird.

5. Verfahren nach einem der Ansprüche 1 bis 4,

bei welchem mindestens eine der Applikationen (34) sowohl ei- nem Device-Only-Modus als auch in einem Cloud-Service-Modus betrieben werden kann, wobei

- in dem Device-Only-Modus der Zugriff und die Darstellung der in dem zugeordneten Speicherbereich (25) enthaltenen Datensätze (B) ausschließlich von der Applikation (34) vor- genommen wird,

- in dem Cloud-Service-Modus zum Zugriff und/oder zu Darstellung der in dem zugeordneten Speicherbereich (25) enthaltenen Datensätze (B) Rechenleistung (21) der Public Cloud (13) herangezogen wird.

6. Verfahren nach einem der Ansprüche 1 bis 5,

- bei welchem innerhalb mindestens eines Speicherbereichs

(22-24) ein Tabellenspeicher (26) zur Verfügung gestellt wird, wobei innerhalb des Tabellenspeichers (26) jedem in dem Speicherbereich (22-24) gespeicherten Datensatz (P,W,C) ein Tabelleneintrag (27) zugeordnet ist, der den zugeordneten Datensatz (P,W,C) enthält, und

- bei welchem der Inhalt des Tabellenspeichers (26) von der dem Speicherbereich (22-24) zugeordneten Applikation (31- 33) zur Extraktion von ausgewählten Tabelleneinträgen (27) in einer Ergebnisliste (35) unmittelbar durchsuchbar ist.

7. Verfahren nach Anspruch 6 ,

bei welchem mittels mindestens einer Applikation (31-33) die Ergebnisliste (35) derart aus dem zugeordneten Speicherbereich (22-24) der Public Cloud (13) in einen lokalen Speicher des Nutzer-Geräts (8,9,11,12) externalisiert wird, dass diese Ergebnisliste (35) durch die Applikation (31-33) auch ohne Netzverbindung mit der Public Cloud (13) angezeigt, bearbeitet und/oder an eine andere Instanz derselben Applikation (31-33) oder einer anderen Applikation (31-34,94,95) übermit- telt werden kann.

8. Verfahren nach einem der Ansprüche 1 bis 7,

bei welchem durch eine medizinische Modalität (3-6) ein patientenspezifische Bilddaten enthaltender Bilddatensatz (B) er- zeugt und unmittelbar in dem zugeordneten Speicherbereich (25) des Cloud Storage (19) ablegt wird.

9. System (1) zur Verwaltung und Bearbeitung von Daten einer medizinischen Einrichtung (2,2 ,

- mit mindestens zwei in einem Cloud Storage (19) einer Public Cloud (13) angelegten Speicherbereichen (22-25) zur Speicherung mindestens zweier unterschiedlicher Datenarten von medizinischen Datensätzen (P,W,C,B), wobei jeder Speicherbereich (22-25) einer bestimmten Datenart (P,W,C,B) zu- gewiesen ist, und wobei die in dem jeweiligen Speicherbereich (22-25) gespeicherten Datensätze (P,W,C,B) derart vorgehalten sind, dass ein Zugriff auf diese Datensätze (P,W,C,B) aus dem Internet (16) bei Vorliegen einer dem Speicherbereich (22-25) zugeordneten Subscription (18,18λ) möglich ist, und

- mit mindestens einer Applikationen (31-34,94,95) für jeden Speicherbereich (22-25) zum Ablauf auf einem Nutzer-Gerät (8,9,11,12), die zum Abruf und zur Darstellung der in dem zugeordneten Speicherbereich (22-25) enthaltenen Datensätze (P,W,C,B) eingerichtet ist.

10. System (1) nach Anspruch 9,

bei dem die mindestens zwei Speicherbereiche umfassen: - einen Patienten-Speicherbereich (22), in dem jeder Datensatz (P) persönliche und medizinische Daten über einen bestimmten Patienten enthält,

- einen Arbeitslisten-Speicherbereich (23), in dem jeder Da- tensatz eine von einem medizinischen Nutzer zu erledigende

Aufgabe (W) oder Aufgabefolge enthält,

- einen Bilddaten-Speicherbereich (25), in dem jeder Datensatz (B) Bilddaten enthält, und/oder

- einen Kontext-Speicherbereich (24), in dem jeder Datensatz (C) Kontextinformation zu einem Bilddatensatz (b) , insbesondere einen Verweis (29) auf den Speicherort des Bilddatensatzes (B) enthält.

11. System (1) nach Anspruch 9 oder 10,

bei welchem mindestens eine der Applikationen (31-34,94) dazu eingerichtet ist, auf die in dem zugeordneten Speicherbereich (22-25) enthaltenen Datensätze (P,W,C,B) unmittelbar zuzugreifen . 12. System (1) nach einem der Ansprüche 9 bis 11,

bei welchem mindestens eine der Applikationen (31-34) dazu eingerichtet ist, die in dem zugeordneten Speicherbereich (22-25) enthaltenen Datensätze (P,W,C,B) unmittelbar zu erzeugen, zu editieren und zu löschen.

13. System (1) nach einem der Ansprüche 9 bis 12,

bei welchem mindestens eine der Applikationen (34) sowohl einem Device-Only-Modus als auch in einem Cloud-Service-Modus betreibbar ist, wobei

- in dem Device-Only-Modus der Zugriff und die Darstellung der in dem zugeordneten Speicherbereich (25) enthaltenen Datensätze (B) ausschließlich von der Applikation (34) vorgenommen wird,

- in dem Cloud-Service-Modus zum Zugriff und/oder zu Darstel- lung der in dem zugeordneten Speicherbereich (25) enthaltenen Datensätze (B) Rechenleistung (21) der Public Cloud (13) herangezogen wird.

14. System (1) nach einem der Ansprüche 9 bis 13,

- bei welchem mindestens ein Speicherbereich (22-24) einen Tabellenspeicher (26) umfasst, wobei innerhalb des Tabellenspeichers (26) jedem in dem Speicherbereich (22-24) ge- speicherten Datensatz (P,W,C) ein Tabelleneintrag (27) zugeordnet ist, der den zugeordneten Datensatz (P,W) enthält, und

- bei welchem der Inhalt des Tabellenspeichers (26) von der dem Speicherbereich (22-24) zugeordneten Applikation (31- 33) zur Extraktion von ausgewählten Tabelleneinträgen (27) in einer Ergebnisliste (35) unmittelbar durchsuchbar ist.

15. System (1) nach Anspruch 14,

bei welchem mindestens eine der Applikationen (31-33) dazu eingerichtet ist, die Ergebnisliste (35) derart aus dem zugeordneten Speicherbereich (22-24) des Cloud Storage (19) in einen lokalen Speicher des Nutzer-Geräts (8,9,11,12) zu ex- ternalisieren, dass diese Ergebnisliste (35) durch die Applikation (31-33) auch ohne Netzverbindung mit der Public Cloud (13) angezeigt, bearbeitet und/oder an eine andere Instanz derselben Applikation (31-33) oder einer anderen Applikation (31-34,94,95) übermittelt werden kann.

16. System (1) nach einem der Ansprüche 9 bis 15,

mit einem in einer medizinischen Modalität (3-6) implementierten oder implementierbaren Speichertreiber (100) , der dazu eingerichtet, einen von der Modalität (3-6) erzeugten, patientenspezifische Bilddaten enthaltenden Bilddatensatz (B) unmittelbar in dem zugeordneten Speicherbereich (25) der Pub- lic Cloud (13) abzulegen.

Description:
Beschreibung

Verfahren und System zur Verwaltung und Bearbeitung von Daten einer medizinischen Einrichtung

Die Erfindung bezieht sich auf ein Verfahren zur Verwaltung und Bearbeitung von Daten einer medizinischen Einrichtung. Die Erfindung bezieht sich des Weiteren auf ein System zur Durchführung dieses Verfahrens .

Unter dem Begriff „Verwaltung" wird hier und im Folgenden insbesondere die Archivierung der Daten (das heißt die Einstellung der Daten in einen persistenten Datenspeicher) , die Wiedergabe (Anzeige) und das Löschen der Daten aus dem Daten- Speicher sowie das Sortieren und Auffinden bestimmter Daten aus dem Datenspeicher nach Maßgabe vorgegebener Kriterien (Browsing) verstanden.

Unter dem Begriff „Bearbeitung" wird hier und im Folgenden insbesondere die Änderung (Editierung / Aufbereitung) der Daten verstanden.

Die zu verwaltenden und zu bearbeitenden Daten der medizinischen Einrichtung umfassen insbesondere Patientendaten, Auf- gaben (Works/Tasks) oder Aufgabenlisten (Worklists) für das

Personal der medizinischen Einrichtung und medizinische Bilddaten .

Die Verwaltung solcher medizinischer Daten erfolgt in zuneh- mendem Maße computergestützt durch Server-Systeme, insbesondere sogenannte Informationssysteme. Ein Informationssystem umfasst regelmäßig

- einen oder mehrere Datenspeicher, beispielsweise in Form eines Storage Area Network (SAN) ,

- einen oder mehrere zugehörige Datenserver,

- mindestens eine relationale Datenbank, die in einem Datenbankserver implementiert ist, - sowie in der Regel einen oder mehrere weitere Server, in denen Methoden für den Datenbankzugriff und die Datenbearbeitung implementiert sind. Für die unterschiedlichen Datenarten haben sich im medizinischen Bereich unterschiedliche Informationssysteme etabliert. So werden im Umfeld einer medizinischen Einrichtung wie zum Beispiel einer Klinik regelmäßig ein „Krankenhaus-Informations-System" (Hospital Information System, HIS) für die Ver- waltung und Bearbeitung der Patientendaten und ein „Radiologie-Informations-System" (RIS) für die Terminplanung radiologischer Untersuchungen, die Unterstützung der Befundung medizinischer Bilddaten und die Dokumentation der Befunde eingesetzt. Daneben umfasst die IT-Struktur eines Krankenhauses in der Regel ein sogenanntes „Picture Archiving and Communicati- on System" (PACS) zur Archivierung und Übertragung von medizinischen Bilddaten auf Basis des DICOM-Standards sowie ein „Avanced Visualisation (AV) -System" , das servergestützte Funktionen zur Visualisierung von Volumendaten, insbesondere dy- namisches Volume Rendering, zur Verfügung stellt.

Die vorstehend bezeichneten Server-Systeme sind dabei in der Regel parallel zueinander vorhanden. Dies erfordert einen hohen Beschaffungs- und Wartungsaufwand, der insbesondere für kleine medizinische Einrichtungen oder sonstige Einrichtung mit vergleichsweise geringen Finanzvolumen kaum zu bewältigen ist .

Die vorstehend beschriebene, komplexe IT-Struktur einer mo- dernen medizinischen Einrichtung weist zudem nur vergleichsweise schlechte Skalierungseigenschaften auf. Eine Anpassung einer solchen IT-Struktur an größere Änderungen des zu verarbeitenden und zu archivierenden Datenvolumens und/oder der erforderlichen Rechenleistung ist somit meist nur mit sehr hohem Aufwand möglich.

Als Nutzer- oder Endgeräte (klassischerweise als Clients bezeichnet) einer solchen IT-Struktur werden überwiegende Per- sonal Computer (PCs) verwendet, wobei diese PCs oft als sogenannte „Thin Clients" ausgebildet sind, die einen Großteil der erforderlichen Rechenleistung von einem angeschlossenen Server beziehen.

Als Alternative zu herkömmlichen Client-Server-Architekturen haben sich in den vergangenen Jahren zunehmend sogenannte Cloud-Lösungen etabliert. Als „Cloud" („Rechnerwolke") wird dabei eine Datenverarbeitungseinrichtung verstanden, die von einem von dem Nutzer unabhängigen Cloud-Betreiber („Cloud Vendor") zur Verfügung gestellt und betrieben wird. Der „Cloud Vendor" stellt hierbei einer Vielzahl von Nutzern die Hardware und gegebenenfalls die Software der Cloud im Rahmen eines Nutzungsvertrags (Subscription) als Dienst zur Verfü- gung . Je nach dem Umfang der zur Verfügung gestellten Dienste unterscheidet man zwischen

- einem als „ Infrastructure as a Service" (IaaS) bezeichneten Nutzungsmuster, bei dem dem Nutzer lediglich Com- puterhardware (Rechner, Netzwerke und Speicher) der

Cloud zur Verfügung gestellt wird, während der Nutzer für die in der Cloud betriebene Software in vollem Umfang selbst verantwortlich ist,

- einem als „Platform as a Service" (PaaS) beschriebenen Nutzungsmuster, bei dem dem Nutzer aus der Cloud die

Computerhardware zusammen mit einer darauf aufbauenden Programmierungs- und Laufzeitumgebung angeboten wird, so dass der Nutzer nur für die in dieser Programmierungsund Laufzeitumgebung implementierte Anwendungssoftware (Applikationen) selbst verantwortlich ist, sowie

- einem als „Software as a Service" (SaaS) bezeichneten Nutzungsmuster, bei dem dem Nutzer darüber hinaus auch bestimmte Anwendungssoftware aus der Cloud zur Verfügung gestellt wird.

Je nach dem Nutzerkreis, an den die jeweilige Cloud adressiert ist, unterscheidet man des Weiteren zwischen - einer sogenannten Public Cloud, deren Dienste von jedem in Anspruch genommen werden können, und

- einer sogenannten Privat Cloud, die nur Nutzern einer bestimmten Organisation, insbesondere eines bestimmten Konzerns zugänglich ist.

Für jeden Nutzer einer Public Cloud sind die Zugriffsberechtigungen auf bestimmte Hardware- und Softwarebestandteile der Cloud durch die dem Nutzer zugeordnete Subscription geregelt. Public Clouds sind hierdurch regelmäßig „mandantenfähig"

(multi-tenant) . Dies bezeichnet die Fähigkeit, Daten, Benutzerverwaltung und Rechenoperationen für Nutzer mit verschiedener Subscription strikt getrennt zu halten. Ein Nutzer der Public Cloud kann also in die Daten, Benutzerverwaltung und Rechenoperationen eines anderen Nutzers mit unterschiedlicher Subscription keinen Einblick nehmen und diese Daten auch nicht beeinflussen.

Der Erfindung liegt die Aufgabe zugrunde, ein Verfahren und ein System zur Verwaltung und Bearbeitung von Daten einer medizinischen Einrichtung anzugeben, das besonders flexibel einsetzbar, insbesondere besonders skalierbar ist.

Bezüglich des Verfahrens wird diese Aufgabe erfindungsgemäß gelöst durch die Merkmale des Anspruchs 1. Bezüglich des zugehörigen Systems wird die Aufgabe erfindungsgemäß gelöst durch die Merkmale des Anspruchs 9. Vorteilhafte und teils für sich gesehen erfinderische Ausgestaltungen und Weiterentwicklungen der Erfindung sind in den Unteransprüchen und der nachfolgenden Beschreibung dargelegt.

Erfindungsgemäß werden für mindestens zwei unterschiedliche Arten von Daten der medizinischen Einrichtung jeweils separate Speicherbereiche in einem Cloud Storage (also dem per- sistenten Speicher) einer Public Cloud zur Verfügung gestellt, wobei die in dem jeweiligen Speicherbereich gespeicherten Datensätze derart vorgehalten werden, dass ein unmittelbarer Zugriff auf diese Datensätze aus dem Internet mög- lieh ist, wenn eine dem Speicherbereich zugeordnete Subscrip- tion vorliegt (wenn also das zugreifende Gerät nach Maßgabe der Subscription zum Zugriff berechtigt ist) . Diese Zugriffsmöglichkeit ist dabei insbesondere derart gestaltet, dass sie mit dem Internet-Standard REST kompatibel ist. REST (Representational State Transfer) bezeichnet dabei ein Programmierparadigma für Internet-Anwendungen, das folgenden Prinzipien genügt:

- Jedem angebotenen Dienst ist eine eindeutige Adresse

(Uniform Resource Locator, kurz: URL) zugewiesen.

- Der unter einer Adresse zugängliche Dienst kann unter- schiedliche Erscheinungsformen (Repräsentationen) haben.

- Es wird ein zustandsloses (stateless) Client-Server- Protokoll verwendet, das es ermöglicht, verschiedene Anfragen zwischen Clients und Servern stets unabhängig voneinander zu behandeln.

- Auf alle Ressourcen muss eine vorgegebene Anzahl von

Operationen (nämlich insbesondere die vier Operationen GET, POST, PUT, DELETE) mit definierten Eigenschaften anwendbar sein.

- Sowohl für AnwendungsInformationen als auch für Zu- standsveränderungen wird multimedialer Hypertext (Hyper- media) benutzt.

Die Repräsentation erfolgt dabei vorzugsweise gemäß den Internet-Standards XML (Extensible Markup Language) , JSON (Java Script Object Notation) und/oder ATOM. ATOM ist hierbei als Überbegriff verwendet für das Atom Syndication Format (ASF) , das ein XML-Format für den Austausch von Nachrichten darstellt, sowie das ATOM Publishing Protocol (APP) , das eine Programmierschnittstelle zur Erzeugung und Bearbeitung von Webinhalten darstellt. Bei der medizinischen Einrichtung, der jeweils eine Subscription zugeordnet ist, handelt es sich in dem vorrangig anvisierten Anwendungsfall um eine Klinik. Allerdings ist im Rahmen der Erfindung auch denkbar, dass kleinere Einheiten wie zum Beispiel Arztpraxen, einzelne Abteilungen einer Klinik oder sogar einzelne Patienten zur Verwaltung der jeweils eigenen medizinischen Daten eine eigene Subscription erwerben und somit das Verfahren bzw. System in vollem Umfang nützen können .

Das System ist hierbei durch die Nutzung der Public Cloud in dem vorstehend erläuterten Sinne „mandantenfähig" (multi- tenant) . Daten, Benutzerverwaltung und Rechenoperationen werden für Nutzer mit verschiedener Subscription somit strikt getrennt voneinander gehalten, so dass ein Einblick in oder eine Beeinflussung von Daten fremder Subscriptions ausgeschlossen ist.

Im Rahmen des erfindungsgemäßen Verfahrens und Systems wird des Weiteren für jeden Speicherbereich eine Applikation zum Ablauf auf einem Nutzer- oder Endgerät (nachfolgend als „Device" bezeichnet) zur Verfügung gestellt, die zum Abruf und/oder zur Darstellung der in dem zugeordneten Speicherbereich enthaltenen Datensätze eingerichtet ist.

Jede Applikation ist dabei genau einem der Speicherbereiche spezifisch zugeordnet und implementiert somit selektiv und ausschließlich diejenigen Funktionen für die Verwaltung und Bearbeitung der in dem jeweiligen Speicherbereich enthaltenen Datensätze .

Die verschiedenen Arten von Daten der Einrichtung umfassen insbesondere

- Patientendaten, die persönliche und medizinische Angaben zu einem bestimmten Patienten der Einrichtung umfassen, insbesondere Angaben zum Namen, der Adresse, dem Alter, dem Geschlecht, früheren Diagnosen und Behandlungen,

- Aufgaben (Works/Tasks) und Aufgabenlisten (Worklists) , die von einem oder mehreren medizinischen Nutzern (Ärz- ten, medizinischen Assistenzkräften, Pflegern etc.) der medizinischen Einrichtung durchzuführen sind,

- medizinische Bilddaten, insbesondere zweidimensionale Bilder, zweidimensionale Bildsequenzen (Videos) , Volumendaten (z.B. Computertomogramme) und/oder zeitliche Volumendatensequenzen (4D-Daten) , aber auch Keyimages,

Photos, Dokumente und dergleichen, sowie

- Kontextinformation zu medizinischen Bilddaten, insbesondere Verweise auf den Speicherort von Bilddatensätzen sowie optional Meta-Daten zu Bilddatensätzen wie z.B. die der jeweiligen Bildaufnahme zugrundeliegenden Auf- nahmeparameter .

Als „Keyimage" wird hierbei ein Schnappschuss , d.h. ein (bearbeiteter oder unbearbeiteter) Ausschnitt aus einem medizi- nischen Bild- oder Volumendatensatz bezeichnet, der bei der Befundung dieser Daten zur Darstellung eines medinizischen Befundes abgeleitet wird. Solche Keyimages werden typischerweise als Bestandteil eines medizinischen Berichts (Reports) verwendet .

Jede dieser verschiedenen Datenarten wird nachfolgend auch als „Ressource" bezeichnet. Der dieser Ressource jeweils zugewiesene Speicherbereich des Cloud Storage wird nachfolgend auch als „ (Ressource- ) Hub" bezeichnet. In Zuordnung zu den oben beschriebenen Ressourcen werden im Rahmen des Verfahrens und Systems vorzugsweise mindestens zwei der nachfolgend aufgeführten (Ressource- ) Hubs im Cloud Storage zur Verfügung gestellt :

Ein Patienten-Speicherbereich (Patient-Hub), in dem jeder (Patienten- ) Datensatz Patientendaten eines bestimmten Patienten enthält, - ein Aufgabenlisten-Speicherbereich (Worklist-Hub) , in dem jeder Datensatz eine Aufgabe (Work/Task) oder Aufga- benliste (Worklist) enthält,

- einen Bilddaten-Speicherbereich ( Image-Hub) , in dem je- der (Bild- ) Datensatz medizinische Bild- oder Volumendaten oder eine sonstige Bild-, Ton-, Graphik- oder Textinformation (Photos, Videos, Dokumente) enthält und/oder

- einen Kontext-Speicherbereich (Context-Hub) , in dem jeder (Kontext- ) Datensatz Kontextinformation zu einem Bilddatensatz enthält, insbesondere einen Verweis auf den Speicherort des jeweiligen Bilddatensatzes im Image- Hub sowie optional Meta-Daten zu dem Bilddatensatz.

Jeder der vorstehend beschriebenen Hubs ist zusammen mit der ihm spezifisch zugeordneten Applikation selbstständig (d.h. unabhängig von den anderen Hubs und den diesen jeweils zugeordneten Applikationen) betreibbar. Somit ist keiner der vorstehend beschriebenen Hubs und der zugeordneten Applikationen zur Durchführung des erfindungsgemäßen Verfahrens oder im Rahmen des erfindungsgemäßen Systems zwingend notwendig. Jeder der vorstehend beschriebenen Hubs erweitert aber zusammen mit der zugeordneten Applikation die Funktionalität des Verfahrens bzw. Systems in vorteilhafter Weise. Die Erfindung geht von der Überlegung aus, dass aus Gründen einer verbesserten Skalierbarkeit für die Datenverwaltung und -bearbeitung in einer medizinischen Einrichtung ein Wechsel von einer klassischen Client-Server-Lösung hin zu einer cloud-basierten Lösung sinnvoll ist. Erkanntermaßen werden durch eine bloße Übertragung der klassischerweise gebräuchlichen Server-Systeme in die Cloud die eingangs beschriebenen Probleme aber nicht in befriedigender Weise gelöst. So wird durch die Verlagerung der herkömmlicherweise in einer medizinischen Einrichtung verwendeten Server in die Cloud die Kom- plexität der IT-Struktur nicht vereinfacht, sondern eher erhöht, zumal die Server in einer Cloud regelmäßig in virtuali- sierter Form betrieben werden, und somit zu der unverändert komplexen Serverstruktur noch die Virtualisierungs-Software hinzu käme. Zudem würden erkanntermaßen bei einer solchen Lösung hohe Kosten für die in der Cloud erbrachte Serverleistung (Cloud Virtual Server) anfallen, die die Vorteile einer Cloud-Nutzung weitgehend aufwiegen würden. Ferner müssten die virtualisiert in der Cloud betriebenen Server noch immer durch die Einrichtung selbst administriert werden, so dass der damit verbundene Aufwand bestehen bleiben würde. Auch hinsichtlich Skalierbarkeit und Ausfallsicherheit brächte eine solche Lösung keine wesentliche Verbesserung.

Eine solche Verbesserung wird allerdings durch die erfinderische Idee erzielt, die medizinischen Daten derart in dem Public Cloud Storage zu hinterlegen, dass auf diese Daten - insbesondere in REST-kompatibler Weise - über das Internet zuge- griffen werden kann. Dies ermöglicht es, zumindest einen

Großteil der zur Durchführung des Verfahrens erforderlichen Rechenleistung in den an der Verfahrensdurchführung beteiligten Devices selbst zu erbringen. Somit wird im Zuge des Verfahrens ausschließlich oder zumindest nahezu ausschließlich der - vergleichsweise preisgünstige - Cloud Storage der Public Cloud in Anspruch genommen, während die wesentlich teurere Rechenleistung der Public Cloud (Cloud-Compute-Dienste) nicht oder nur in geringem Maße in Anspruch genommen wird. Die ausschließliche oder zumindest nahezu ausschließliche Zu- Ordnung der Rechenleistung zu den Devices trägt auch zu einer wesentlich verbesserten Skalierbarkeit des Verfahrens und des zugeordneten Systems bei, da die cloud- seitig implementierten Strukturen an einen veränderten Bedarf an Rechenleistung nicht angepasst werden müssen. Insbesondere müssen keine vir- tuellen Server in der Cloud geschaffen und betreut werden. Vielmehr werden die optional in Anspruch genommenen Cloud- Compute-Dienste unmittelbar von dem Cloud-Provider im Sinne eines PaaS-Konzepts betreut und zur Verfügung gestellt. Die Verteilung der verschiedenen Ressourcen auf verschiedene, vollständig voneinander separierte Ressource-Hubs, und die Zurverfügungstellung der jeweils diesen Hubs spezifisch zugeordneten Applikationen ermöglicht dabei einen besonders fle- xiblen Einsatz des Verfahrens und des zugehörigen Systems, zumal verschiedene medizinische Einrichtungen die im Rahmen ihrer jeweiligen Subscription enthaltenen Hubs frei auswählen können, ohne gegenseitige Abhängigkeiten berücksichtigen zu müssen. Hierdurch sind für die medizinische Einrichtung wiederum die Kosten für den Betrieb des Verfahrens und des zugeordneten Systems flexibel regulierbar.

Durch die Nutzung der Public Cloud zur Archivierung und Vor- haltung der Daten profitiert die medizinische Einrichtung dabei von den üblichen Vorteilen eines Public Cloud Storage, nämlich einer nahezu unbegrenzten Skalierbarkeit (das heißt der Möglichkeit, nahezu beliebige Datenmengen ohne qualitative Änderungen der IT-Struktur effizient zu verwalten) , eine weltweite Verfügbarkeit der Daten, eine äußerst hohe Sicherheit gegen Ausfall und Manipulation sowie eine nahezu vollständige Reduzierung des einrichtungsinternen Beschaffungsund Wartungsaufwandes . Zusammenfassend wird durch die Erfindung eine im medizinischen Bereich vom Üblichen vollständig abweichende IT- Struktur angegeben, die es ermöglicht, die Vorteile einer Public Cloud gegenüber einer herkömmlichen Client-Server- Lösung effizient zu nutzen, ohne dafür nennenswerte Nachteile in Kauf nehmen zu müssen.

Als Public Cloud wird vorzugsweise der „Windows Azure"-Dienst der Fa. Microsoft genutzt. Andere Public Clouds können im Rahmen der Erfindung aber auch verwendet werden. Insbesondere können auch mehrere Publics Clouds von gegebenenfalls unterschiedlichen „Cloud Vendors" parallel (gleichzeitig) zur Verwaltung der Daten der Einrichtung herangezogen werden.

Bei den an der Verfahrensdurchführung beteiligten Devices der Einrichtung kann es sich in beliebiger Zusammensetzung um Desktop-PCs, aber auch um mobile Geräte wie Notebooks,

Tablet-Computer und Smartphones handeln. Vorzugsweise sind die Applikationen dazu eingerichtet, auf die in dem jeweils zugeordneten Hub enthaltenen Datensätze unmittelbar zuzugreifen. Zusätzlich oder alternativ sind die Applikationen vorzugsweise dazu eingerichtet, die in dem je- weils zugeordneten Hub enthaltenen Datensätze unmittelbar zu erzeugen, zu editieren und zu löschen. Der Begriff „unmittelbar" wird hier und im Folgenden jeweils in dem Sinne verwendet, dass die Applikation die jeweilige Aktion selbstständig unter ausschließlicher Nutzung des Cloud Storage ausführt, ohne dass hierfür - von der reinen Speicherverwaltung (Cloud Storage) unabhängige - Rechenleistung der Public Cloud

(Cloud-Compute-Dienste) in Anspruch genommen wird.

Abweichend ist im Rahmen der Erfindung aber vorzugsweise min- destens eine der Applikationen in zwei Betriebsmodi betreibbar, nämlich

- in einem „Device-Only-Modus " , in dem die Applikation

ausschließlich auf einem Device abläuft, unmittelbar auf den Cloud Storage zugreift und keine Cloud-Compute-

Dienste der Public Cloud in Anspruch nimmt, sowie

- in einem „Cloud-Service-Modus", in dem die Applikation zum Zugriff und/oder zur Darstellung der in dem Hub enthaltenen Datensätze zusätzlich Cloud-Compute-Dienste der Public Cloud heranzieht.

Dieser - optional zuschaltbare - Cloud-Service-Modus wird insbesondere bei einer sogenannten 3D-Viewing-Applikation vorgesehen, die zur - besonders rechenleistungsintensiven - Darstellung von gerenderten Ansichten (Szenen) von Volumendaten dient. Die Rechenleistung wird dabei von dem Cloud Vendor insbesondere im Rahmen eines PaaS-Nutzungsschemas angeboten, so dass für das Betriebssystem, Treiber, einen Applikationsserver (App-Store) und dergleichen keine separaten Adminis- trationskosten anfallen. Im Rahmen der Erfindung kann vorgesehen sein, dass die Auswahl zwischen dem Device-Only-Modus und dem Cloud-Service- Modus - entweder automatisch durch die Applikation vorgenommen wird (beispielsweise in Abhängigkeit der Qualität der Netzverbindung und/oder der Rechenkapazität des Device) , - interaktiv durch den medizinischen Nutzer bestimmt wird, oder

- durch Voreinstellung (Konfigurationsdaten) der Applikation festgelegt wird.

Vorzugsweise ist innerhalb mindestens eines Hubs ein Tabellenspeicher (Table Storage) angelegt. Hierunter wird eine - beispielsweise im Rahmen des „Windows Azure"-Dienstes der Firma Microsoft standardmäßig angebotene - Form der Datenspeicherung verstanden, in der Dateneinheiten (Data Entities) zusammen mit einer Index-Variable, die jede Dateneinheit eindeutig kennzeichnet, als Tabelleneinträge strukturiert abge- legt werden. Bei dem „Windows Azure"-Dienst setzt sich diese Index-Variable beispielsweise aus einem sogenannten Partiti- onKey sowie einem sogenannten RowKey zusammen. Der Partition- Key bezeichnet hierbei eine physikalische Partition des Cloud Storage, in der der jeweilige Tabelleneintrag abgelegt wird, so dass Tabelleneinträge mit verschiedenem PartitionKey in verschiedenen physikalischen Partitionen abgelegt werden.

Innerhalb des Table Storage ist jedem der in dem jeweiligen Hub gespeicherten Datensätze ein Tabelleneintrag (nachfolgend als „Tweet" bezeichnet) zugeordnet. Jeder Tweet kann hierbei den zugeordneten Datensatz selbst enthalten. So ist vorzugsweise jeder Satz von Patientendaten des Patient-Hubs vorzugsweise als Tweet des zugehörigen Tabellenspeichers hinterlegt. Alternativ hierzu (insbesondere bei Datensätzen mit großen und/oder nicht-alphanumerischen Datenblöcken wie z.B. medizinischen Bildern) ist der Datensatz selbst tabellenextern (außerhalb eines Table Storage) hinterlegt, beispielsweise in einem sogenannten Blob-Speicher (Blob Storage) der Cloud Sto- rage. Der dem Datensatz zugeordnete Tweet enthält in diesem Fall eine Angabe zu dem tabellenexternen Speicherort, beispielsweise in Form eines sogenannten „Uniform Ressource Identifier" (URI) . Wiederum alternativ hierzu können bestimm- te Datenblöcke eines Datensatzes im Rahmen des Tweets in dem Tabellenspeicher abgelegt sein, während mindestens ein weiterer Datenblock desselben Datensatzes tabellenextern gespeichert ist. So sind beispielsweise im Falle von medizinischen Bilddatensätzen zweckmäßigerweise die eigentlichen Bilddaten in einem Blob-Storage des Image-Hubs gespeichert, während die dazugehörigen Metadaten (z.B. Aufnahmeparameter und Angaben zum Patienten) im Rahmen der zugehörigen Kontextinformation im Table Storage des Context-Hubs hinterlegt sind. Als Blob- Storage, wie er ebenfalls im Rahmen des „Windows Azure"

Dienstes der Firma Mircosoft standardmäßig angeboten wird, wird eine Form der Datenspeicherung bezeichnet, bei der eine unstrukturierte Speicherung von Datensätzen erfolgt.

Verfahrensgemäß kann hierbei der Inhalt des Tabellenspeichers von der dem Hub zugeordneten Applikation unmittelbar (ohne Inanspruchnahme von Rechenleistung der Public Cloud, also Cloud-Compute-Diensten) durchsucht werden. Als Ergebnis dieser Suche werden hierbei ausgewählte Tweets in Form einer Ergebnisliste extrahiert, die von der Applikation angezeigt wird. Eine solche Ergebnisliste ist nachfolgend als „Feed" bezeichnet .

Die vorstehend beschriebene Ausgestaltung der Applikationen und des von diesem durchgeführten Verfahrens ermöglicht hier- bei ein effektives „Browsing", d.h. eine effektive Sortierung und Auffindung der in dem jeweiligen Hub gespeicherten Daten, ohne hierfür Rechenleistung der Public Cloud, also Cloud- Compute-Dienste in Anspruch zu nehmen. In einer besonders bevorzugten Ausgestaltungsvariante des

Verfahrens wird durch mindestens eine der Applikationen der von dieser aus dem zugehörigen Hub extrahierte Feed „externa- lisiert", das heißt aus dem Public Cloud Storage in einen lo- kalen Speicher des Device heruntergeladen, so dass dieser Feed und die darin enthaltenen Tweets durch die Applikation auch ohne Netzanbindung mit der Public Cloud angezeigt, bearbeitet und/oder an eine andere Instanz derselben oder einer anderen Applikation übermittelt werden können.

Durch diesen Austauschmechanismus (auch als „Exchangeboard" bezeichnet) wird eine besonders effektive und flexible Kommunikation zwischen verschiedenen Applikationsinstanzen ermög- licht, die wiederum ohne Rechenleistung der Public Cloud, also Cloud-Compute-Dienste auskommt. Beispielsweise kann auf diese Weise mittels einer dem Context-Hub zugeordneten Brow- sing-Applikation der URI eines anzuschauenden Bildes ermittelt und an eine davon separate Viewing-Applikation des

Image-Hub übermittelt werden, so dass die Viewing-Applikation dann selbständig anhand des URI auf das gesuchte Bild zugreifen kann. Dieser Austausch kann ohne Weiteres auch zwischen verschiedenen Devices erfolgen, beispielsweise indem der dem Bilddatensatz zugeordnete Tweet oder/oder die darin enthalte- ne URI per Email, Instant-Message oder Twitter versandt werden .

In einer weiteren vorteilhaften Weiterentwicklung des Verfahrens und des Systems sind auch Modalitäten der medizinischen Einrichtung (das heißt, die bildgebenden Geräte wie z.B. Computertomographen, Magnetresonanztomographen, etc.) zur unmittelbaren Kommunikation mit dem Cloud Storage ertüchtigt. Im Zuge des Verfahrens wird somit durch eine medizinische Modalität ein Datensatz, der patientenspezifische Bilddaten ent- hält, erzeugt und unmittelbar in dem zugeordneten Speicherbereich (insbesondere dem Image-Hub) des Cloud Storage abgelegt. Diese Funktionalität zur direkten Kommunikation mit dem Public Cloud Storage ist insbesondere in einem Speichertreiber implementiert, der der Steuersoftware der Modalität im Rahmen einer Anwender-Programmier-Schnittstelle (Application Programming Interface, kurz: API) zur Verfügung gestellt wird. Der Speichertreiber kann unmittelbar in die Steuersoftware der jeweiligen Modalität integriert sein. Alternativ hierzu bildet der Speichertreiber einen eigenständigen Programmbestandteil, auf den die Steuersoftware der Modalität nach Art eines Druckertreibers zugreift. Die vorstehend beschriebene Ausbildung einer Modalität zum unmittelbaren Laden der von der Modalität erzeugten Bilddatensätze in einen zugeordneten Speicherbereich (Image-Hub) eines Public Cloud Sto- rage wird als eigenständige Erfindung angesehen, die auch ohne die übrigen Merkmale vorstehend beschriebenen Verfahrens bzw. Systems vorteilhaft einsetzbar ist.

Das erfindungsgemäße System zur Verwaltung und Bearbeitung von Daten einer medizinischen Einrichtung ist schaltungs- oder programmtechnisch zur Durchführung des vorstehend beschriebenen Verfahrens eingerichtet. Es umfasst hierzu min- destens zwei (Ressource- ) Hubs der vorstehend beschriebenen

Art zur Speicherung mindestens zweier Ressourcen (d.h. zweier unterschiedlicher Arten von medizinischen Datensätzen) , wobei jeder Hub ausschließlich den Datensätzen einer bestimmten Ressource zugewiesen ist. Die Daten sind hierbei in dem je- weiligen Hub derart vorgehalten, dass auf diese Daten aus dem Internet unmittelbar zugegriffen werden kann, sofern eine dem Hub zugeordnete Subscription vorliegt. Jedem Hub ist hierbei mindestens eine Applikation zugeordnet, die selektiv zum Abruf und zur Darstellung der in dem zugeordneten Hub enthalte- nen Datensätze eingerichtet ist. Die vorstehend im Zusammenhang mit dem Verfahren beschriebenen Ausgestaltungsvarianten und die damit verbundenen Vorteile sind sinngemäß auf das erfindungsgemäße System zu übertragen. Im engeren Sinne umfasst das erfindungsgemäße System ausschließlich die genannten Speicherbereiche (Hubs) , die zugeordneten Applikationen sowie optional den vorstehend beschriebenen Speichertreiber. Das System ist in diesem Sinne ausschließlich aus Softwarekomponenten gebildet. In einem weiteren Sinne umfasst das erfindungsgemäße System zusätzlich den Cloud Storage, bei dem es sich um einen Hardware-Speicher mit einer darauf laufenden, cloud- internen Verwaltungssoftware handelt, sowie mindestens ein Device, das mit dem Public Cloud Storage über das Internet verbunden ist. Bei dem Device handelt es sich insbesondere um einen Personal -Computer (PC) , ein Notebook, einen Tablet-Computer oder ein Smartphone . Nachfolgend werden Ausführungsbeispiele der Erfindung anhand einer Zeichnung näher erläutert. Darin zeigen:

FIG 1 in einem schematischen Blockschaltbild ein System zur Verwaltung und Bearbeitung von Daten einer me- dizinischen Einrichtung, mit mehreren Modalitäten und Nutzer- oder Endgeräten (Devices) sowie mit einer mit den Modalitäten und Devices über das Internet verbundenen Public Cloud, FIG 2 in einem schematischen Blockschaltbild den softwaretechnischen Aufbau des Systems, wonach das System für verschiedene Arten von Daten der medizinischen Einrichtung in einem Cloud Storage der Public Cloud jeweils spezifisch zugeordnete Speicherberei- che (Hubs) aufweist, nämlich einen Patient-Hub für

Patientendatensätze, einen Worklist-Hub für Aufgaben, einen Context-Hub für Kontextdatensätze und einen Image-Hub für Bilddatensätze, und wobei das System auf jedem Device für jeden Hub eine zugeord- nete Applikation zum Zugriff auf die in diesem Hub gespeicherten Datensätze enthält, wobei in den drei erstgenannten Hubs jeweils ein Tabellenspeicher (Table Storage) angelegt ist, in dem zu jedem Datensatz des Hubs ein zugeordneter Tabelleneintrag (Tweet) enthalten ist, und wobei jede Applikation dazu eingerichtet, den Tabellenspeicher des zugehörigen Hubs zu durchsuchen (Browsing) und eine Ergebnisliste (Feed) ausgewählter Tweets zu extrahieren und anzuzeigen, und wobei die dem Image-Hub zu- geordnete Applikation zur Anzeige (Viewing) der

Bilddatensätze eingerichtet ist, in schematischer Darstellung eine Seite einer Benutzeroberfläche einer zum Ablauf auf einem

Smartphone vorgesehenen Applikation, die zur Anzeige eines Feeds des jeweils zugeordneten Hubs dient, in Darstellung gemäß FIG 3 eine weitere Seite der Benutzeroberfläche der dortigen Applikation, die zur Anzeige eines Tweets des zugehörigen Hubs dient , in Darstellung gemäß FIG 3 eine Seite der Benutzeroberfläche der dem Image-Hub zugeordneten Applikationen, die zur Darstellung der Bildinformation eines Bilddatensatzes dient, in Darstellung gemäß FIG 3 eine zum Ablauf auf einem Personal-Computer, Notebook oder Tablet- Computer vorgesehene Variante der dortigen Applikation, bei der mehrere Seiten der Benutzeroberfläche gleichzeitig darstellbar sind, und in Darstellung gemäß FIG 6 eine weitere Seite der Benutzeroberfläche, die zur Darstellung der Bildinformation eines Bilddatensatzes dient, in einem schematischen Blockschaltbild eine alternative Ausführung des Systems, bei dem die dem Image-Hub zugeordnete Viewing-Applikation getrennte Module zum Anzeigen von 2D-Bilddaten und Volumendaten enthält, in Darstellung gemäß FIG 8 eine weitere Ausführungsform des Systems, wobei dem Image-Hub zwei selbstständige Applikationen zugewiesen sind, näm- lieh eine 2D-Viewing-Applikation zum Anzeigen von

2D-Bildern und eine 3D-Viewing-Applikation zur visuellen Darstellung von Volumendaten, und FIG 10 in Darstellung gemäß FIG 8 eine weitere Ausführungsform des Systems, bei der eine Modalität mit einem Speichertreiber zum unmittelbaren Laden von Bilddaten in den Image-Hub des Cloud Storage aus- gestattet ist.

Einander entsprechende Teile und Größen sind in allen Figuren stets mit gleichen Bezugszeichen versehen. FIG 1 zeigt in grober schematischer Vereinfachung ein System 1 zur Verwaltung und Bearbeitung von medizinischen Daten einer medizinischen Einrichtung 2, bei der es sich beispielsweise um eine Klinik handelt. Hardwareseitig umfasst das System 1 eine Anzahl von Modalitäten 3, also bildgebenden, medizinischen Untersuchungsgeräten der Einrichtung 2. So umfasst das System 1 in der beispielhaften Darstellung gemäß FIG 1 einen Computertomographen 4, ein C-Bogengerät 5 und einen Magnetresonanztomographen 6. Je- der Modalität 3 ist ein (Steuer- und Auswerte- ) Rechner 7 zugeordnet .

Weiterhin umfasst das System 1 hardwareseitig eine Anzahl von Nutzer- oder Endgeräten (nachfolgend Devices 8) der Einrich- tung 2, die zur Anzeige und Bearbeitung von Daten dienen. In dem vereinfachten Beispiel gemäß FIG 1 umfassen die Devices 8 einen Personalcomputer 9 mit angeschlossenem Bildschirm 10, einen Tablet-Computer 11 sowie ein Smartphone 12. Als außerhalb der Einrichtung 2 angeordneten Bestandteil umfasst das System 1 eine Public Cloud 13. Als Public Cloud 13 wird im Rahmen des System 1 beispielsweise der von der Firma Microsoft unter der Bezeichnung „Windows Azure" angebotene Dienst genutzt. Abweichend hiervon können im Rahmen der Er- findung allerdings auch eine andere Public Cloud oder eine Kombination mehrerer Public Clouds (gegebenenfalls auch von unterschiedlichen Anbietern) als Public Cloud 13 herangezogen werden . ± g

Die Public Cloud 13 ist über ein (Datenübertragungs- ) etz 14 mit den einrichtungsinternen Komponenten des Systems 1, also den Modalitäten 3 und Devices 8 verbunden. Diese Netzverbin- dung ist innerhalb der Einrichtung 2 durch ein Intranet 15 der Einrichtung 2 gebildet, das beispielweise als sogenanntes Local Area Network (LAN) auf Basis kabelgebundener Ethernet- Technologie und/oder als kabelloses Wireless Local Area Network (WLAN) aufgebaut ist. Außerhalb der Einrichtung 2 ist das Netz 14 durch das Internet 16 gebildet. An der Schnittstelle zwischen dem Intranet 15 und Internet 16 ist in üblicher Weise eine Firewall 17 angeordnet.

Die von der Public Cloud 13 im Rahmen des Systems 1 zur Verfügung gestellten Dienste sind durch einen als Subscription 18 bezeichneten Nutzungsvertrag festgelegt. Die Subscription 18 regelt dabei, welche Hardware- und Softwarebestandteile der Public Cloud 13 den einrichtungsinternen Komponenten des Systems 1 zugänglich sind. Mit dem Begriff Subscription 18 wird daher nachfolgend derjenige Teil der Public Cloud 13 bezeichnet, der der Einrichtung 2 im Rahmen des Systems 1 exklusiv zugeordnet ist. Andere Bereiche der Public Cloud 13 können - wie in FIG 1 angedeutet - im Rahmen weiterer Subsc- riptions 18' weiteren medizinischen Einrichtungen 2' zugewiesen sein. Jede Einrichtung 2,2' hat hierbei ausschließlich Zugang zu den ihr gemäß ihrer Subscription 18,18' zugewiesenen Daten und Diensten, nicht aber zu den Daten und Diensten anderer Einrichtungen 2 bzw. 2'. Die Public Cloud 13 ist in diesem Sinne „mandantenfähig" (multi-tenant) .

Gemäß der Subscription 18 sind dem System 1 der Einrichtung 2 innerhalb der Public Cloud 13

- ein nachfolgend als Cloud Storage 19 bezeichneter Daten- Speicher,

- ein nachfolgend als App Store 20 bezeichneter Speicher für Applikationen (Anwendungssoftware) sowie

- Cloud-Compute-Dienste 21 zur Verfügung gestellt. Der Cloud Storage 19 dient zur persistenten Speicherung der Daten der Einrichtung 2. Der App Store 20 stellt Applikationen, Treiber und sonstige Periphe- riesoftware wie beispielsweise Konfigurationsdateien und Vorlagen (Templates) zur Verfügung, die von den einrichtungsinternen Komponenten des Systems 1, also den Modalitäten 3 und den Devices 8 heruntergeladen werden können und im Betrieb des Systems 1 auf den Modalitäten 3 (genauer gesagt den zuge- ordneten Rechnern 7) bzw. auf den Devices 8 ablaufen. Die

Cloud-Compute-Dienste 21 werden im Rahmen des Systems lediglich optional für alle Rechenoperationen herangezogen, die nicht auf den Modalitäten 3 oder den Devices 8 selbst vorgenommen werden. Letzteres betrifft insbesondere die rechen- leistungsintensive Aufbereitung von 3D-Bilddaten (Volumendaten) der jeweiligen Modalität 3 für die Speicherung (Prepro- cessing) und/oder die Ableitung von gerenderten Ansichten V (Szenen oder Scene-Graphs) für die zweidimensionale Visualisierung (Bildsynthese, Volume Rendering) solcher Volumenda- ten.

Die im Rahmen der Einrichtung 2 zu verwaltenden und zu bearbeitenden Daten umfassen gemäß FIG 2 Patientendatensätze P, Aufgaben W, Kontextdatensätze C und Bilddatensätze B, wobei diese Daten im Einzelnen jeweils die vorstehend näher erläuterten Inhalte haben. Bilddatensätze B können hierbei medizinische Bilddaten oder Volumendaten oder eine sonstige Bild-, Ton-, Graphik- oder Textinformation (Photos, Videos, Dokumente) enthalten.

Gemäß FIG 2 ist für jede dieser verschiedenen Datenarten (Ressourcen) innerhalb des Cloud Storage 19 jeweils ein separater Speicherbereich angelegt, der nachfolgend als (Ressource-) Hub bezeichnet ist. Im Einzelnen sind in dem Cloud Stora- ge 19 somit

- ein (Patient- ) Hub 22 zur Speicherung der Patientendatensätze P, - ein (Worklist- ) Hub 23 zur Speicherung der Aufgaben W,

- ein (Context- ) Hub 24 zur Speicherung der Kontextdatensätze C sowie

- ein ( Image- ) Hub 25 zur Speicherung der Bilddatensätze B angelegt.

Jeder der Hubs 22-24 enthält jeweils einen Tabellenspeicher (nachfolgend als Table Storage 26 bezeichnet) . Im Rahmen des Systems 1 wird für jeden gespeicherten Datensatz in dem Table Storage 26 des jeweils zugeordneten Hubs 22-24 ein Tabelleneintrag angelegt, der nachfolgend als Tweet 27 bezeichnet ist. Bei Datensätzen, die ihrer Natur nach aus vergleichsweise wenigen, diskreten Angaben bestehen, ist dabei der gesamte Datensatz als Tweet 27 im Table Storage 26 des jeweiligen Hubs 22-24 gespeichert. Dies betrifft im Beispiel gemäß FIG 2 die Patientendatensätze P, die Aufgaben W, sowie die Kontextda- tensätze C. Anstelle des Table Storage 26 kann der Worklist- Hub 23 zur Speicherung der Aufgaben W nach einem First-in- first-out-Prinzip allerdings auch einem sogenannten Queue- Storage aufweisen. Zur Speicherung der Bilddatensätze B, die in der Regel im Wesentlichen aus einem größeren und meist nicht-alphanumerischen Datenblock gebildet sind, ist im Image Hub 25 anstelle eines Table-Storage 26 ein sogenannter Blob-Storage 28 vorgesehen. Zu den in dem Image Hub 25 gespeicherten Bilddatensät- zen B ist in dem Kontext Hub 24 jeweils ein Kontextdatensatz C in Form eines Tweets 27 hinterlegt. Dieser Tweet 27 enthält zumindest einen URI 29 (Uniform Ressource Identifier) , der den Speicherort des Bilddatensatzes B im Blob-Storage 28 des Image Hubs 25 bezeichnet.

Für jeden der Hubs 22-25 wird im App Store 20 eine Applikation 31-34 zur Verfügung gestellt, die jeweils selektiv zur Darstellung und zur Bearbeitung der in dem jeweils zugeordne- ten Hub 22-25 gespeicherten Datensätze dient. Jede der Applikationen 31-34 repräsentiert somit den zugeordneten Hub 22-25 auf der Ebene des Devices 8. Die Applikationen 31-34 sind daher - in Anlehnung an die Ressource-Hubs - auch als „Applica- tions-Hubs" bezeichnet.

Im Einzelnen umfassen die im App Store 20 zur Verfügung gestellten Applikationen somit - eine Applikation 31 zur Verwaltung und Bearbeitung der in dem Patient-Hub 22 gespeicherten Patientendatensätze P,

- eine Applikation 32 zur Verwaltung und Bearbeitung von Aufgaben W,

- eine Applikation 33 zur Verwaltung und Bearbeitung von

Kontextdatensätzen C, sowie

- eine Applikation 34 zur Anzeige und Bearbeitung der in dem Image-Hub 25 gespeicherten Bilddatensätze B. Die Applikationen 31-34 können aus dem App Store 20 auf jedes der Devices 8 heruntergeladen und dort zur Ausführung gebracht werden. Sofern das System 1 - wie in FIG 1 dargestellt - unterschiedliche Arten von Devices (z.B. Personal -Computer 9, Tablet-Computer 11 und/oder Smartphones 12) umfasst, wer- den in dem App Store 20 jeweils verschiedene Versionen der Applikationen 31-34 zur Verfügung gestellt, die zum Ablauf auf dem jeweiligen Device 8 angepasst sind.

Beispielsweise werden die Applikationen 31-34 zum Ablauf auf dem Tablet-Computer 11 und dem Smartphone 12 in Form einer an den jeweiligen Gerätetyp angepassten App zur Verfügung gestellt, während die für den Personal -Computer 9 zur Verfügung gestellte Versionen der Applikationen 31-34 für den Ablauf in einem Internet-Browser konzipiert sind.

Im Vergleich zu einer herkömmlichen IT-Struktur für die Verwaltung von medizinischen Daten übernehmen der Patient Hub 22 und die zugeordnete Applikation 31 aus Sicht des Nutzers etwa die Funktion eines herkömmlichen Krankenhaus-Informationssystems (HIS) . Insbesondere sind die gesamten personenbezogenen (und datenschutzrelevanten) Patientendaten in dem Patient-Hub 22 aufgenommen, der somit für den einzelnen Patienten eine elektronische Patientenakte abbildet. Die übrigen Hubs 23-25 enthalten vorzugsweise keine Information, die aus sich heraus einem bestimmten Patienten zuordenbar wäre (Privacy Information) . Der Worklist-Hub 23 und die zugeordnete Applikation 32 stellen sich dem Nutzer im Wesentlichen als Ent- sprechung zu einem herkömmlichen Radiologie-Informationssystems (RIS) dar, indem sie die innerhalb der Einrichtung 1 zur Durchführung anstehenden Aufgaben auflisten. Der Context- Hub 24 und die zugeordnete Applikation 33 übernehmen aus Nutzersicht etwa die Funktion eines herkömmlichen PACS, indem dort die zur Auffindung und Verarbeitung von Bilddatensätzen B erforderliche Information hinterlegt und recherchierbar ist. Der Image-Hub 25 und die zugeordnete Applikation 34 übernehmen schließlich etwa die Funktion eines herkömmlichen AV-Systems .

Obwohl die in den Hubs 22-25 und den zugeordneten Applikationen 31-34 enthalten Funktionen hochgradig miteinander verknüpft sind, ist jeder der Hubs 22-25 zusammen mit der jeweils zugeordneten Applikation 31-34 auch unabhängig von den jeweils anderen Hubs 22-25 und deren Applikationen 31-34 betreibbar. So kann beispielsweise auf einen in dem Image-Hub 25 enthaltenen Bilddatensatz B auch ohne den zugehörigen Kontextdatensatz C des Context-Hubs 24 zugegriffen werden, wenn der dem Image-Hub 25 zugeordneten Application 34 der URI 29 des anzuzeigenden Bilddatensatzes B auf andere Weise verfügbar gemacht wird, z.B. per E-Mail, SMS oder Twitter. Ferner können die Patientendaten P auch außerhalb der Public Cloud 13 vorgehalten werden, da der Patient-Hub 22 für die Funktion der übrigen Hubs 23-25 und der zugeordneten Applikationen 32- 34 nicht erforderlich ist.

Ein Kernelement der dem Patienten-Hub 22 zugeordneten Applikation 31 ist eine sogenannte Browsing-Funktion, die den Tab- le Storage 26 des Patient-Hubs 22 nach Tweets 27 durchsucht, die einem bestimmten, von einem Nutzer vorgebbaren Suchbegriff entsprechen. Von dem Patient-Hub 22 wird hierbei auf eine Suchanfrage Q (FIG 2) der Applikation 31 hin eine nachfol- gend als Feed 35 bezeichnete Ergebnisliste, die die der Suchanfrage Q entsprechenden Tweets 27 enthält, an die Applikation 31 zurückgeliefert. Die Applikation 31 zeigt den erhaltenen Feed 35 auf dem Device 8 auf einer in FIG 3 exemplarisch dargestellten Seite 36 einer graphischen Benutzeroberfläche 37 an.

In der exemplarischen Ausführung gemäß FIG 3 weist die Seite 36 im Wesentlichen vier Anzeigebereiche unterschiedlicher Funktion auf, nämlich eine Kopfzeile 40, ein Suchfeld 41, ein Anzeigefeld 42 und eine Befehlsleiste 43. In der Kopfzeile 40 ist der Hub 22-24 namentlich benannt, dem die Applikation 31 zugeordnet ist. Im Beispiel der Applikation 31 ist die Kopf- zeile 40 somit z.B. mit dem Wort „Patient Hub" beschriftet. Des Weiteren ist in der Kopfzeile 40 vorzugsweise die Ein- richtung 2 benannt, der das System 1 zugeordnet ist.

Das Suchfeld 41 enthält eine Eingabezeile 44, über die ein alphanumerischer Suchbegriff eingegeben werden kann, sowie eine Schaltfläche 45, durch deren Betätigung von einem Nutzer eine Suchanfrage Q auf Basis des zuvor in der Eingabezeile 44 eingegebenen Suchbegriffs gestartet werden kann.

Zusätzlich oder alternativ enthält das Suchfeld 41 ein Vorauswahlfeld 46, über das ein oder mehrere voreingestellte Suchbegriffe durch Antippen (im Falle eines berührungssensitiven Bildschirms) oder Anklicken mit einem gegebenenfalls vorhandenen Zeigergerät ausgewählt werden können.

Bei den über das Vorauswahlfeld 46 generierbaren Suchbegrif- fen handelt es sich insbesondere um häufig verwendete Suchschemata. Beispielsweise ermöglicht das Vorauswahlfeld 46 im Falle der mit dem Patient-Hub 22 korrespondierenden Applikation 31 eine Vorauswahl dahingehend, ob - alle Tweets 27 („all") oder

- nur solche Tweets 27 zu Patienten, für die Untersuchungen angesetzt sind („ scheduled" ) oder

- nur solche Tweets 27 zu Patienten, bei denen die zurückliegenden Leistung bereits abgerechnet wurden („billed") als Feed 35 zurückgeliefert werden sollen. Optional ist vorgesehen, dass bei Generierung eines Suchbegriffs über das Vorauswahlfeld 26 eine alphanumerische Entsprechung dieses Suchbegriffs automatisch in der Eingabezeile 44 angezeigt wird. Im Anzeigefeld 42 wird der aufgrund einer Suchabfrage Q zurückgelieferte Feed 35 angezeigt. Das Anzeigefeld 42 enthält somit in Form einer Liste diejenigen Tweets 27, die aufgrund der Suchanfrage Q der Applikation 31 in dem Patient-Hub 22 gefunden wurden. Zu jedem Tweet 27 werden beispielsweise ein verkleinertes Bild 47 und/oder ein Schlagwort 48 angezeigt.

So werden bei der dem Patient-Hub 22 zugeordneten Applikation 31 zu jedem anzeigten Tweet 27 vorzugsweise ein verkleinertes Bild des Patienten sowie der Name des Patienten und optional eine Patientenidentifikationsnummer angezeigt. Die Suchanfra- ge Q, und der aufgrund dieser zurückgelieferte Feed 35 können von einem Nutzer interaktiv geändert werden.

Die Suche wird basierend auf einer Syntax gemäß REST bzw. OData (Open Data Protocoll Standard) definiert. Sie ist grundsätzlich ähnlich zu einer WHERE-Klausel nach dem SQL- Standard, ist jedoch im Gegensatz zu der letzteren nicht von einer statischen Re-Indexierung abhängig. Insbesondere benötigen die Tabellen eines Hubs keine Index-Elemente für die Suche, weshalb auch keine Re-Indexierung erforderlich ist, und entsprechend auch keine eigenen Daten-Server oder Datenbank-Server vorgehalten werden müssen. Durch einfaches Antippen oder Anklicken eines im Anzeigefeld 42 angezeigten Tweets 27 kann dieser Tweet 27 von einem Nutzer ausgewählt werden. Die Befehlsleiste 43 enthält eine Anzahl von Schaltflächen 49 und 50, durch deren Betätigung von einem Nutzer elementare Operationen zur Steuerung der Benutzeroberfläche 37 und zum Verwalten und Bearbeiten des angezeigten Feeds 35 vorgenommen werden können.

Die Applikation 31 ist in der in FIG 3 dargestellten Version für die Darstellung auf dem Smartphone 12 optimiert. Dabei wird auf dem Smartphone 12 zu jedem Zeitpunkt stets nur eine einzelne Seite 36 mit einem einzelnen Feed 35 angezeigt. Al- lerdings können mehrere Instanzen der Seite 36 oder mehrere

Instanzen der gesamten Applikation 31 parallel zueinander generiert werden, wobei diese Instanzen im Hintergrund der Anzeige nebenläufig auf dem Smartphone 12 ausgeführt werden. Somit können insbesondere mehrere Suchanfragen Q parallel zu- einander abgearbeitet werden. Die Applikation 31 oder gegebenenfalls mehrere Instanzen der Applikation 31 laufen hierbei vorzugweise in einem generischen Rahmenmodul 51 (oder Container) ab. Dieses Rahmenmodul 51 kann beispielsweise als separate Applikation oder als Plug-in zu einem Web-Browser imple- mentiert sein. Alternativ kann die Applikation 31 jedoch auch zum unmittelbaren Ablauf in einem Web-Browser ausgebildet sein, z.B. als HTML5 -Applikation .

Die Schaltflächen 50 der Befehlsleiste 43 ermöglichen hierbei einen Wechsel zwischen den laufenden Instanzen der Applikation 31, indem bei Betätigung einer der Schaltflächen 50 die angezeigte Seite 36 der Nutzeroberfläche 37 ausgeblendet und die entsprechende Seite 36 einer anderen Instanz der Applikation 31 angezeigt wird.

Die weiteren Schaltflächen 49 der Befehlszeile 43 sind insbesondere folgenden Funktionen zugeordnet: - „Create": Auf Betätigung der entsprechenden Schaltfläche 49 hin werden eine neue Seite 36 der Benutzeroberfläche 37, ggf. zusammen mit einer neuen Instanz der Applikation 31 erzeugt.

- „Delete": Auf Betätigung der entsprechenden Schaltfläche

49 hin werden die angezeigte Seite 36 der Benutzeroberfläche 37, ggf. zusammen mit der zugehörigen Instanz der Applikation 31 beendet,

- „Read": Auf Betätigung der entsprechenden Schaltfläche 49 hin wird eine - in FIG 4 schematisch dargestellte - weitere Seite 52 der Benutzeroberfläche 37 geöffnet, in der der Dateninhalt des ausgewählten Tweets 27 zur bloßen Ansicht oder zur Veränderung angezeigt wird. Die Seite 52 umfasst gemäß FIG 4 ebenfalls vier Bereiche, nämlich eine Kopfzeile 60, ein Überschriftenfeld 61, ein Anzeigefeld 62 sowie eine Befehlsleiste 63.

Die Kopfzeile 60 weist hierbei - analog zu der Kopfzeile 40 der Seite 36 - den zugeordneten Hub 22-24 und die Einrichtung 2 aus. Das Überschriftenfeld 61 kennzeichnet die Art des angezeigten Datensatzes und enthält somit im Falle der Applikation 31 beispielsweise das Wort „Patient" (oder „Patient En- tity") .

In dem Anzeigefeld 62 wird der Inhalt des ausgewählten Tweets 27 - im Falle der Applikation 31 somit der Inhalt des (Patienten- ) Datensatzes - dargestellt. In diesem Fall werden in dem Anzeigefeld 62 insbesondere die Feldnamen 67 des Patien- ten-Datensatzes (zum Beispiel „Vorname", „Nachname", „Patien- ten-ID", „Alter", ...) zusammen mit dem jeweiligen Feldinhalt 68 (zum Beispiel also dem konkreten Vornamen, Nachnamen, der konkreten Patienten- ID bzw. dem konkreten Alter des Patienten dargestellt) .

Die Befehlszeile 63 enthält Schaltflächen 64, denen insbesondere folgende Funktionen zugewiesen sind: - „Create": Auf die Betätigung der entsprechenden Schaltfläche 64 hin wird eine neue Instanz der Seite 52 zur Anlage eines neuen Tweets 27 und somit eines neuen (Patienten- ) Datensatzes P erzeugt.

- „Update": Auf die Betätigung der entsprechenden Schaltfläche 64 hin werden die - gegebenenfalls geänderten - Feldinhalte 68 gespeichert, indem die Applikation 31 den angezeigten Tweet 27 unmittelbar im Table Storage 26 des Patient-Hubs 22 mit den geänderten Angaben überschreibt. - „Delete": Auf die Betätigung der entsprechenden Schaltfläche 64 hin wird der angezeigte Tweet 27 durch die Applikation 31 unmittelbar im Table Storage 26 des Patient-Hubs 22 gelöscht; die angezeigte Seite 52 wird geschlossen .

Darüber hinaus enthält die Befehlszeile 63 eine Schaltfläche 65, auf deren Betätigung hin die Applikation 31 die angezeigte Seite 52 ohne Veränderung des Tweets 27 schließt und die zugrundeliegende Seite 36 erneut anzeigt.

Die Befehlszeilen 43 und 63 können weitere Schaltflächen für Befehle aufweisen. Ebenso können auch eine oder mehrere der anhand der Schaltflächen 49, 50, 64 und 65 beschriebenen Funktionen einem der gegebenenfalls vorhandenen elektromecha- nischen Tasten des Smartphones 12 zugeordnet sein. Die jeweilige Schaltfläche ist in diesem Fall vorzugsweise aus der Befehlszeile 43 entfernt.

Die Applikationen 32 und 33 haben jeweils eine der Applikati - on 31 entsprechende Browsing-Funktion . Insbesondere weist auch die jeweilige Benutzeroberfläche 37 der Applikationen 32 und 33 jeweils die anhand der FIG 3 und 4 beschriebenen Seiten 36 und 52 auf. Allerdings greifen die Applikationen 32 und 33 auf den

Worklist-Hub 23 bzw. auf den Context-Hub 24 zu, und sind entsprechend angepasst. So enthalten insbesondere - die im Rahmen der Applikation 32 angezeigten Tweets 27 Angaben zu einer bestimmten Aufgabe W (beispielsweise Angaben zu dem Einstellungsdatum der Aufgabe, der mit der Aufgabe betreuten Abteilung, sowie Angaben zu der Aufgabe selbst und dem Taskflow, in den diese Aufgabe gegebenenfalls eingebunden ist) , und

- die im Rahmen der Applikation 33 angezeigten Tweets 27 den Inhalt jeweils eines Kontext-Datensatzes C, insbesondere Angaben zum Dokumententyp, Speicherort, Daten- format sowie optional Aufnahmeparameter zu einem Bilddatensatz B.

Die Applikation 34 dient dagegen zur Anzeige („Viewing") des nicht-alphanumerischen Inhalts eines im Image-Hub 25 gespei- cherten Bilddatensatzes B. Hierfür umfasst die graphische Benutzeroberfläche 37 der Applikation 34 eine in FIG 5 dargestellte Seite 69. Ebenso wie die Seite 52 enthält auch die Seite 69 eine Kopfzeile 70, ein Überschriftenfeld 71, ein Anzeigefeld 72 und eine Befehlszeile 73. In dem Überschriften- feld 71 ist hierbei beispielsweise die Art des angezeigten Bilddatensatzes B spezifiziert (z.B. als „ 2D-Viewing" , 3D- Viewing", "Media-Viewing" , „Document-Viewing" , etc.) . Im Anzeigefeld 72 wird der visuelle Inhalt des Bilddatensatzes B, also beispielsweise das Bild, Volumen, Video oder Textdoku- ment angezeigt. Die Befehlszeile 73 enthält neben der Schaltfläche 65 weitere Schaltflächen 74 zur Beeinflussung der Anzeige, beispielsweise zum Vergrößern oder Verkleinern des im Anzeigefeld 72 angezeigten Dateninhalts oder um Verschieben eines angezeigten Bildausschnitts. Außerdem kann eine Schalt- fläche 74 zum Löschen eines Bilddatensatzes B vorgesehen sein .

Anstelle der gemeinsamen Seite 69 zur Anzeige unterschiedlicher Datentypen kann die Applikation 33 auch verschiedene Viewingseiten umfassen, die jeweils zur Anzeige eines bestimmten Dokumententyps (Bild, Volumen, Video, Textdokument, etc.) eingerichtet sind. Bezüglich der Anzeige von Volumendaten (3D-Viewing) ist die Applikation 34 in zwei Betriebsmodi betreibbar, nämlich in

- einem „Device-Only-Modus", in dem die für die Anzeige der Volumendaten auf dem zweidimensionalen Bildschirm erforderlichen Rechenschritte, insbesondere die Anfertigung von gerenderten Ansichten V, auf dem Device 8 selbst vorgenommen werden, sowie

- einem „Cloud-Service-Modus", in dem die Applikation 34 für diese Rechenoperationen durch eine entsprechende Anfrage R (FIG 2) Cloud-Compute-Dienste 21 anfordert.

Im Device-Only-Modus greift die Applikation 34 unmittelbar auf die im Blob-Storage 28 des Image-Hubs 25 gespeicherten Bilddatensätze B zu . Im Cloud-Service-Modus werden die Bilddaten B durch Cloud-Compute-Dienste 21 bearbeitet, wobei lediglich die resultierenden zweidimensionalen Ansichten V von der Cloud 13 an die Applikation 34 geliefert werden. Aufgrund entsprechender Voreinstellung arbeitet die Applikation 34 von Haus aus im Cloud-Service-Modus und schaltet nur dann in den Device-Only-Modus, wenn die Netzverbindung mit der Public Cloud 13 eine vorgebebene Mindestqualität unterschreitet.

Bevorzugt enthält die Applikation 34 zusätzlich Funktionen zur Bearbeitung der Bilddaten, insbesondere zur Vermessung und/oder Segmentierung von Bildstrukturen und/oder zur Einbringung von Markierungen und/oder Annotationen. Zur Unterstützung der medizinischen Befundung der angezeigten Bilddaten enthält die Applikation 34 ferner eine Funktion zur Er- Stellung eines sogenannten Keyimage K (FIG 2) . Wie verstehend erwähnt, handelt es sich hierbei um einen Schnappschuss , also eine Kopie der Bildinformation des angezeigten Bildausschnitts. Die Applikation 34 ist hierbei dazu eingerichtet, erstellte Keyimages K auf entsprechenden Nutzerbefehl direkt als Bilddatensatz B in dem Blob-Speicher 28 des Image-Hubs 25 zu hinterlegen. Die Applikationen 32-34 oder gegebenenfalls mehrere Instanzen dieser Applikationen 32-34 laufen ebenfalls bevorzugt in dem Rahmenmodul 51. Vorzugsweise ist hierbei - wie schematisch in FIG 2 angedeutet - ein gemeinsames Rahmenmodul 51 für alle Applikationen 31-34 vorgesehen. Alternativ kann aber auch jeder Applikation 31-34 ein eigenes Rahmenmodul zugeordnet sein .

Die Kommunikation zwischen jedem der Hubs 22-25 und der je- weils zugewiesenen Applikation 31-34 ist so gestaltet, dass sie mit dem im Internet-Datenverkehr gebräuchlichen

REST (Representational State Transfer) -Prinzip kompatibel ist. Insbesondere genügen die zwischen den Hubs 22-25 und der jeweiligen Applikation 31-34 ausgetauschten Daten den Standards XML, JSON und ATOM. Bilddaten B sind im Image-Hub 25 insbesondere im JPEG-Format hinterlegt, Volumendaten vorzugsweise im DICOM-Format . Die gegebenenfalls von der Public-Cloud 13 an die Applikation 34 gelieferten Ansichten V (Scene-Graphs) von Volumendaten werden vorzugsweise im JPEG-Format erstellt.

Für den unmittelbaren Zugriff auf die in dem jeweiligen Hub 22-25 gespeicherten Daten nutzt jede Applikation 31-34 einen mehrfach instantiierbaren Cloud-Treiber, der in Form einer Anwender-Programmier-Schnittstelle (API) vorliegt.

Jede der Applikationen 31-33 ist dazu eingerichtet, Feeds 35 auf Anweisung des Nutzers aus dem zugehörigen Hub 22-24 in einen lokalen Speicher des Device 8 zu externalisieren, so dass dieser Feed 35 und die darin enthaltenen Tweets 27 durch die Applikation 31-33 auch ohne Netzanbindung mit der Public Cloud 13 angezeigt und/oder bearbeitet werden können. Weiterhin ist jede Applikation 31-33 dazu eingerichtet, auf entsprechenden Befehl des Nutzers externalisierte Feeds 35 oder Tweets 27 an eine andere Instanz derselben oder einer anderen Applikation 31-34 zu übermitteln. Für die geräteinterne Übermittlung der Feeds 35 oder Tweets 27 ist im Speicher des Device 8 ein als „Exchangeboard" bezeichneter lokaler Speicherbereich eingerichtet, auf den alle Instanzen der Applikatio- nen 31-34 gemeinsam zugreifen. Zum Austausch über das Exchangeboard werden die auszutauschenden Feeds 35 oder Tweets 27 in XML/JSON-Files serialisiert , die im lokalen Speicher des Devices 8 abgelegt und anschließend wieder deserialisiert werden. Zum Austausch von Feeds 35 und Tweets 27 zwischen verschiedenen Devices 8 weisen die Applikationen 31-34 bevorzugt Schnittstellen zu Twitter oder einem E-Mail -Programm auf . FIG 6 zeigt eine Variante der Applikationen 31-33, bei der die Benutzeroberfläche 37 für die Anzeige auf einem großformatigen Bildschirm, beispielsweise dem Bildschirm 10 des Personal-Computers 9 oder dem Bildschirm des Tablet-Computers 11 optimiert ist. Die Benutzeroberfläche 37 gemäß FIG 6 unter- scheidet sich von der in den FIG 3 und 4 gezeigten Benutzeroberfläche 37 im Wesentlichen dadurch, dass mehrere Instanzen der Applikationen 31-33 und die entsprechenden Seiten 36 und/oder 52 der Benutzeroberfläche 37 nebeneinander (und somit gleichzeitig) sichtbar sind.

In der Darstellung gemäß FIG 6 weist die Benutzeroberfläche 37 weiterhin zusätzliche Navigations-Schaltflächen 50 auf, durch deren Betätigung wiederum zwischen den angezeigten Seiten 36 und/oder 52 geblättert werden kann.

Außerdem weist die Benutzeroberfläche 37 zusätzlich eine Menüzeile 80 auf, durch deren Betätigung zwischen den verschiedenen Applikationen 31-34 gewechselt werden kann. Die Menüzeile 80 ist dabei insbesondere Bestandteil eines Rahmenmo- duls 81 (oder Containers) , in dem die bestehenden Instanzen der Applikationen 31-34 ablaufen.

FIG 7 zeigt eine zur Anzeige auf einem großformatigen Bildschirm optimierte Version der Seite 69 der Applikation 34, bei der das Anzeigefeld 72 nahezu die gesamte Bildschirmfläche ausfüllt. FIG 8 zeigt eine Variante des Systems 1, bei der die Applikation 34 zum Anzeigen von 2D-Bilddaten und Volumendaten ein (2D-Viewing- ) Modul 92 und ein hiervon unabhängiges (3D- Viewing- ) Modul 93 enthält. Die Applikation 34 ist hierbei in einer eingeschränkten Version auch mit lediglich einem der Module 92 bzw. 93 lauffähig. Das 2D-Viewing-Modul 92 greift hierbei zum Herunterladen des anzuzeigenden Bilddatensatzes B stets unmittelbar auf den Blob-Storage 28 des Image-Hubs 25 zu. Das 3D-Viewing-Modul 93 greift entweder ebenfalls unmit- telbar auf die im Image-Hub 25 gespeicherten Volumendaten zu oder nimmt zur Erstellung der Views V Cloud-Compute-Dienste 21 in Anspruch.

Um einen bestimmten Bilddatensatz B mittels der Applikation 34 anzuzeigen, wird zum Beispiel von der dem Kontext-Hub 24 zugeordneten Applikation 33 der zugehörige Tweet 27 ermittelt und über das Exchangeboard an die Applikation 34 übergeben. Anhand des in dem übergebenen Tweet 27 enthaltenen URI 29 lädt die Applikation 34 den Bilddatensatz B aus dem Image-Hub 25.

FIG 9 zeigt eine weitere Variante des Systems 1, bei der dem Image-Hub 25 anstelle der einzigen Applikation 34 eine 2D- Viewing-Applikation 94 und eine hiervon unabhängige 3D- Viewing-Applikation 95 zugeordnet sind.

Gemäß FIG 10 ist jede Modalität 3 des Systems 1 mit einem in dem Rechner 7 implementierten Speichertreiber 100 versehen. Der Speichertreiber 100, der in Form einer Anwender-Program- mier-Schnittstelle (API) für die Steuer- und Auswertesoftware der Modalität 3 vorliegt, ist hierbei dazu eingerichtet, einen von der Modalität 3 erzeugten und an den Speichertreiber 100 übergebenen Bilddatensatz B unmittelbar (ohne Inanspruchnahme von Cloud-Compute-Diensten 21) in den Blob-Storage 28 des Image-Hubs 25 zu schreiben. Weiterhin legt der Speichertreiber 100 einen zugehörigen Kontextdatensatz C als Tweet 27 in dem Table Storage 26 des Context-Hubs 24 an. Der Speichertreiber 100 wandelt die Bilddaten dabei vorzugsweise (jedenfalls sofern es sich bei den Bilddaten um 2D- Bilddaten handelt) in das JPEG-Format um, sofern die Modalität 3 die Bilddaten ursprünglich in einem anderen Datenformat erstellt. Im Falle von Volumendaten werden diese dagegen bevorzugt im DICOM-Format im Blob-Speicher 28 des Image-Hubs 25 abgelegt .

Ferner nimmt der Speichertreiber 100 optional weitere Datenaufbereitungsprozesse (Preprocessing) vor, bevor er den Bilddatensatz in dem Image-Hub 25 ablegt.

Die Erfindung wird an den vorstehend beschriebenen Ausführungsbeispielen besonders deutlich, ist gleichwohl auf diese aber nicht beschränkt. Vielmehr können weitere Ausführungsformen der Erfindung aus der vorliegenden Beschreibung und den Ansprüchen abgeleitet werden. Insbesondere können die anhand der Ausführungsbeispiele beschriebenen Einzelmerkmale der Erfindung auch in anderer Weise kombiniert werden, ohne von der Erfindung abzuweichen.

Als Anlagen beigefügt sind:

- Anlage 1: Ein Beispiel -Code für die Benutzeroberfläche des Rahmens 51 (App-Hub Container-GUI)

- Anlage 2: Ein Beispiel -Code für die Logik des Rahmens 51

(App-Hub Container Code)

- Anlage 3: Ein Beispiel -Code für den Speichertreiber 100

(Direct Storage Adapter) Anlage 1: Ein Beispiel -Code für die Benutzeroberfläche des Rahmens 51 (App-Hub Container-GUI)

<phone : PhoneApplicationPage

x : Class= "AzureTableStore_CRUD_Sample . PivotMainPage" xmlns= "http : //schemas . microsoft . com/winfx/2006/xaml/ ...

presentation"

xmlns : x= "http : //schemas .microsoft . com/winfχ/2006/xaml " xmlns : src= "clr-namespace :AzureTableStore_CRUD_Sample ; ...

assembly=AzureTableStore_CRUD_Sample"

xmlns : phone= "clrnamespace : Microsoft . Phone . Controls ; ...

assembly=Microsoft . Phone"

xmlns : Shell= "clr-namespace : Microsoft . Phone . Shell ; ...

assembly=Microsoft . Phone"

xmlns : controls= "clr-namespace : Microsoft . Phone . Controls ; ...

assembly=Microsoft . Phone . Controls " xmlns : d= "http : //schemas .microsoft . com/expression/...

blend/2008"

xmlns : mc= "http : //schemas . openxmlformats . org/...

markup-compatibility/2006 "

FontFamily= " { StaticResource PhoneFontFamilyNormal } "

FontSize= " {StaticResource PhoneFontSizeNormal } "

Foreground= " {StaticResource PhoneForegroundBrush} "

SupportedOrientations= " Portrait " Orientation= " Portrait " mc : Ignorable="d" d : DesignHeight= " 696 " d : DesignWidth= "480 " Shell : SystemTray . IsVisible= "True" >

<phone : PhoneApplicationPage . Resources>

<Storyboard x : ame= "ResetPageTransitionList "...

Completed= "OnResetPageTransitionList_Completed" >

<DoubleAnimationUsingKeyFrames Storyboard . TargetName=...

"ContentPanel " Storyboard . TargetProperty=...

" (UIElement . Proj ection) . (...

PlaneProj ection . RotationY) ">

<EasingDoubleKeyFrame KeyTime= " 00 : 00 : 00 "

Value="0" />

</DoubleAnimationUsingKeyFrames>

<DoubleAnimationUsingKeyFrames Storyboard . TargetName=... "ContentPanel " Storyboard . TargetProperty=... " (UIElement . Proj ection) . (...

PlaneProj ection . CenterOfRotationX) " >

<EasingDoubleKeyFrame KeyTime= " 00 : 00 : 00"...

Value="0" />

</DoubleAnimationUsingKeyFrames>

/Storyboard>

Storyboard x : ame= " PageTransitionList " Completed=...

"OnPageTransitionList_Completed" > <DoubleAnimationUsingKeyFrames Storyboard . TargetName

"ContentPanel " Storyboard . TargetProperty=... " (UIElement . Proj ection) . (...

PlaneProj ection . RotationY) ">

<EasingDoubleKeyFrame KeyTime= " 00 : 00 : 00 " Value="0" <EasingDoubleKeyFrame KeyTime="00 : 00 : 00.3 "...

Value="90">

<EasingDoubleKeyFrame . EasingFunction>

<CircleEase EasingMode= "Easeln" />

</EasingDoubleKeyFrame . EasingFunction>

</EasingDoubleKeyFrame>

</DoubleAnimationUsingKeyFrames>

<DoubleAnimationUsingKeyFrames Storyboard . TargetName

"ContentPanel " Storyboard . TargetProperty=... " (UIElement . Proj ection) . (...

PlaneProj ection . CenterOfRotationX) " >

<EasingDoubleKeyFrame KeyTime="00 : 00 : 00"

Value="0" />

<EasingDoubleKeyFrame KeyTime="00 : 00 : 00.3 "

Value="0">

<EasingDoubleKeyFrame . EasingFunction>

<CircleEase EasingMode= "Easeln" />

</EasingDoubleKeyFrame . EasingFunction>

</EasingDoubleKeyFrame>

</DoubleAnimationUsingKeyFrames>

/Storyboard>

hone : PhoneApplicationPage . Resources>

<Grid x:Name="LayoutRoot" Background= "Transparent " > Grid x:Name="ContentPanel" Grid.Row="l" Margin=...

"12, 0, 12, 0">

Grid . Proj ection>

<PlaneProj ection />

/Grid . Proj ection>

<controls : Pivot x : ame= "MainPivot " Title= "AppTitl

<controls : Pivot . Items>

</controls : Pivot . Items>

</controls : Pivot>

<StackPanel Grid.Row="l" Margin= " 12 , 0 , 12 , 0 "...

Orientation= "Vertical " VerticalAlignment=... "Bottom" >

<TextBlock Height= "Auto" HorizontalAlignment= " Margin="15, 2, 0, 0" Text= " {Binding Message,... Mode=TwoWay} " TextWrapping= "Wrap" />

<ProgressBar Height="20" Islndeterminate= "True" Visibility= " {Binding IsWorking, Converter= {StaticResource VisibilityConverter}}" /> </StackPanel>

</Grid>

/Grid> phone : PhoneApplicationPage .ApplicationBar>

<shell :ApplicationBar IsVisible= "True" >

<!-- will be set at runtime in view model -- <Shell :ApplicationBar . Menultems>

<!-- will be set at runtime in view model

</Shell :ApplicationBar . Menultems>

</shell :ApplicationBar>

/phone : PhoneApplicationPage .ApplicationBar> </phone : PhoneApplicationPage> Anlage 2: Em Beispiel -Code für die Logik des Rahmens 51 (App-Hub Container Code)

#define _VIEWING using System;

using System . Collections .Generic;

using System. Linq;

using System. Net;

using System . Windows ;

using System . Windows . Controls ;

using System . Windows . Documents ;

using System . Windows . Input ;

using System . Windows . Media ;

using System . Windows .Media .Animation;

using System . Windows . Shapes ;

using Microsoft . Phone . Controls ;

using Microsoft . Samples . WindowsPhoneCloud . Storage...

Client . Credentials ;

using Microsoft . Samples . WindowsPhoneCloud . StorageClient ; using System. Globalization;

using System . Windows . Controls . Primitives ;

using System . Windows .Navigation;

using Microsoft . Phone . Shell ;

using Microsoft . Samples . Data . Services . Client ;

using Microsoft . Samples . Data ;

using Microsoft . Samples . Data . Services . Common;

namespace AzureTableStore_CRUD_Sample

{

public partial class PivotMainPage : PhoneApplicationPage,

IMainPage

{

//

// VIEW GUI Page variables

// private string CurrentViewModel_StateStore =...

"CurrentViewModel_Normal_App" ;

private string AppFeed_All_StateStore = "AppFeed_Apps " ; private bool isNewPagelnstance = false;

private int externalNavigateToCounter = 0 ;

private string storedRequester = "";

private AppHubMainInternalApps internalApps ;

// constructor

public PivotMainPage ( )

{

InitializeComponent ( ) ;

// -- 19 -- CreateAppFeed ( ) ;

}

public void CreateAppFeed ( )

{

IsNewPagelnstance = true;

if (App .Applnstances . Count == 0)

{

MessageBox . Show ( "CreateAppFeed : there are no...

Applnstances available - there might be... network problems ...? Stop the program!"); return;

}

App .Applnstances [0] .0_CurrentViewModel = null; for (int i = 0; i < App .Applnstances . Count ; i++)

{

App . CurrAppIndex = i ;

switch (App .Applnstances [i] .M_Model)

{

case "Patient":

App .Applnstances [i] .0_AppFeed_Pivot =...

new AppFeed<Patient , PivotMainPage> (this , i) ; this.Loaded += new RoutedEventHandler ( (App .App... Instances [i] .0_AppFeed_Pivot as AppFeed<... Patient, PivotMainPage>) . OnPage_Loaded) ;

break; case "Worklist" :

App .Applnstances [i] .0_AppFeed_Pivot =...

new AppFeed<Worklist , PivotMainPage> (this , ... i) ;

this.Loaded += new RoutedEventHandler ( (App .App...

Instances [i] .0_AppFeed_Pivot as AppFeed<...

Worklist, PivotMainPage>) . OnPage_Loaded) ; break; case "Context " :

App .Applnstances [i] .0_AppFeed_Pivot =...

new AppFeed<Context , PivotMainPage> (this , i) ; this.Loaded += new RoutedEventHandler ( (App .App...

Instances [i] .0_AppFeed_Pivot as AppFeed<... Context, PivotMainPage>) . OnPage_Loaded) ;

break; ase "Score" :

App .Applnstances [i] .0_AppFeed_Pivot =...

new AppFeed<Score , PivotMainPage> (this , this.Loaded += new RoutedEventHandler ( (App .App.

Instances [i] .0_AppFeed_Pivot as AppFeed<.

Score, PivotMainPage>) . OnPage_Loaded) ; break; case "Kalle":

App .Applnstances [i] .0_AppFeed_Pivot =...

new AppFeed<Kalle , PivotMainPage> (this , i) ; this.Loaded += new RoutedEventHandler ( (App .App...

Instances [i] .0_AppFeed_Pivot as AppFeed<... Kalle, PivotMainPage>) . OnPage_Loaded) ; break; case "Sampletable" : App .Applnstances [i] .0_AppFeed_Pivot =...

new AppFeed<Sampletable , PivotMainPage>... (this, i) ;

this.Loaded += new RoutedEventHandler ( (App .App...

Instances [i] .0_AppFeed_Pivot as AppFeed<... Sampletable , PivotMainPage>) . OnPage_Loaded) ; break; se "Blob" :

App .Applnstances [i] .0_AppFeed_Pivot =...

new AppFeed<Blob, PivotMainPage> (this , i) ; this.Loaded += new RoutedEventHandler ( (App .App...

Instances [i] .0_AppFeed_Pivot as AppFeed<...

Blob, PivotMainPage>) . OnPage_Loaded) ;

break; se "QueueMessage" :

App .Applnstances [i] .0_AppFeed_Pivot =...

new AppFeed<QueueMessage , PivotMainPage>... (this, i) ;

this.Loaded += new RoutedEventHandler ( (App .App...

Instances [i] .0_AppFeed_Pivot as AppFeed<... QueueMessage, PivotMainPage>) . OnPage_Loaded) break; se "File" :

App .Applnstances [i] .0_AppFeed_Pivot =...

new AppFeed<File , PivotMainPage> (this , i) ; this.Loaded += new RoutedEventHandler ( (App .App...

Instances [i] .0_AppFeed_Pivot as AppFeed<...

File, PivotMainPage>) . OnPage_Loaded) ;

break; se "Twitter" :

App .Applnstances [i] .0_AppFeed_Pivot =...

new AppFeed<Twitter, PivotMainPage> (this , i) this.Loaded += new RoutedEventHandler ( (App .App...

Instances [i] .0_AppFeed_Pivot as AppFeed<... Twitter, PivotMainPage>) . OnPage_Loaded) ; break; case "ApplHub" :

App .Applnstances [i] .0_AppFeed_Pivot =...

new AppFeed<ApplHub, PivotMainPage> (this , this. Loaded += new RoutedEventHandler ( (App .App.

Instances [i] .0_AppFeed_Pivot as AppFeed<.

ApplHub, PivotMainPage>) . OnPage_Loaded) ; break; case "ApplFeed" :

App .Applnstances [i] .0_AppFeed_Pivot =...

new AppFeed<ApplFeed, PivotMainPage>... (this, i) ;

this. Loaded += new RoutedEventHandler ( (App .App.

Instances [i] .0_AppFeed_Pivot as AppFeed<. ApplFeed, PivotMainPage>) . OnPage_Loaded) break; default :

MessageBox . Show ( "CreateAppFeed : wrong M_Model=.

" + App .Applnstances [i] .M_Model + " used. in AppConfig . xml , stop working!");

return;

-- 20 --

public void LoadAppFeedItems (bool createFlag)

{

if (App .Applnstances . Count == 0)

{

MessageBox . Show ( "AppConfig . xml not loaded

stop processing! !") ;

return; this . MainPivot . Items . Clear ( ) ; int cnt = App .Applnstances . Count ;

for (int i = 0 ; i < cnt; i++)

{

App . CurrAppIndex = i ;

switch (App .Applnstances [i] .M_Model)

{

case "Patient" :

(App .Applnstances [i] .0_AppFeed_Pivot as AppFeed<...

Patient, PivotMainPage>) . Loadltem (...

createFlag, i) ;

break; case "Worklist" :

(App .Applnstances [i] .0_AppFeed_Pivot as AppFeed<...

Worklist, PivotMainPage>) . Loadltem (...

createFlag, i) ;

break; case "Context " :

(App .Applnstances [i] .0_AppFeed_Pivot as AppFeed<...

Context, PivotMainPage>) . Loadltem (...

createFlag, i) ;

break; case "Score" :

(App .Applnstances [i] .0_AppFeed_Pivot as AppFeed<.

Score, PivotMainPage>) . Loadltem (... createFlag, i) ;

break; case "Kalle":

(App .Applnstances [i] .0_AppFeed_Pivot as AppFeed<...

Kalle, PivotMainPage>) . Loadltem (... createFlag, i) ; break; case "Sampletable" :

(Ap .Applnstances [i] .0_AppFeed_Pivot as AppFeed<.

Sampletable, PivotMainPage>) . Loadltem (... createFlag, i) ;

break; case "Blob" :

(App .Applnstances [i] .0_AppFeed_Pivot as AppFeed<.

Blob, PivotMainPage>) . Loadltem (...

createFlag, i) ;

break; case "QueueMessage" :

(App .Applnstances [i] .0_AppFeed_Pivot as AppFeed<.

QueueMessage, PivotMainPage>) . Loadltem (... createFlag, i) ;

break; case "File" :

(App .Applnstances [i] .0_AppFeed_Pivot as AppFeed<.

File, PivotMainPage>) . Loadltem (...

createFlag, i) ;

break; case "Twitter" :

(App .Applnstances [i] .0_AppFeed_Pivot as AppFeed<.

Twitter, PivotMainPage>) . Loadltem (... createFlag, i) ;

break; case "ApplHub" :

(App .Applnstances [i] .0_AppFeed_Pivot as AppFeed<.

ApplHub, PivotMainPage>) . Loadltem (... createFlag, i) ;

break; 4.5 r

case "ApplFeed" :

(App .Applnstances [i] .0_AppFeed_Pivot as AppFeed< ApplFeed, PivotMainPage>) . Loadltem (...

createFlag, i) ;

break; default :

MessageBox . Show ( "LoadAppFeedltems : wrong M_Model

" + App .Applnstances [i] .M_Model + " used... in AppConfig . xml , stop working ! " ) ;

return;

}

}

} public bool IsNewPagelnstance

{

get { return isNewPagelnstance ; }

set { isNewPagelnstance = value; }

} public void DoSetPageTransitionList ( )

{

// -- 17 -- PageTransitionList . Begin ( ) ;

} public void DoResetPageTransitionList ( )

{

// -- 22, 23 --

ResetPageTransitionList . Begin ( ) ;

} private void OnNavigatedToUs ( int Selectedlndex)

{

// -- 21 -- if (App.PageTransitions.ToUpper () == "ON"

App . PageTransitions . ToUpper ( ) != null] {

DoResetPageTransitionList ( ) ;

}

eise

{

this . RestorePage (0) ;

}

} protected override void OnNavigatedTo (Navigation...

EventArgs e)

{

if ( (e . IsNavigationlnitiator == false)

(e . NavigationMode == System. Windows .Naviga.. tion . NavigationMode . Back) )

{

if ( storedRequester == "ChooserAndLauncher" )

{

externalNavigateToCounter++ ;

if (externalNavigateToCounter < 3)

{

return;

}

eise

{

externalNavigateToCounter = 0 ;

storedRequester = " " ;

}

}

}

// -- 21 -- base . OnNavigatedTo (e) ; // base.

if (App. PageTransitions. ToUpper () == "ON"

App . PageTransitions . ToUpper ( ) != null)

{

DoResetPageTransitionList ( ) ; eise

{

this . RestorePage (0) ;

}

} protected override void OnNavigatedFrom (NavigationEvent.

Args e)

{

if ( storedRequester == "ChooserAndLauncher" )

{

return;

}

base . OnNavigatedFrom (e) ; if (e . NavigationMode != System . Windows . Nävi...

gation . NavigationMode . Back)

{

this . SaveGuiState ( ) ;

}

}

//

// VIEW GUI Page GoBack Handling

//

protected override void OnBackKeyPress (System. Component.

Model . CancelEventArgs e)

{

string req = GetApplicationState<string> (...

"CurrentRequest " ) ;

string rsp = GetApplicationState<string> (...

"CurrentResponse" ) ;

if (((req == "Add") || (req == "Update")) && ( (...

rsp == "Save") | | (rsp == "Cancel") | | (. rsp == "Delete") ) )

return;

CallPreviousAppPage (0) ;

e. Cancel = true; } public void RestorePage ( int Applndex)

{

// -- 25 -- if (this . IsNewPagelnstance)

{

if ((Applndex < 0) | | (App .Applnstances [App...

Index] .0_CurrentViewModel == null))

{

if (this . State . Count > 0)

{

this . RestoreGuiState ( ) ;

}

eise

{

this . LoadAppFeedltems (true) ;

}

}

}

this . IsNewPagelnstance = false;

(App .Applnstances [0] .0_CurrentViewModel as ViewModelBase..

) . OnNavigatedTo ( ) ;

(App .Applnstances [0] .0_CurrentViewModel as ViewModelBase.

) .ViewUpdateApplicationBarButtons (...

this .ApplicationBar, new[] { "logout" }... ) ; // this. }

//

// VIEW GUI Call Hierarchical Details Page Handling

// public void CallDetailPage ( )

{

if (App . avigationUri == "" | | App . avigationUri == null) {

(Ap .Applnstances [0] .0_CurrentViewModel as ViewModelBase..

) .ApplicationBarIconButton_...

UPDATE_ENTITY_Click() ;

}

eise

{

int selectedlndex= (App .Applnstances [0] .0_CurrentView...

Model as ViewModelBase) . GeneralSelected... Index;

CallNextAppPage (selectedlndex) ;

}

} //

// VIEW GUI App Navigation Logic (Hierarchical Next App-...

Hub Page Handling)

// public void CallNextAppPage ( int Selectedlndex)

{

storedRequester = " " ;

if (Selectedlndex < -1000)

{

storedRequester = "ChooserAndLauncher" ;

externalNavigateToCounter = 0 ;

switch (Selectedlndex)

{

case -1001: // send email

if (internalApps == null) internalApps =...

new AppHubMainlnternalApps ( ) ;

internalApps . takeSelectedListltemSelect...

ErnailAdrAndSendViaEmail () ;

break;

-1002: // send sms

(internalApps == null) internalApps

new AppHubMainlnternalApps ( ) ; internalApps . takeSelectedListltemSelect. PhoneNrAndSendViaSms ( ) ;

break;

return;

// the regulär App-Feed processing comes here int maxAppIndexAvail = App .Appslnstances . Count

App . PreviousApp = App . CurrentApp ;

switch (App .Applnstances [0] .V_NextAppNavUri)

{

case "Application 0": // ApplHub

App . CurrentApp = 0 ;

break; ase "Application

App . CurrentApp

break; ase "Application

App . CurrentApp

break; ase "Application // Worklist

App . CurrentApp

break; ase "Application // Context

App . CurrentApp

break; case "Application 5": // Iso-FileViewer

App . CurrentApp = 5 ;

break; case "Application 6": // Azure-Blob-Viewer

App . CurrentApp = 6 ;

break; case "Application 7": // Azure-Queue-Viewer

App . CurrentApp = 7 ;

break; case "Application 8": // ???

App . CurrentApp = 0;

break; case "Application 9":

NavigateToViewingApp ( ) ;

return; default :

if ( (App .Applnstances [0] .V_NextAppNavUri == "*'

&& (App . CurrentApp == 0) && (...

Selectedlndex == -1))

App . CurrentApp = 2 ;

eise

App . CurrentApp = Selectedlndex + 1;

break;

}

CreateAppFeed ( ) ;

OnNavigatedToUs (Selectedlndex) ;

} public void CallPreviousAppPage ( int Selectedlndex) {

int maxAppIndexAvail = App .Appslnstances . Count - 1; App . PreviousApp = App . CurrentApp ;

switch (App . CurrentApp)

{

case 0: // ApplHub

App . CurrentApp = 0 ;

break; r

52

case 1: // Twitter

Ap . CurrentApp = 0 ;

break; case 2 : // Patient

App . CurrentApp = 0 ;

break; case 3: // Worklist --> goto Patient

App . CurrentApp = 2 ; ! !

break; case 4: // Context --> goto Worklist App . CurrentApp = 3;

break; case 5: // Iso-FileViewer

App . CurrentApp = 0 ;

break; case 6 : // Azure Blob-Viewer

App . CurrentApp = 0 ; ! !

break; case 7: // Azure Queue-Viewer

App . CurrentApp = 0;

break; case 8: // ????

App . CurrentApp = 0 ;

break; case 9: // Viewing-App

App . CurrentApp = 0 ;

break; default : Ap . CurrentApp = 0 ;

break;

}

CreateAppFeed ( ) ;

OnNavigatedToUs (Selectedlndex) ;

} private void NavigateToViewingApp ( )

{

#if _VIEWING

try

{

string currentltemType = (App.App...

Instances[0] .0_CurrentViewModel as

ViewModelBase) . GetltemTypeFrom...

Selectedlndex ( ) ;

if (currentltemType == "File")

{

var c = (App .Applnstances [0] .0_CurrentView...

Model as ViewModelBase) . GetExternalEntity..

FromSelectedIndex<File> ( ) ;

if ( (c as Context) != default (Context) )

{

NavigationService . Navigate (App . PrepareNavigate...

ToViewingApps ("/ViewsViewing/Viewing...

Page . xaml " , (Context) c, " " ) ) ;

}

}

eise if (currentltemType == "Blob")

{

var c = (App .Applnstances [0] .0_CurrentView...

Model as ViewModelBase) .GetExternalEntity.. FromSelectedIndex<Blob> ( ) ;

if ( (c as string) != "")

{

NavigationService . Navigate (App . PrepareNavigate ...

ToViewingApps ( " /ViewsViewing/Viewing...

Page. xaml", null, c as string)); }

}

eise if (currentltemType == "Message")

{

var c = (App .Applnstances [0] .0_CurrentView...

Model as ViewModelBase) . GetExternalEntity... FromSelectedIndex<QueueMessage> () ; if ( (c as string) != "")

{

NavigationService . Navigate (App . PrepareNavigate...

ToViewingApps ( " /ViewsViewing/Viewing...

Page . xaml " , null, c as string));

}

}

eise if (currentltemType == "Twitter")

{

var c = (App .Applnstances [0] .0_CurrentView...

Model as ViewModelBase) .GetExternalEntity.. FromSelectedIndex<Twitter> ( ) ;

if ( (c as string) ! = " " )

{

NavigationService . Navigate (App . PrepareNavigate...

ToViewingApps ( " /ViewsViewing/Viewing...

Page . xaml " , null, c as string));

}

}

eise

NavigationService . Navigate (App . PrepareNavigate...

ToViewingApps ( " /ViewsViewing/Viewing...

Page, xaml", (App .Applnstances [0] .0_Current..

ViewModel as ListViewModel<Context>...

) .Selectedltem, "") ) ;

}

catch

{

// do nothing here

}

#endif rivate void NavigateToAp ( int Selectedlndex) f (App . DesignerMode == null)

App . SetDefaultAppSettings ( ) ;

f (App . DesignerMode == null | | ...

App.DesignerMode.ToUpper () == "NORMAL App . DesignerMode . ToUpper ( ) == "")

NavigationService . Navigate (new Uri ( " /Views/...

NormalMainPage .xaml?selectedltem=" +... Selectedlndex, UriKind . Relative) ) ; return; f (App.DesignerMode.ToUpper () == "PIVOT")

NavigationService . Navigate (new Uri ( " /Views/...

PivotMainPage .xaml?selectedltem=" +... Selectedlndex, UriKind . Relative) ) ; return; f (App.DesignerMode.ToUpper () == "PANORAMA")

NavigationService . Navigate (new Uri ( " /Views/...

PanoramaMainPage . xaml?selectedltem= " Selectedlndex, UriKind . Relative) ) ; return;

}

//

// VIEW GUI save/restore State

// public void SaveGuiState ( )

{

SetApplicationState (AppFeed_All_StateStore , .

App .Applnstances) ; }

// neu: from AppFeed.cs

public void RestoreGuiState ( )

{

App .Applnstances = GetApplicationState<List<Appl...

FeedData>> (AppFeed_All_StateStore) ;

} //

// VIEW Application State Handling

// public void SetApplicationState ( string key, object...

value)

{

if (PhoneApplicationService . Current . State . Contains...

Key (key) )

{

PhoneApplicationService . Current . State . Remove (key) ;

}

PhoneApplicationService . Current . State .Add (key, ...

value) ;

} public F GetApplicationState<F> (string key)

{

if ( ! PhoneApplicationService . Current . State . Contains...

Key (key) )

{

return default (F);

} return (F) PhoneApplicationService . Current . State [key] ; } public void RemoveApplicationState ( string key)

{ If (PhoneApplicationService . Current . State . Contams...

Key (key) )

{

PhoneApplicationService . Current . State . Remove (key) ;

}

}

//

// VIEW GUI Page Storyboard Transition Handling

// public void OnPageTransitionList_Completed (obj ect...

sender, EventArgs e)

{

// -- 18 -- this . CallDetailPage ( ) ;

} public void OnResetPageTransitionList_Completed (...

obj ect sender, EventArgs e)

{

// -- 24 -- this .RestorePage (0) ;

}

Anlage 3: Ein Beispiel -Code für den Speichertreiber 100 (Di rect Storage Adapter)

#define UPLOAD

#define _KeyImageWatermarkUsed

using System;

using System . Collections .Generic;

using System. Linq;

using System. Net;

using System . Windows ;

using System . Windows . Controls ;

using System . Windows . Documents ;

using System . Windows . Input ;

using System . Windows . Media ;

using System. Windows .Media .Animation;

using System . Windows . Shapes ;

using System . Windows .Navigation;

using Microsoft . Phone . Controls ;

using Microsoft . Phone . Shell ;

using System . Text . RegularExpressions ;

using System . Windows . Interop ;

using System . Windows . Media . Imaging ;

using System . Windows . Resources ;

using System . Diagnostics ;

using System . Threading ;

using System. Xml;

using System. Xml . Linq;

using System . ComponentModel ;

using System. Globalization;

#if UPLOAD

using SLBlobUploader . Code ;

using SLBlobUploader . Code .Abstract ;

using SLBlobUploader . Code . Infrastructure ;

using SLBlobUploader . Code . StorageClient ;

using System.10;

using System.10. IsolatedStorage ;

using System . Collections ; using System . Windows . Threading ;

#endif namespace AzureTableStore_CRUD_Sample

{

public class UploadKeylmage : INotifyPropertyChanged

{

// State indication to GUI progressbar (ViewModel)

private string message;

private bool isWorking = false;

// Uploader parameters

private const long MaxFileSizeKb = Constants . MaxFileSizeKB ; private const string UploadButtonText = "Upload" ;

private const string CancelButtonText = "Cancel";

private const long BytesPerKb = 1024;

private List<UserFile> files = null;

private string sasUrl = string . Empty;

private string timeOutSeconds = string . Empty;

private bool sasExpired = false;

private DateTime operationStartTime ;

private UserFile userFile = null;

// contextfolder object in use

Context selectedContextObj ect ;

// sync to main thread

private Dispatcher Dispatcher; // State

private String State = "Idle";

private string KeylmagefileNameWithoutExt = "";

private string _TimeOutSeconds ;

private bool _SasExpired;

private string _SasUrl ;

IsolatedStorageFileStream myThumbnailFileStream;

IsolatedStorageFileStream myKeylmageFileStream;

private string IsoKeylmageFileName = ""; private string IsoKeylmageThumbnailFileName = " " ;

private string CloudPathName = " " ;

// owner

ViewingPage owner;

//

// Constructor

// public UploadKeylmage ( )

{

} public UploadKeylmage (ViewingPage parent)

{

owner = parent ;

TextBox tb = new TextBox ( ) ;

private void ClearNotificationMesssageArea ( )

{

this. Message = " " ;

this . IsWorking = false;

} //

// 0) API-Call - SAVE screen captured "Keyimages" to...

cloud storage

//

public string DoKeylmaUpload (Context SelContextFolder...

Object, WriteableBitmap KeylmaBitmap, ... string mTimeOutSeconds , ...

bool mSasExpired, string mSasUrl)

{

if (State == "Idle")

{

State = "Blocked part 1";

UploadDoNotification ( ) ;

this . selectedContextObj ect = SelContextFolderObj ect ; this ._TimeOutSeconds = mTimeOutSeconds;

this ._SasExpired = mSasExpired;

this._SasUrl = mSasUrl ;

this . IsoKeylmageFileName = "tempKeyIma.jpg";

this . IsoKeylmageThumbnailFileName =...

" tempKeylmaThumbnail .jpg" ;

saveKeylmagesInlsoStore (KeylmaBitmap) ;

var myStore = IsolatedStorageFile . GetUserStore...

ForApplication ( ) ;

this . myThumbnailFileStream = myStore . OpenFile ( IsoKeylmage...

ThumbnailFileName , FileMode . Open, ...

FileAccess . ReadWrite) ; this . KeylmagefileNameWithoutExt = storeKeylmageThumbnailln- ContextFolderBlobStore (myThumbnailFileStream,

mTimeOutSeconds, mSasExpired, mSasUrl) ;

return ( " Idle" ) ;

}

return State;

}

private void UploaderDoneNotiflcation ( string msg)

{

if (State == "Blocked part 1")

{

this . myThumbnailFileStream . Close ( ) ;

var myStore = IsolatedStorageFile . GetUser...

StoreForApplication ( ) ; this . myKeylmageFileStream = myStore . OpenFile (this . IsoKey...

ImageFileName , FileMode . Open, ...

FileAccess . ReadWrite) ;

storeKeylmagelnContextFolderBlobStore (this . Keylmagefile...

NameWithoutExt , myKeylmageFileStream, this ._TimeOutSeconds , this ._Sas...

Expired, this . SasUrl) ; State = "Blocked part 2";

#if early

UploadDoneNotification (msg) ; storeKeylmagelnContextFolderT- ableStore (this . selected...

ContextObj ect , this . CloudPathName , ... this . KeylmagefileNameWithoutExt) ;

// filenames of destination in cloud! this . myKeylmageFileStream. Close ( ) ;

State = "Idle";

/ * S S S S S S S S S S UploaderDoneNotification only called once ! ! ! try to evaluate why and then reenable this path

again! ! Sc Sc Sc Sc Sc Sc * /

#else

} eise if (State == "Blocked part 2")

{

doTableEntryAndUploadDoneNotification (msg) ;

}

eise

{

MessageBox . Show ( "Uploaded Keyimage ended abnormal!");

}

#endif

} private void TableEntryAndUploadDoneNotification ( string msg) {

storeKeylmagelnContextFolderTableStore (this . selected...

ContextObj ect , this .CloudPathName,... this . KeylmagefileNameWithoutExt) ;

this .myKeylmageFileStream. Close ( ) ;

UploadDoneNotification (msg) ;

State = "Idle";

}

private delegate void doUploadDoneNotificationDelegate (... string msg) ; private void doUploadDoneNotification ( string msg)

{

bool isDispatcherThread = this . Dispatcher . CheckAccess () ; if (isDispatcherThread == true)

{

UploadDoneNotification (msg) ;

}

eise

{

this . Dispatcher . Beginlnvoke (new doUploadDoneNotification..

Delegate (UploadDoneNotification) , .. msg) ;

private delegate void doTableEntryAndUploadDone...

NotificationDelegate (string msg); private void doTableEntrvAndUploadDoneNotification (...

string msg)

{

bool isDispatcherThread = this . Dispatcher . CheckAccess () ; if (isDispatcherThread == true)

{

TableEntryAndUploadDoneNotification (msg) ;

}

eise

{

this . Dispatcher . Beginlnvoke (new doTableEntryAndUploadDone.

NotificationDelegate (TableEntry... AndUploadDoneNotification) , msg) ; }

}

// // 1) Save stored iso Thumbnail-image as jpeg in "uploads"...

Container of azure blob störe

//

private string storeKeylmageThumbnaillnContext...

FolderBlobStore (Stream Video_Stream, ... string mTimeOutSeconds , bool mSas... Expired, string mSasUrl)

{

try

{

string pathName = " " ;

DateTime CurrentTime = System . DateTime . Now;

string fileNameWithoutExt = "keylma_" +

String . Format ("{ 0 : s} " , CurrentTime) + "_" + Guid . NewGuid ( ) ; string fileNameAndExt = fileNameWithoutExt +...

"_thumbnail .jpg" ;

using (Stream stream = new MemoryStream ( ) )

{

stream. Position = 0 ;

UploadStream (pathName , fileNameAndExt , Video_Stream, ...

mTimeOutSeconds, mSasExpired, mSasUrl) ;

}

return fileNameWithoutExt ;

}

catch

{

string IblMessage = "Keyimage-Thumbnail cannot be saved,...

lease timeout?";

UploaderDoneNotification (IblMessage) ;

return (null) ;

}

}

//

// 2) Save stored iso keylmage-image as jpeg in "uploads"...

Container of azure blob störe // private void storeKeylmagelnContextFolderBlobStore (...

string fileNameWithoutExt , Stream key.. Ima_Stream, string mTimeOutSeconds , ... bool mSasExpired, string mSasUrl)

{

try

{

string pathName = " " ;

string fileName = fileNameWithoutExt + ".jpg

using (Stream stream = new MemoryStream ( ) )

{

stream. Position = 0 ;

UploadStream (pathName , fileName, keyIma_Stream, mTimeOut...

Seconds, mSasExpired, mSasUrl) ;

}

}

catch

{

string lblMessage = "Keyimage cannot be saved, lease...

timeout? " ;

UploaderDoneNotification (lblMessage) ;

}

}

//

// 3) Save stored keylmage as tweet in "contectfolder"...

table of azure table störe

//

private void storeKeylmagelnContextFolderTableStore (...

Context selectedContextObj ect , ...

string path, string filename)

{

Context cn = (Context) selectedContextObj ect . DeepCopy () ; cn . PartitionKey = selectedContextObj ect . PartitionKey;

cn.RowKey = System . Guid . NewGuid (). ToString () ; cn . ServerBaseUri = "htt : //singapore4. lo . core . Windows . net " ; if (path == "")

cn.DZInstDataRelPath = "/" + "uploads" + "/" + filename;

eise

cn.DZInstDataRelPath = "/" + "uploads" + "/" + path + "/" + filename ;

cn.Thumb = cn . ServerBaseUri + cn.DZInstDataRelPath +

"_thumbnail .jpg" ;

cn.DZInstDataRelPath += ".jpg"; // trick 5

cn.DZMetaDataRelPath = "jpeg";

cn.DZMHDDataRelPath = "None";

cn.ARegion = "Keyimage";

cn.StorageFormat = "JPEG";

cn . StorageHostVolumeSeries2dAnz = "1";

if ( ( (App .Applnstances [0] .0_CurrentViewModel as Listview...

Model<Context>) . Driver . Item...

Type == "Twitter") || ((App.App...

Instances [0] .0_CurrentViewModel as ...

ListViewModel<Context>) . Driver . Item...

Type == "Unknown"))

{

return;

}

(App .Applnstances [0] .0_CurrentViewModel as ListView- Model<Context>) .AddEntity (cn) ;

}

//

private void saveKeylmagesInlsoStore (WriteableBitmap ...

Keylma_bitmap)

{

try

{

#if _KeyImageWatermarkUsed

StreamResourcelnfo streamlnfo = Application . GetResource.

Stream(new Uri ( " /AzureTable... Store_CRUD_Sample ; component/images/...

KeylmageAsRedWhite .png" , UriKind...

. Relative) ) ;

Stream EmbeddedResourceStream = streamlnfo . Stream;

if (EmbeddedResourceStream != null)

{

Bitmapimage bitMapImage = new Bitmapimage () ;

bitMapImage . SetSource (EmbeddedResourceStream) ;

WriteableBitmap bitmap = new WriteableBitmap (bitMapImage) ; Keylma_bitmap = ApplyKeylmageWithWatermark (Keylma_bitmap, ...

bitmap) ; bitmap . Clear ( ) ;

bitmap = null;

EmbeddedResourceStream. Close ( ) ;

EmbeddedResourceStream. Dispose () ;

EmbeddedResourceStream = null;

bitMapImage = null;

}

#endif

using ( IsolatedStorageFile isolatedStore = IsolatedStorage...

File . GetUserStoreForApplication ( ) ) {

if (isolatedStore . FileExists (this . IsoKeylmageFileName) ) {

isolatedStore . DeleteFile (this . IsoKeylmageFileName) ;

}

if (isolatedStore . FileExists (this . IsoKeylmageThumbnail...

FileName) )

{

isolatedStore . DeleteFile (this . IsoKeylmageThumbnailFileName) ; }

using (MemoryStream streamKeylma = new MemoryStream ( ) )

{

JPGUtil . EncodeJpg (Keylma_bitmap, streamKeylma) ;

streamKeylma . Position = 0; using ( IsolatedStorageFileStream stream = new Isolated...

StorageFileStream (this . IsoKeylmageFile. Name, FileMode . Create, isolatedStore) ) {

streamKeylma . Position = 0 ;

streamKeylma . CopyTo (stream) ;

stream. Close ( ) ;

}

}

using (MemoryStream streamThumbnail = new MemoryStream ( ) ) {

Keylma_bitma . SaveJpeg ( streamThumbnail , 120, 120, 0, 80); streamThumbnail . Position = 0 ;

using (IsolatedStorageFileStream stream = new

IsolatedStorageFileStream (this . IsoKeylmageThumbnailFile...

Name, FileMode . Create, isolatedStore))

{

streamThumbnail . Position = 0 ;

streamThumbnail . CopyTo ( stream) ;

stream. Close ( ) ;

}

}

isolatedStore . Dispose ( ) ;

}

}

catch (IsolatedStorageException e)

{

string lblMessage = "Keyimage cannot be saved in ISO störe.

temporarily: " + e. Message ;

UploaderDoneNotification (lblMessage) ;

}

Keylma_bitmap . Clear ( ) ;

Keylma_bitmap = null;

}

#if _KeyImageWatermarkUsed

public WriteableBitmap ApplyKeylmageWith... Watermark (WriteableBitmap input , ...

WriteableBitmap Watermark)

{

var w = Watermark . PixelWidth;

var h = Watermark . PixelHeight ;

var result = input . Clone () ;

var position = new Rect ( input . PixelWidth - w - 40,...

input . PixelHeight - h - 40, w, h) ; result . Blit (position, Watermark, new Rect(0, 0, w, h) ) ; return result;

}

#endif private void old_saveStreamAsIsoFile (Stream str,...

string isoFileName)

{

try

{

using ( IsolatedStorageFile isStore = IsolatedStorage...

File. GetUserStoreForApplication () )

{

if (isStore . FileExists (isoFileName) )

{

isStore .DeleteFile (isoFileName) ;

}

using ( IsolatedStorageFileStream targetStream =...

isStore . OpenFile (isoFileName , File... Mode . CreateNew, FileAccess . Write) )

{

byte[] readBuffer = new byte[4096];

int bytesRead = -1;

while ((bytesRead = str . Read (readBuffer, 0, readBuffer . Length) ) > 0)

{

targetStream. Write (readBuffer, 0, bytesRead);

}

}

} }

catch

{

string lblMessage = "Keyimage, error saving " + isoFile...

Name + " in ISO störe temporarily!";

UploaderDoneNotification (lblMessage) ;

}

} private void saveStreamAsIsoFile (Stream incoming...

Stream, string isoFileName)

{

try

{

using ( IsolatedStorageFile isolatedStore = IsolatedStorage.

File . GetUserStoreForApplication ( ) )

{

// Delete file if it exists

if (isolatedStore . FileExists (isoFileName) )

{

isolatedStore .DeleteFile (isoFileName) ;

}

using (var stream = new IsolatedStorageFileStream ( iso...

FileName, FileMode . CreateNew, ...

isolatedStore) )

{

incommingStream . Position = 0 ;

incommingStream . CopyTo (stream) ;

}

}

}

catch (IsolatedStorageException ise)

{

string lblMessage = "Keyimage, error saving " + isoFile...

Name + " in ISO störe temporarily!";

UploaderDoneNotification (lblMessage) ;

}

} private void UploadStream ( string pnam, string fnam,...

Stream stream, string mTimeOutSeconds,... bool mSasExpired, string mSasUrl)

{

string lblMessage = "undefined" ;

bool initOk = initBlobUploader (mTimeOutSeconds , mSas...

Expired, mSasUrl) ;

if (initOk)

{

UploadStreamToCloudFile (pnam, fnam, stream);

}

eise

{

lblMessage = "File not saved, init error, lease timeout?"; UploaderDoneNotification (lblMessage) ;

}

} public bool initBlobUploader ( string mTimeOutSeconds,...

bool mSasExpired, string mSasUrl)

{

timeOutSeconds = mTimeOutSeconds;

sasExpired = mSasExpired;

sasUrl = mSasUrl ;

if (sasExpired)

{

if (this .userFile != null)

{

this .userFile . CancelUpload ( ) ;

}

return false;

}

return true;

} private bool UploadStreamToCloudFile ( string pnam,...

string fnam, Stream stream)

{

string lblMessage = "undefined" ;

if (this.files == null)

{

this.files = new List<UserFile> ( ) ;

}

this .userFile = new UserFile ();

this . userFile . PathName = pnam;

this . userFile . FileName = fnam;

this . userFile . FileStream = stream;

this .userFile . StreamBytes = stream. Length;

this .userFile . UIDispatcher = this . Dispatcher ;

this .userFile . UploadContainerUrl = new Uri (this . sasUrl) ; this . userFile . UploadCompletedEvent += new EventHan- dler<UploadCompletedEventArgs> (this . OnUpload...

Completed) ;

if ( (this .userFile . FileStream. Length / BytesPerKb)...

<= MaxFileSizeKb && this.user...

File . FileStream . Length > 0)

{

this . files .Add (this .userFile) ;

}

eise

{

lblMessage = this .userFile . FileStream. Length > 0 ?

string. Format ( " IllegalMaxFileSize : {0} in KB", MaxFile...

SizeKb / BytesPerKb) : string . Format (... "IllegalMinFileSize : {0} in KB",...

MaxFileSizeKb / 1024) ;

MessageBox. Show ("UploadStreamToCloudFile: " + lblMessage); return false;

}

this . operationStartTime = DateTime .Now;

if (this.files != null)

{

foreach (var file in this.files) {

file .Upload (string . Empty) ;

}

}

eise

{

lblMessage = "no files to transfer ! " ;

MessageBox. Show ("UploadStreamToCloudFile: " + lblMessage); return false;

}

this. files = null;

lblMessage = "done";

return true;

}

private bool CancelUpload ( )

{

string lblMessage = "done";

this .userFile . CancelUpload ( ) ;

this. files = null;

MessageBox. Show ("CancelUpload: " + lblMessage);

return true;

} private void OnUploadCompleted (obj ect sender, Upload...

CompletedEventArgs e)

{

string lblMessage = "undefined" ;

{

if (this .userFile != null)

{

switch (e.Reason)

{

case Constants . UploadCompleteReason . UploadCommitted :

var duration = DateTime . ow - this . operationStartTime ;

var fileSizelnKB = (float) this .userFile . StreamBytes / Bytes...

PerKb;

var fileSizeMessage = fileSizelnKB > BytesPerKb ? string...

. Concat (( (float) fileSizelnKB / Bytes... PerK ) .ToString () , " MB") : string . Concat ( fileSizelnKB . ToString ( ) , " KB");

lblMessage = string . Format ( "upload ok in {0} seconds",...

duration . TotalSeconds) ;

this .userFile = null;

UploaderDoneNotification (lblMessage) ;

break;

case Constants . UploadCompleteReason . ErrorOccurred :

lblMessage = string . Format ( "upload error: {θ}", e. Error...

Message) ;

this .userFile = null;

UploaderDoneNotification ( "Upload Finished: " + lblMessage); break;

case Constants . UploadCompleteReason . UserCancelled :

if ( ! sasExpired)

{

lblMessage = string . Format ( "upload cancelled");

}

this .userFile = null;

UploaderDoneNotification ( "Upload Finished: " + lblMessage); break;

default :

lblMessage = string . Format ( "upload : unknown error occured"); this .userFile = null;

UploaderDoneNotification ( "Upload Finished: " + lblMessage); break;

}

}

}

}

#endif

}

} Bezugszeichenliste

1 System

2, 2 1 (medizinische) Einrichtung

3 Modalität

4 Computertomograph

5 C-Bogengerät

6 Magnetresonanztomograph

7 (Steuer- und Auswerte- ) Rechner

8 Device

9 Personal -Computer

10 Bildschirm

11 Tablet-Computer

12 Smartphone

13 Public Cloud

14 (Datenübertragungs- ) etz

15 Intranet

16 Internet

17 Firewall

18, 18 1 Subscription

19 Cloud Storage

20 App Store

21 Cloud-Compute-Service

22 (Patient- ) Hub

23 (Worklist-)Hub

24 (Context-)Hub

25 (Image- ) Hub

26 Table-Storage

27 Tweet

28 Blob-Storage

29 URI

31 Applikation

32 Applikation

33 Applikation

34 Applikation

35 Feed

36 Seite

37 (graphische) Benutzeroberfläche r

/ 6

40 Kopfzeile

41 Suchfeld

42 Anzeigefeld

43 Befehlsleiste

44 Eingabezeile

45 Schaltfläche

46 Vorauswahlfeld

47 Bild

48 Schlagwort

49 Schaltfläche

50 Schaltfläche

51 Rahmen

52 Seite

60 Kopfzeile

61 Überschrift

62 Anzeigefeld

63 Befehlszeile

64 Schaltfläche

65 Schaltfläche

67 Feldnamen

68 Feldinhalt

69 Seite

70 Kopfzeile

71 Überschrift

72 Anzeigefeld

73 Befehlszeile

74 Schaltfläche

80 Menüzeile

81 Rahmen

92 (2D-Viewing- ) Modul

93 (3D-Viewing- ) Modul

94 (2D-Viewing- ) Applikation

95 (3D-Viewing-) Applikation 100 Speichertreiber P Patientendatensatz w Aufgabe

c Kontextdatensatz

B Bilddatensatz

V Ansicht

Q Suchanfrage

R Anfrage

K Keyimage