Yes, In order to send an MDM document into centricity the text in OBX 5 will need to be combined into one OBX segment. In the code bellow, a "\par " tag was used between each OBX that was combined.
In order for the code to work you will need to setup two System Variables as follows.
Name: rtfHeader
Content: {\E\rtf1\E\fbidis\E\ansi\E\ansicpg1252\E\deff0\E\deflang1033\E\deflangfe1033{\E\fonttbl{\E\f0\E\fswiss\E\fprq2\E\fcharset0 Arial;}}~{\E\colortbl ;\E\red0\E\green0\E\blue0;}~\E\viewkind4\E\uc1\E\pard\E\ltrpar\E\cf1\E\f0\E\fs20
Note: Make sure there is a space at the end of the rftHeader content.
Name: rftParagraph
Content: \par
Note: Make sure there is a space at the end of the "\par " content.
QIE Mapping Code:
var rtfHeader = qie.getVariable('rtfHeader');
var rtfFooter = '}';
var rtfParagraph = qie.getVariable('rtfParagraph');
var obx5Values = source.getAllNodes('OBX');
var newObx5Value = '';
var obx32Map = qie.newParameterMap();
var obxBaseMap = qie.newParameterMap();
var keys = [];
var i;
var maxLength = 60000;
var exceedsMaxLength = false;
var obxSegment;
for (i = 0; i < obx5Values.length; i++) {
obxSegment = qie.parseHL7String(obx5Values[i]);
var obx32value = obxSegment.getNode('OBX-3.2');
var obx5Value = obxSegment.getNode('OBX-5');
// Check if in map.
if (obx32Map.get(obx32value) === null){
// If not in map then add obx segment back and add to map.
obx32Map.put(obx32value, obx5Value);
obxBaseMap.put(obx32value, obxSegment);
keys.push('' + obx32value);
//message.addChild('/', 'OBX', obxSegment.getNode('/'));
} else {
//var tempValue = obx32Map.get(obx32value) + '~' + obx5Value;
var tempValue = obx32Map.get(obx32value) + rtfParagraph + obx5Value;
if (tempValue.length > maxLength) {
exceedsMaxLength = true;
break;
}
obx32Map.put(obx32value, tempValue);
// If in map then add obx-5 to current obx segment
//message.setNode('OBX[@3.2=' + obx32value + ']-5', message.getNode('OBX[@3.2=' + obx32value + ']-5') + ' ~ ' + obx5Value);
}
}
if (!exceedsMaxLength) {
qie.debug("Have not exceeded, so we will combine the OBX segments.");
message.removeAllNodes('OBX');
for (i = 0; i < keys.length; i++) {
var key = keys[i];
var content = StringUtils.replace(obx32Map.get(key), '\r\n', rtfParagraph);
content = StringUtils.replace(content, '\r', rtfParagraph);
content = StringUtils.replace(content, '\n', rtfParagraph);
obxSegment = qie.parseHL7String(obxBaseMap.get(key));
qie.debug(key);
if (StringUtils.equalsIgnoreCase(key, 'Radiology Report')) {
obxSegment.setNode('OBX-3', 'NO_REF');
obxSegment.setNode('OBX-5', rtfHeader + content + rtfFooter);
} else {
obxSegment.setNode('OBX-5', content);
}
message.addChild('/', 'OBX', obxSegment);
}
} else {
qie.debug("Danger Will Robinson, you have exceeded your OBX-5 length, so we are not going to change the message.");
}