Error Acces Violation

Hola, Estamos trabajando con una robotización en SAP
El problema que tenemos es que al generar un reporte, éste tarda algo de tiempo en generarse esto es variable, puede tardar de 10 seg a 20 min.
tengo un do while esperando a que aparezca en componente con el reporte generado
mientras ese componente no aparece SAP está procesando el reporte, sin embargo después de que han pasado 8-10 min tengo el siguiente error
MicrosoftTeams-image (5)
este error provoca que el robot deje de funcionar y por ende toda la robotización, lo que me llama la atención es que no entra en el try catch que he puesto, es como si se forzará el cierre de la aplicación

Me paso en una oportunidad, pregunta primero con el lenguaje de programación c# o java si el reporte esta en la ruta en el momento que consiga el archivo en la ruta pregunta por el componente con cartes de esa forma no saldrá el error.

1 Like

Hola @juan.avila, creo que ese error se genera dentro de Cartes. Por eso no lo puedes atrapar. Sospecho de un excesivo consumo de recursos por parte de SAP. Es decir, que mientras SAP genera el informe no hace nada más, y no libera los recursos, podría ser la memoria: Cada vez que Cartes pregunta a SAP si el informe está listo, los recursos no se liberan y se acumulan. ¿Puedes mostrarnos el código donde te da el error? Tal vez se arregle retardando la consulta de Cartes a SAP a cada 30 segundos.

Este es el código que estamos usando
SAPrzejecutar.click(); //Se ejecuta el reporte
robot.reset(sapBtnTransaction.api());
//Esperar que el reporte este listo para descarga
//hasta que la pantalla del reporte aparezca
System.Threading.Thread.Sleep(espera); //Espera de 30 seg
bool reporteListo = false;
DateTime timeoutReporte = DateTime.Now.AddMinutes(5);
do
{
robot.reset(SAPrznotificacion.api());
robot.reset(WinSapDatosVentana.api());
if (timeoutReporte < DateTime.Now)
throw new Exception(“Se hagoto el timepo de al generar reporte ZQM37”);
else if (SAPrznotificacion.componentexist(1) == 1)
{
//Hay un aviso de SAP se tiene que dar clic en Finalizar, pero el reporte sigue sin estar listo
if (robot.Execute(“return $SAPrznotificacion.value;”).StartsWith(“No tiene autorización”))
{
SAPrzfinalizar.click();
robot.forensic("generar reporte ZQM37: " + robot.Execute(“return $SAPrznotificacion.value;”));
}
}
else if (WinSapDatosVentana.componentexist(1) == 1)
{
//En este if el reporte está listo para exportarlo

	reporteListo = true;
	exit = true;

}
else
	System.Threading.Thread.Sleep(3000);

} while (!reporteListo);

Hola @juan.avila:

No nos dices en qué línea te da el error, supongo que será en componentexist. Te sugiero que esos componentexist(1) los cambies por componentexist(0). No veo el sentido a que te quedes esperando un segundo dentro del robot. Si el problema estalla dentro de Cartes, mejor que estés fuera. Déjalo en componentexist(0).

También veo unos robot.execute que no me gustan nada porque son muy raros. No es natural que lo uses pudiendo hacer $SAPrznotificacion.value. ¿Será que te está devolviendo null por cadena vacía y la estás liando por no tener en cuenta el null? Tienes el método ToString de MyObject para evitar eso.

También me he fijado que no estás usando la librería de Github para C#, RPABaseAPI, o si la usas debe ser una versión muy antigua. Actualiza si puedes.

¿Qué versión de RPA Suite estás usando con el proceso?