Foro

Sentencia switch co...
 
Avisos
Vaciar todo

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!

[Resuelto] Sentencia switch con strings [Solucionado]

4 Mensajes
2 Usuarios
0 Reacciones
3,935 Visitas
Nikkator
(@nsoria)
Trusted Member
Registrado: hace 11 años
Respuestas: 69
Topic starter   [#24]

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?



   
(@fjcarrasco)
Miembro Admin
Registrado: hace 13 años
Respuestas: 39
 

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.



   
Nikkator
(@nsoria)
Trusted Member
Registrado: hace 11 años
Respuestas: 69
Topic starter  

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



   
(@fjcarrasco)
Miembro Admin
Registrado: hace 13 años
Respuestas: 39
 

De nada, Nikkator, para eso estamos, ¡gracias a ti por exponer tu problema! 😉



   
Compartir:
Scroll al inicio