Dieses Kapitel enthält folgende Abschnitte:
Sie können die Scriptsprache PHP für die textbasierte Berichterstellung verwenden. Das Muster erstellt ein Beispiel für eine PHP-Berichtsschablone mit der Bezeichnung ADT_A01.php. Erstellen Sie zusätzliche PHP-Scripts, um Berichte für andere HL7-Nachrichtentypen zu generieren.
Die Unterstützung für die Scriptsprache PHP ist auf allen Betriebssystemen verfügbar, auf denen WebSphere Message Broker unterstützt wird. Für die Berichterstellung ist eine umfangreiche Gruppe von PHP-Funktionen verfügbar. Zu diesen Funktionen gehört der Zugriff auf benannte Elemente in der HL7-Nachricht.
Weitere Informationen zu den PHP-Funktionen, die von WebSphere Message Broker unterstützt werden, finden Sie im Abschnitt "PHP extensions" (PHP-Erweiterungen) in der Dokumentation zu WebSphere Message Broker.
Weitere Informationen zu der Scriptsprache PHP finden Sie auf der Website PHP: Hypertext Preprocessor.
Die PHP-Beispiele in diesem Abschnitt verwenden folgende HL7 ADT A01-Nachricht:
MSH|^~\&|ADT1|MCM|LABADT|MCM|198808181126|SECURITY|ADT^A01^ADT_A01|MSG00001- |P| 2.5 EVN|A01|198808181123 PID|1||PATID1234^5^M11^ADT1^MR^MCM~123456789^^^USSSA^SS||JONES^WILLIAM^A^III NK1|1|JONES^BARBARA^K|WI^WIFE||||NK^NEXT OF KIN NK1|2|JONES^MARK^K|SO^SON||||NK^NEXT OF KIN NK1|3|JONES^SOPHIE^K|DA^DAUGHTER||||NK^NEXT OF KIN PV1|1|I|2000^2012^01||||004777^LEBAUER^SIDNEY^J.|||SUR||||ADM|A0
Sie können die Musterinstanz anpassen, indem Sie den Vorlagen zur Berichterstellung (Scripts) PHP-Markup hinzufügen. PHP-Scripts erfordern häufig Zugriff auf Daten in den HL7-Nachrichten. Auf Daten in Nachrichten wird mithilfe einer Pfadsyntax zugegriffen. Es gibt zwei Möglichkeiten, den Pfad zu Elementen und Feldern in HL7-Nachrichten zu ermitteln. Die erste Methode ist die Verwendung eines Debuggers und die zweite Methode ist die Verwendung der Nachrichtengruppe HL7v25P.
Die erste Methode zur Berechnung eines Pfads ist es, sich die tatsächlichen HL7-Nachrichten beim Durchlaufen Ihres Brokers anzuschauen. Legen Sie einen Unterbrechungspunkt im Nachrichtenfluss des Prozessors fest und senden Sie eine HL7-Nachricht an Ihren Broker:
Im folgenden Screenshot wird eine HL7-Nachricht in der Ansicht 'Variablen' im Broker Toolkit gezeigt:
Der Pfad zum hervorgehobenen Element im Screenshot ist $input_assembly->XMLNSC->HL7->PID->{'PID.3.PatientIdentifierList'}->{'CX.1'}. Die Pfade in der Nachrichtengruppe HL7v25P enthalten Punkte (z. B. PID.3.PatientIdentifierList) und müssen deshalb in Klammern gesetzt werden, damit sie von der PHP-Laufzeit richtig interpretiert werden.
HL7-Nachrichten werden immer Ihren Berichtsprozeduren in der Nachrichtendomäne XMLNSC vorgelegt.
Die zweite Methode zum Berechnen von Pfaden ist die Überprüfung der Nachrichtengruppe HL7v25P und das Ermitteln der Pfade zu Elementen und Feldern auf Basis des Nachrichtenmodells:
Die Pfade in beiden Methoden sind gleich, der einzige Unterschied ist, ob Sie in den tatsächlichen HL7-Nachrichten oder im HL7-Nachrichtenmodell starten.
In den beiden Spalten ganz rechts im Screenshot der Nachrichtengruppe wird die minimale und maximale Anzahl des Auftretens eines Element oder Felds in einer HL7-Nachricht gezeigt. In Ihren PHP-Scripts muss berücksichtigt werden, ob ein Element oder Feld vorhanden sein muss (Werte 1 und 1), vorhanden sein kann (Werte 0 und 1), sich wiederholen kann (Werte 0 und -1) oder sich mindestens einmal wiederholen wird (Werte 1 und -1). Diese Möglichkeiten sind in HL7-Nachrichten einheitlich.
In den folgenden Codebeispielen wird gezeigt, wie Sie allgemeine Tasks in PHP-Scripts implementieren können.
Für Ihre PHP-Scripts ist eine umfangreiche Gruppe integrierter Funktionen verfügbar.
<?php date_default_timezone_set('UTC'); echo date('n/j/Y'); ?>
Dieser Ausschnitt erzeugt im Bericht folgende Ausgabe:
12/9/2011
Weitere Informationen zu den PHP-Funktionen, die von WebSphere Message Broker unterstützt werden, finden Sie im Abschnitt "PHP extensions" (PHP-Erweiterungen) in der Dokumentation zu WebSphere Message Broker (die PHP-Laufzeit in Message Broker unterstützt eine Teilmenge der Erweiterungen, die von der Open-Source-PHP-Implementierung implementiert wurden).
Auf Umgebungsvariablen wird über die superglobale PHP-Variable $_ENV zugegriffen.
<?php echo $_ENV['MB_WORK_PATH'].'\n'; echo $_ENV['MB_BROKER_NAME'].'\n'; echo $_ENV['MB_EXECUTION_GROUP_NAME'].'\n'; echo $_ENV['MB_NODE_NAME'].'\n'; echo $_ENV['MB_MESSAGE_FLOW_NAME'].'\n'; ?>
Dieser Ausschnitt erzeugt im Bericht folgende Ausgabe:
C:\Dokumente und Einstellungen\All Users\Application Data\IBM\MQSI HEALTHCARE Healthcare PHP Compute healthcare.ReportProcessor
Auf Elemente und Felder in HL7-Nachrichten kann mithilfe von Pfaden zugegriffen werden.
<?php echo $input_assembly->XMLNSC->HL7->MSH->{'MSH.9.MessageType'}->{'MSG.1'}; ?>
Dieser Ausschnitt erzeugt im Bericht folgende Ausgabe:
ADT
PHP stellt die Funktion is_null bereit, um zu prüfen, ob ein Element oder ein Feld fehlt.
<?php $result = is_null($input_assembly->XMLNSC->HL7->XYZ); echo var_dump($result); ?>
Dieser Ausschnitt erzeugt im Bericht folgende Ausgabe:
bool(true)
Wiederholelemente können mithilfe der PHP-Anweisung foreach iteriert werden.
<?php foreach ($input_assembly->XMLNSC->HL7->NK1 as $kin) { echo var_dump($kin); } ?>
Dieser Ausschnitt erzeugt im Bericht folgende Ausgabe:
object(MbsElement)#26 (4) { ["NK1.1.SetIDNK1"]=> string(1) "1" ["NK1.2.Name"]=> NULL ["NK1.3.Relationship"]=> NULL ["NK1.7.ContactRole"]=> NULL } object(MbsElement)#27 (4) { ["NK1.1.SetIDNK1"]=> string(1) "2" ["NK1.2.Name"]=> NULL ["NK1.3.Relationship"]=> NULL ["NK1.7.ContactRole"]=> NULL } object(MbsElement)#28 (4) { ["NK1.1.SetIDNK1"]=> string(1) "3" ["NK1.2.Name"]=> NULL ["NK1.3.Relationship"]=> NULL ["NK1.7.ContactRole"]=> NULL }
Die NULL-Werte in der Ausgabe von var_dump sind erwartet, obwohl diese Elemente Daten enthalten.
Auf Elemente und Felder in HL7-Nachrichten kann in Wiederholelementen mithilfe der Variablen foreach zugegriffen werden:
<?php foreach ($input_assembly->XMLNSC->HL7->NK1 as $kin) { echo var_dump($kin->{'NK1.2.Name'}->{'XPN.2'}); } ?>
Dieser Ausschnitt erzeugt im Bericht folgende Ausgabe:
string(7) "BARBARA" string(4) "MARK" string(6) "SOPHIE"
Den Benutzern des Musters stehen sechs hauptsächliche untergeordnete Nachrichtenflüsse für die Anpassung zur Verfügung.
Der Nachrichtenfluss 'Empfänger' ruft den untergeordneten Nachrichtenfluss OnReceive auf, wenn eine HL7-Nachricht empfangen und überprüft wurde.
Der standardmäßige untergeordnete Nachrichtenfluss OnReceive hat keine Auswirkung auf die Nachricht, kann mit diesem Anpassungspunkt aber Daten aus den Quellen standardisieren, damit Ihre Anforderungen erfüllt werden. Beispielsweise verwenden Sie das Standarddatum im Format JJJJ-MM-TT , aber die Quelle verwendet ein anderes Datumsformat. Mit diesem Anpassungspunkt können Sie alle Quellendaten ändern. Außerdem können Sie an diesem Punkt Daten einfügen, die aus anderen Quellen (z. B. Datenbanken) verfügbar sind.
Der untergeordnete Nachrichtenfluss für die Anpassung OnProcess wurde vor dem Generieren des Berichts aufgerufen. Dieser untergeordnete Nachrichtenfluss hat standardmäßig keine Auswirkung auf die Nachricht, aber Sie können mit diesem untergeordneten Nachrichtenfluss eine Eingabenachricht erstellen, die mit den für Ihre Berichte erforderlichen Spezifikationen übereinstimmt.
Die untergeordneten Nachrichtenflüsse OnSendACK und OnSendNACK werden aufgerufen, bevor Bestätigungsnachrichten generiert werden. Diese untergeordneten Nachrichtenflüsse haben standardmäßig keine Auswirkung auf die Nachricht, aber Sie können mit diesen untergeordneten Nachrichtenflüssen eine Bestätigungsnachricht erstellen, die mit den für Ihre Quellenanwendung erforderlichen Spezifikationen übereinstimmt.
Der untergeordnete Nachrichtenfluss OnErrorQueue wird aufgerufen, wenn ein Fehler ermittelt wurde und eine Fehlernachricht in die Fehlerwarteschlange geschrieben wird. Der untergeordnete Standardnachrichtenfluss für die Anpassung hat keine Auswirkung auf die Nachricht, aber Sie können mit diesem untergeordneten Nachrichtenfluss eine Fehlernachricht erstellen, die mit den für Ihre Quellenumgebung erforderlichen Spezifikationen übereinstimmt.
Der Datenfluss 'Prozessor' führt ein PHP-Script mit der Bezeichnung Processor.php aus. Dieses PHP-Script ermittelt den Namen eines PHP-Scripts, das den Bericht für diese Nachricht generiert. Der Name des PHP-Scripts verwendet das Ereignis und den Code der HL7-Nachricht.
Dies ist beispielsweise ADT_A01.php, wenn es sich bei der HL7-Nachricht um eine Nachricht zur Zulassung eines Patienten handelt (ADT^A01
). Wenn das PHP-Script nicht gefunden wird, wird der untergeordnete Nachrichtenfluss
OnNoMatch
aufgerufen. Dieser untergeordnete Nachrichtenfluss hat standardmäßig keine Auswirkung auf die Nachricht, aber Sie können mit diesem untergeordneten Nachrichtenfluss Nachrichten verarbeiten, die keinen Bericht generiert haben.
Der untergeordnete Nachrichtenfluss OnFileFinished wird aufgerufen, wenn die Berichtsdatei abgeschlossen und in das Ausgabeverzeichnis kopiert wurde. Dieser untergeordnete Nachrichtenfluss hat standardmäßig keine Auswirkung auf die Nachricht, aber Sie können mit diesem untergeordneten Nachrichtenfluss die Verarbeitung der fertig gestellten Datei erweitern. Nach der Fertigstellung des Berichts erstellt der Knoten 'FileOutput' eine neue Berichtsdatei, die für nachfolgend generierte Berichte verwendet wird.