Cambiar OBR 3.2 [So...
 
Avisos
Vaciar todo

[Resuelto] Cambiar OBR 3.2 [Solucionado]

14 Mensajes
2 Usuarios
0 Me gustas
1,426 Vistas
(@caseystoner)
Eminent Member
Registrado: hace 9 años
Mensajes: 31
Topic starter  

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 !


   
(@gonzalo_mendez_alarcon)
Active Member
Registrado: hace 7 años
Mensajes: 12
 

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!


   
(@caseystoner)
Eminent Member
Registrado: hace 9 años
Mensajes: 31
Topic starter  

Hola Gonzalo, he hecho el cambio, pero me sigue saliendo cBaseB en la salida...


   
(@gonzalo_mendez_alarcon)
Active Member
Registrado: hace 7 años
Mensajes: 12
 

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.


   
(@caseystoner)
Eminent Member
Registrado: hace 9 años
Mensajes: 31
Topic starter  

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"


   
(@gonzalo_mendez_alarcon)
Active Member
Registrado: hace 7 años
Mensajes: 12
 

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";
}

 


   
(@caseystoner)
Eminent Member
Registrado: hace 9 años
Mensajes: 31
Topic starter  

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");
}
;


   
(@gonzalo_mendez_alarcon)
Active Member
Registrado: hace 7 años
Mensajes: 12
 

Y qué resultado devuelve:

logger.info(msg[“OBX”][“OBX.3”][“OBX.3.2”].toString());


   
(@gonzalo_mendez_alarcon)
Active Member
Registrado: hace 7 años
Mensajes: 12
 

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.


   
(@caseystoner)
Eminent Member
Registrado: hace 9 años
Mensajes: 31
Topic starter  

YO miro la salida directamente, pero en el logger no me dice nada...


   
(@caseystoner)
Eminent Member
Registrado: hace 9 años
Mensajes: 31
Topic starter  

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...


   
(@gonzalo_mendez_alarcon)
Active Member
Registrado: hace 7 años
Mensajes: 12
 

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...


   
(@caseystoner)
Eminent Member
Registrado: hace 9 años
Mensajes: 31
Topic starter  

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 !


   
(@gonzalo_mendez_alarcon)
Active Member
Registrado: hace 7 años
Mensajes: 12
 

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.


   
Compartir:
Forum