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!
Buenas tardes!
tengo un problema con un canal de mirth desde hace bastante tiempo y es que cuando muevo PDF's a un destino, alguna vez se mueve corrupto y tengo que mover el fichero a mano (por putty) al destino para que pueda ser consultado. En el canal lo muevo a través del 'file writter' en 'destination' por smb. Casi siempre funciona, pero hay veces que se mueve corrupto... y no encuentro la causa de porqué se produce, no se si es un bug que tiene Mirth o que...
Entonces lo que se me ha ocurrido es realizar ese mismo comando de putty a través de mirth que es un 'cp', existe alguna manera de ejecutar un comando de este estilo?? ya que estamos.. se sabe porqué se mueve corrupto en alguna ocasión?
gracias y un saludo!
Hola, Cristina:
Se me ocurre que a veces no se le dé el tiempo suficiente para que la copia del fichero termine de realizarse. ¿Has notado que te ocurre con tamaños de ficheros superiores a la media o es completamente aleatorio?
En cualquier caso, como bien sugieres, me parece buena idea probar a ejecutar el comando directamente para ver si el problema se soluciona. Puedes definir la siguiente función dentro de un code template en Mirth Connect, con la que, además, puedes obtener la respuesta del comando ejecutado:
function executeCommand(cmd) {
var res = "";
try {
var line = new java.lang.String();
var p = java.lang.Runtime.getRuntime().exec(cmd);
var bin = new java.io.BufferedReader(
new java.io.InputStreamReader(p.getInputStream()));
while ((line = bin.readLine()) != null)
res += line.toString();
bin.close();
} catch (e) {
res = "ERR: " + e.getMessage();
}
return res;
}
Una vez definida, puedes ejecutar esta función desde un conector de tipo JavaScript, y debería funcionar tanto en Windows como en Linux.
Por ejemplo, el siguiente código en un conector de tipo JavaScript en Windows mostraría por consola la típica respuesta 1 archivo(s) copiado(s):
logger.info(executeCommand('CMD /C COPY /Y "C:\tmp\informaticasana\foros\filetocopy.txt" "C:\tmp\informaticasana\foros\filecopied.txt"'));
Ya nos cuentas qué tal.
Un saludo y gracias a ti.
Hola Francisco,
Primero de todo gracias por tu respuesta. Lo que me comentas sobre el tiempo de creación del fichero, puede ser, ya que tal cual se deja el fichero en la carpeta lo cojo, así que se me ocurre que haya veces que el enlace ya esté y lo coja incompleto... Voy a probar a poner la opción que mire los ficheros a partir de 1000 o 2000 ms de su creación, a ver si seso lo soluciona. Sino probaré la ejecución del comando.
Gracias!
De nada, Cristina, para esto estamos. 😉
Ya nos cuentas cómo te ha ido.
Un saludo.
Buenas tardes!
He estado probando la función, he puesto en logger.info la línea tal cual me has escrito como ejemplo cambiando las rutas y el nombre del txt, y me muestra 'El sistema no puede encontrar el archivo especificado'
Copio pego tal cual lo tengo, a ver si es que me estoy dejando algo y no lo veo...
var cmd = 'CMD /C COPY /Y "C:\Tmp\cmd\prueba.txt" "C:\Tmp\cmd\prueba3.txt"';
logger.info(executeCommand(cmd));
prueba.txt es un fichero que tiene escritas unas líneas, nada más.
Gracias y saludos!
Ok! solucionado!
Como escrito .txt en el nombre, entonces para el interprete era prueba.txt.txt ...
Ha funcionado a la perfección!
gracias!!
Perfecto, me alegro de que hayas solucionado el problema. 😉
Un saludo y gracias a ti.
