Nützliche JavaScript Codefragmente

Manipulation von HL7-Nachrichten

Erzeugung einer neuen Nachricht

var tmp = <HL7Message/>;

Segment angelegen

Anlegen eines Segments am Ende einer Nachricht tmp

createSegment('PR1', tmp)

Alle Segmente eines Typs löschen

Es wird immer das erste Element gelöscht, nach dem Löschen sortieren sich die Elemente neu.

for (var i=0; i<msg['NK1'].length(); i++) {
	delete tmp['NK1'][0];
}

Auf Existenz eines Segments prüfen

var process = false;
if (msg['PV1'].length() > 0) {
	process = true;
}
return process;

Aus einer Nachricht mehrere Nachrichten manchen

Manche Systeme verarbeiten z.B. BAR-Nachrichten nach dem Alles oder Nichts Prinzip. Wenn also eine Diagnose in einer BAR-Nachricht mit mehreren Diagnosen fehlerhaft ist, wird die gesamte Nachricht verworfen. In diesem Fall ist es dann wünschenswert, aus der einen Nacricht mit meheren DG1 und PR1 Segmenten jeweils mehrere Nachrichten mit jeweils nur einem DG1 und PR1-Segment zu erzeugen. Dies lässt sich mit 2 channels realisieren. Der erste channel hat eine destination, der ins Nichts weist. Innerhalb dieses channels befindet sich dann eine translation, die die Nachricht dann über route.routeMessage explizit an einen 2. channel cReceiver weitergibt:

// DG1
if (msg['DG1'].length() > 0)
{
	for (var i = 0; i < msg['DG1'].length(); i++) {
		// HL7-Nachricht ohne Kopie des Originals anlegen
		var tmp = <HL7Message/>;
		// MSH
		tmp['MSH'] = msg['MSH'].copy();
		// EVN
		tmp['EVN'] = msg['EVN'].copy();
		// PID
		tmp['PID'] = msg['PID'].copy();
		// PV1
		tmp['PV1'] = msg['PV1'].copy();
		// DG1
		tmp['DG1'] = msg['DG1'][i].copy()
		router.routeMessage('cReceiver', tmp);
	}
}

// PR1
if (msg['PR1'].length() > 0) {
	for (var i = 0; i < msg['PR1'].length(); i++) {
		// HL7-Nachricht ohne Kopie des Originals anlegen
		var tmp = <HL7Message/>;
		// MSH
		tmp['MSH'] = msg['MSH'].copy();
		// EVN
		tmp['EVN'] = msg['EVN'].copy();
		// PID
		tmp['PID'] = msg['PID'].copy();
		// PV1
		tmp['PV1'] = msg['PV1'].copy();
		// PR1
		tmp['PR1'] = msg['PR1'][i].copy()
		// Segmentnummer
		router.routeMessage('cReceiver', tmp);
	}
}

Der channel cReceiver muss dann so konfiguriert werden, dass dem Source connector die Inbound Property XML zugewiesen ist, da zwischen den channeln die Nachricht im XML-Format weitergeleitet wird.