Ver Mensaje Individual
  #2 (permalink)  
Antiguo 11/10/2013, 17:01
jmmanrique
 
Fecha de Ingreso: septiembre-2013
Mensajes: 12
Antigüedad: 10 años, 7 meses
Puntos: 2
Respuesta: ejecutar exe desde asp.net

¡Por fin después de largas horas conseguí resolver el problema!

Les comparto lo que encontré, por si alguno enfrenta esta misma necesidad en el futuro.

Como les decía en mi pregunta, tengo un software llamado AS2 Connector que sirve para el intercambio de documentos EDI entre asociados de intercambio.

AS2 connector está hecho en ASP.Net, e incluye una opción en las configuraciones avanzadas del asociado de intercambio para ejecutar archivos .bat o scripts de .NET al presentarse uno de varios eventos: antes de enviar un documento, después de haberlo enviado, al ocurrir un error mientras se enviaba, al momento de recibir un nuevo documento y en el caso de ocurrir un error al recibir un documento. Así mismo, están disponibles una serie de macros que devuelven valores con que se pueden pasar al .bat o al script como parámetros.

Básicamente, lo que haces al configurar las opciones avanzadas del asociado de intercambio, en la sección de batch scripting, es poner en el cuadro de texto para especificar el nombre del archivo .bat o del script, dicho dato y -en el cuadro de texto para los parámetros (argumentos) que le vas a pasar-, aquellos parámetros que te interese pasar al .bat o al script, incluyendo -si lo necesitas-, alguna de las macros disponibles.

Las macros que a mi me interesaban eran %FileName% que te regresa el nombre del archivo que se incluye en el encabezado al momento de enviar el archivo, %FileNameWritten%, que se supone que te debería regresar el nombre del archivo con su ruta completa, %ShortDate% que te da la fecha en que se dispara el evento, en formato corto y %LongDate%, que te da lo mismo, pero en formato largo.

Para empezar, %FileNameWritten% no funciona. Te regresa literalmente %FileNameWritten%.

Por otro lado, si utilizas %LongDate%" -dado que esta te regresará una cadena que incluye varias palabras separadas con espacios en blanco-, el valor que le manda al .bat o al script va encerrado entre comillas (por ejemplo, "Viernes 11 de Octubre de 2013").

Si en tu .bat -o en tu script-, tienes algo como:

mailsend -smtp smtp.tuservidor.com -port tupuerto -user [email protected] -pass tucontraseña -to [email protected] -from [email protected] -auth -sub "Archivo enviado %1" -M "Se ha enviado el archivo %1 el día %2"

... y en la configuración avanzada del asociado comercial especificaste en el apartado para los argumentos: %FileName% %LongDate%, en la línea anterior se sustituirán los parámetros como sigue:

mailsend -smtp smtp.tuservidor.com -port tupuerto -user [email protected] -pass tucontraseña -to [email protected] -from [email protected] -auth -sub "Archivo enviado archivo.edi" -M "Se ha enviado el archivo archivo.edi el día "Viernes 11 de Octubre de 2013""

Nota que la fecha incluye las comillas, además de las comillas que le he puesto al cuerpo del mensaje. Es fácil entender porqué fallaba: en el parámetro -M de mailsend (el cuerpo del mensaje), se formaba una cadena que decía "Se ha enviado el archivo archivo.edi el día ", enseguida venía Viernes 11 de Octubre de 2013, lo que no adquiría significado alguno para mail y era exactamente lo que estaba provocando el fallo.

Hice pruebas ejecutando mi archivo .bat manualmente desde la línea de comandos, pero nunca se me ocurrió poner una fecha en formato largo, por eso nunca vi este problema, hasta que me puse a jugar con las macros, investigando una por una y me topé de frente con el error.

Para corregirlo, me limité a utilizar únicamente las macros %FileName% y %ShortDate% -que me regresan algo que se puede entender como una sola palabra, sin espacios intermedios-, dado que la información que me proporcionan es suficiente para lo que necesito. Además, esto era algo que debía dejar funcionando y sinceramente no quise invertirle más tiempo.

Por si alguna vez tienen la necesidad, les dejo la respuesta que finalmente encontré.

Saludos.