Hola,
Necesito cambiar un nombre de una prueba en un mensaje de tipo OBR
El mensaje es:
OBX|18|ST|^cBase(B)^C||3.2|mmol/l||N|||F||||||||
y lo quiero cambiar por
OBX|18|ST|^ABE^C||3.2|mmol/l||N|||F||||||||
para ello, he puesto en un transformer step el siguiente codigo
if ( msg['OBX']['OBX.3']['OBX.3.2'].toString()=='cBase(B)')
{
tmp['OBX']['OBX.3']['OBX.3.2'].toString()='ABE';
}
;
pero la cuestion es que aunque no da fallos, no me cambia la linea.
¿alguna idea? un saludo !
Buenas Pablo,
Me parece que la idea es buena, pero se te ha colado el método toString() en la asignación, en principio tendrías que cambiar la línea:
tmp["OBX"]["OBX.3"]["OBX.3.2"].toString()="ABE";
por:
tmp["OBX"]["OBX.3"]["OBX.3.2"]="ABE";
Un saludo!
Hola Gonzalo, he hecho el cambio, pero me sigue saliendo cBaseB en la salida...
Buenas,
Otro problema que puede haber en el código es el uso de == para comparación, en ocasiones la comparación no es correcta dependiendo la versión de Mirth, prueba a usar el método equals.
De todas formas para asegurar que la comparación es correcta puedes poner un logger.info("entro en comparacion") para ver si pasa por ahí.
Ya me dices.
Hola Gonzalo
He puesto el logger.info, y la comparacion parece que no pasa por ahi.
Si quito el ==, me dice "this cant be used as the left hand side of an statement"
No termino de entender el problema, ¿puedes escribir la versión final de tu código?
Esta podría ser una aproximación a lo que debes tener:
if ( msg["OBX"]["OBX.3"]["OBX.3.2"].toString().equals("cBase(B)"))
{
logger.info(“entro en comparacion”);
tmp["OBX"]["OBX.3"]["OBX.3.2"]="ABE";
}
version final
if ( msg['OBX']['OBX.3']['OBX.3.2'].toString().equals('cBase(B)'))
{
tmp['OBX']['OBX.3']['OBX.3.2']='ABE';
logger.info("entro en comparacion");
}
;
Y qué resultado devuelve:
logger.info(msg[“OBX”][“OBX.3”][“OBX.3.2”].toString());
Buenas Pablo,
Se me ocurre otra cosa a tener en cuenta, los segmentos OBX pueden ser múltiples, por tanto para acceder al OBX que quieres modificar tendrías que acceder con un índice:
msg[‘OBX’][i][‘OBX.3’][‘OBX.3.2’]
Si no sabes en qué posición estará la prueba tendrás que recorrer todos los OBX con un bucle.
Espero que esto solucione tu problema, ya me dices.
YO miro la salida directamente, pero en el logger no me dice nada...
Creo que en lo de recorrer esta la clave!!! voy a ver como implemento el bucle, porque el problema es que cada vez el numero de obr puede ser diferente...
Puedes usar un bucle en base a la cantidad de OBR:
for (var i = 0; i < msg[“OBX”].length; i++)
O usar un bucle for each:
for each (obx in msg["OBX"])
Te hablo de memoria un poco, pero creo que las dos opciones son buenas...
solucinado con
for each(obx in msg.OBX)
{
if(obx['OBX.3']['OBX.3.2'].toString() == 'cBase(B)')
{
obx['OBX.3']['OBX.3.2'] = 'ABE';
logger.info("entro en comparacion");
logger.info(obx['OBX.3']['OBX.3.2'].toString());
}
}
Ahora, tengo la duda, porque hay que poner esto en lugar de for each (seg in msg.children()) {? ?
Un saludo y gracias !
Hola Pablo,
Me alegro que se haya resuelto tu problema.
Ahora procedo a resolver tu duda, se debe especificar que quieres cada OBX de msg.OBX porque si no obtendrías todos los elementos del mensaje, el PID, NTE, etc.
Un saludo.