El foro de caduceus.es ha sido migrado a meditecs.com. Descubre más sobre el cambio en este post.
🇬🇧 English speaker? Go to Meditecs forums in English!
No consigo hacer funcionar una sentencia switch sencilla en un Code Template de Mirth Connect. Quiero usar como expresión de comparación una variable de tipo texto pasada como parámetro a la función, pero por alguna extraña razón la comparación no se hace bien cuando llamo a la función usando como parámetro una variable.
El código que tengo en el Code Template es éste:
function getFromSwitch(code) {
var result = "";
switch(code){
case "1":
result = "numero_1";
break;
case "2":
result = "numero_2";
break;
default:
result = "error code";
}
return result;
}
Si llamo a la función desde algún canal y muestro el resultado:
logger.info(getFromSwitch("1")); // Funciona
var code = "1";
logger.info(getFromSwitch(code)); // NO funciona
En el primer caso la salida es "numero_1", mientras que en el segundo caso siempre obtengo "error code".
He conseguido resolver mi problema usando recursivamente un bloque if else if, como éste:
function getFromSwitch(code) {
var result = "error code";
if (code=="1") result = "numero_1";
else if (code=="2") result = "numero_2";
return result;
}
pero no me parece lo más adecuado y creo que debería poderse hacer de la otra forma.
¿A alguien se le ocurre qué puede estar pasando? ¿Será que el JavaScript de Mirth no soporta esa forma de usar el switch?
Hola, Nikkator:
El problema al que haces referencia tiene que ver con cómo trata Mirth Connect internamente a las variables en relación a los tipos de datos que usa.
En este hilo del foro oficial de Mirth Connect se habla precisamente de esto mismo:
https://www.mirthproject.org/community/forums/showthread.php?p=50211
En resumen, cuando declaras una variable y la inicializas como una cadena de caracteres, parece que internamente se le asigna el tipo java.lang.String, por lo que el switch, al comparar un objeto Java con una cadena de caracteres, no tiene el comportamiento deseado.
Para comprobar el tipo de dato con el que estás trabajando, te sugiero que, antes de llamar a tu función, utilices el siguiente código:
logger.info(code.getClass());
En caso de obtener como resultado class java.lang.String, bastará con hacer lo sugerido en el hilo anterior, concatenar la cadena vacía para que el parámetro de tu función no se almacene internamente como un objeto Java:
logger.info(getFromSwitch(code + ''));
¿Puedes verificar que esto soluciona tu problema?
No obstante, he realizado algunas pruebas y parece que este problema ya está solucionado en la versión 3.3.1 de Mirth Connect. ¿Qué versión estás utilizando tú?
Un saludo.
Funciona! he verificado que agregando la cadena vacía a la variable pasada como parámetro se resuelve el problema, y que haciendo uso de la función
logger.info(variable.getClass());
tras hacer esa concatenación ya no dice java.lang.String
Por cierto, la versión que he usado ha sido la 3.3.0
Gracias!!
De nada, Nikkator, para eso estamos, ¡gracias a ti por exponer tu problema! 😉
