Bei einem unserer aktuellen Projekte dürfen nur Daten weitergeleitet werden, deren Datensatz vollständig ist. Unvollständige Daten werden per Mail gemeldet. Dabei spielt die Reihenfolge der Daten kein Problem, weshalb wir bei unvollständigen Daten der Einfachheit halber mit dem gezielten Generieren eines Fehlers arbeiten.
Will man einen Datensatz beim Parsen unterbrechen und als Fehler darstellen, wenn der Datensatz unvollständig ist, so hat man mehrere Möglichkeiten. Der einfachste Weg, der bei allen Nachrichtentypen und Konfigurationen funktioniert, ist das Werfen eines Fehlers in JavaScript mit der Funktion throw(String message). Will man z.B. einen Fehler generieren, wenn in der Nachricht keine Fallnummer im Feld 19 des PV1 Segmentes mitgegeben wurde, so kann man dies wie folgt generieren:
if(msg['PV1']['PV1.19']['PV1.19.1'].toString() == '')
throw('Es wurde keine Fallnummer mitgegeben!');
Das Problem hierbei ist nun, dass nicht rein der Text Es wurde keine Fallnummer mitgegeben! als Fehler erscheint, sondern eine vollständige Ausnahme-Meldung wie z.B.:
Transformer error
ERROR MESSAGE: Error evaluating transformer
com.mirth.connect.server.MirthJavascriptTransformerException:
CHANNEL: CSV_RECHNUNGEN_OUT
CONNECTOR: CSV_RECHNUNGEN_IN
SCRIPT SOURCE: TRANSFORMER
SOURCE CODE:
102: csv += ";";
103:
104: // Artikelnummer = Ziffer GOÄ. Wenn leer wirf eine Exception
105: if(row['column17'] == undefined || row['column17'] == "undefined" || row['column17'].toString() == "")
106: throw('In der Datei '+sourceMap.get('originalFilename')+' fehlt in Zeile '+ignoreFirst+' der Wert in Spalte Q');
107:
108: csv += row['column17'].toString() + ";";
109:
LINE NUMBER: 106
DETAILS: In der Datei 000991_0557632_20200702.csv fehlt in Zeile 133 der Wert in Spalte Q
at b1f62e07-c2b6-4ca4-bb80-2e876d04c3a3:106 (doTransform)
at b1f62e07-c2b6-4ca4-bb80-2e876d04c3a3:198 (doScript)
at b1f62e07-c2b6-4ca4-bb80-2e876d04c3a3:200
at com.mirth.connect.server.transformers.JavaScriptFilterTransformer$FilterTransformerTask.doCall(JavaScriptFilterTransformer.java:154)
at com.mirth.connect.server.transformers.JavaScriptFilterTransformer$FilterTransformerTask.doCall(JavaScriptFilterTransformer.java:119)
at com.mirth.connect.server.util.javascript.JavaScriptTask.call(JavaScriptTask.java:113)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Will man die Fehlermeldung nun z.B. in den Alerts weiter verarbeiten, so muss man die eigentliche Fehlermeldung extrahieren.