Open rbeckman-nextgen opened 4 years ago
FYI - Example code templates that perform the (un)escaping
/** Unescape HL7 message - unescape characters (separators) in the message content Use in your first transformer step ! Usage: be_amaron_hl7_escape_unescapeHL7(msg);
@param {Any} xmlMessage -
/
function be_amaron_hl7_escape_unescapeHL7(xmlHL7Message) {
if ((typeof xmlHL7Message === "xml") && (xmlHL7Message.localName() == "HL7Message"))
{
function replaceEscapedChars(xmlNode) {
if (xmlNode.hasSimpleContent())
{
var javaTextContent = new java.lang.String(xmlNode.text());
javaTextContent = javaTextContent.replace(escapeChar + "F" + escapeChar, fieldSep);
javaTextContent = javaTextContent.replace(escapeChar + "S" + escapeChar, componentSep);
javaTextContent = javaTextContent.replace(escapeChar + "T" + escapeChar, subComponentSep);
javaTextContent = javaTextContent.replace(escapeChar + "R" + escapeChar, repetitionSep);
javaTextContent = javaTextContent.replace(escapeChar + "E" + escapeChar, escapeChar);
javaTextContent = javaTextContent.replace(escapeChar + "P" + escapeChar, truncationChar);
xmlNode. = javaTextContent;
}
else
{
if (xmlNode.hasComplexContent())
{
for each (child in xmlNode.children()) {
replaceEscapedChars(child);
}
}
}
}
// replace escaped HL7 separator characters
var fieldSep = xmlHL7Message['MSH']['MSH.1'].toString();
var encodingChars = new java.lang.String(xmlHL7Message['MSH']['MSH.2'].toString());
var componentSep = encodingChars.substring(0, 1);
var repetitionSep = encodingChars.substring(1, 2);
var escapeChar = encodingChars.substring(2, 3);
var subComponentSep = encodingChars.substring(3, 4);
var truncationChar = "#";
if (encodingChars.length() > 4)
{
truncationChar = encodingChars.substring(4, 5);
}
for each (child in xmlHL7Message.children()) {
replaceEscapedChars(child);
}
}
else
{
throw "Invalid object type for method be_amaron_hl7_escape_unescapeHL7: " + xmlHL7Message;
}
}
/** Escape HL7 message - escape characters (separators) in the message content Use in your last transformer step ! Usage: be_amaron_hl7_escape_escapeHL7(msg);
@param {Any} xmlMessage -
/
function be_amaron_hl7_escape_escapeHL7(xmlHL7Message) {
if ((typeof xmlHL7Message === "xml") && (xmlHL7Message.localName() == "HL7Message"))
{
function replaceCharsToEscape(xmlNode) {
if ((xmlNode.hasSimpleContent()) && (xmlNode.localName() != "MSH.1") && (xmlNode.localName() != "MSH.2"))
{
var javaTextContent = new java.lang.String(xmlNode.text());
javaTextContent = javaTextContent.replace(escapeChar, escapeChar + "E" + escapeChar);
javaTextContent = javaTextContent.replace(fieldSep, escapeChar + "F" + escapeChar);
javaTextContent = javaTextContent.replace(componentSep, escapeChar + "S" + escapeChar);
javaTextContent = javaTextContent.replace(subComponentSep, escapeChar + "T" + escapeChar);
javaTextContent = javaTextContent.replace(repetitionSep, escapeChar + "R" + escapeChar);
javaTextContent = javaTextContent.replace(truncationChar, escapeChar + "P" + escapeChar);
xmlNode. = javaTextContent;
}
else
{
if (xmlNode.hasComplexContent())
{
for each (child in xmlNode.children()) {
replaceCharsToEscape(child);
}
}
}
}
// replace escaped HL7 separator characters
var fieldSep = xmlHL7Message['MSH']['MSH.1'].toString();
var encodingChars = new java.lang.String(xmlHL7Message['MSH']['MSH.2'].toString());
var componentSep = encodingChars.substring(0, 1);
var repetitionSep = encodingChars.substring(1, 2);
var escapeChar = encodingChars.substring(2, 3);
var subComponentSep = encodingChars.substring(3, 4);
var truncationChar = "#";
if (encodingChars.length() > 4)
{
truncationChar = encodingChars.substring(4, 5);
}
for each (child in xmlHL7Message.children()) {
replaceCharsToEscape(child);
}
}
else
{
throw "Invalid object type for method be_amaron_hl7_escape_escapeHL7: " + xmlHL7Message;
}
}
Imported Comment. Original Details: Author: nico Created: 2017-10-11T06:40:09.000-0700
When transforming a HL7 v2 message to the Mirth XML format, escaped separator characters in the HL7 source message are not "un-escaped" in the XML representation...
Example:
OBX|1|RP|EXAM^Exam^L||\E\E\servername\E\share$\E\folder\E\filename.PDF||||||F|||20171011121100
-> the \E\ should be translated in the XML messages as a simple \ (depending on the escape characters defined/used in MSH-1 of the source HL7 message)
cfr HL7 v2 - Chapter 2 - Control
/ escape the field separator / substitute( field_separator, \F\ ); / escape the encoding characters / substitute( component_separator, \S\ ); substitute( repetition_separator, \R\ ); substitute( escape_character, \E\ ); substitute( subcomponent_separator, \T\ ); substitute (truncation_character, \P\ ) /See 2.7.2Truncation Character escape/
Imported Issue. Original Details: Jira Issue Key: MIRTH-4221 Reporter: nico Created: 2017-10-11T03:13:15.000-0700