¿Cómo abortar el script y mostrar un mensaje de error si falla el guardado del archivo?Hola,
Hice un script que convierte JMP en un archivo csv y lo guarda en las PC de la red usando su dirección IP.
dt = Current Data Table();
ToolID = {"G01", "G02", "G03", "G04"};
IP_add = {"10.87.123.456", "10.87.123.789", "10.87.456.789", "10.87.789.123"};
current_pref = Char( Arg( Parse( Char( Get Preferences( Export settings ) ) ), 1 ) );
Pref( Export Settings( End Of Field( Comma ), Export Table Headers( 1 ) ) );
captxt = "";
For( i = 1, i <= N Items( IP_add ), i++,
dt << save( "\\" || IP_add[i] || "\c$\filedir\file.csv" );
Caption( "Updated " || Tester[i] || " \\" || IP_add[i] );
captxt = captxt || "
Updated " || ToolID[i] || " \\" || IP_add[i];
Wait( 0.2 );
);
Caption( captxt );
Eval( Parse( "pref(" || current_pref || ")" ) );Ahora, nos dimos cuenta de que si nos olvidamos de poner .csv en el comando de guardar, la secuencia de comandos aún se ejecutará en las siguientes líneas y mostrará un título que indica que el guardado se realizó correctamente, incluso si no es así.
La única forma en que podemos saber que no tiene éxito es verificar el archivo en la PC de la red y el archivo de registro JMP que tiene este error:
Unable to save file. Unknown data target.
Mi pregunta es esta. Si ocurre este error, ¿cómo detenemos el script y mostramos un mensaje de error? Este tipo de error "silencioso" puede ser engañoso para el usuario.
Intenté usar Try and Throw, pero no funcionó.
Try(dt << save( "\\" || IP_add[i] || "\c$\filedir\file.csv" );, Caption("Error! Check log."); Throw());Gracias,
Shaira
Re: ¿Cómo abortar el script y mostrar un mensaje de error si falla el guardado del archivo?@ian_jmp , ¡gracias! Voy a investigar esto.
@msharp , sí, en el futuro creo que esa es la dirección, aunque necesita algo de logística, papeleo, etc. Así que por ahora, estoy considerando la solución del guión como una solución a corto plazo.
Re: ¿Cómo abortar el script y mostrar un mensaje de error si falla el guardado del archivo?Si bien usar el método de marca de tiempo es una buena idea, una mejor idea podría ser repensar su arquitectura de datos.Su método actual es menos que óptimo, guardar el mismo csv en varias ubicaciones y sobrescribirlos es solo tirar datos.Recomendaría buscar en la creación de una base de datos.
Re: ¿Cómo abortar el script y mostrar un mensaje de error si falla el guardado del archivo?En cuanto a las marcas de tiempo, echa un vistazo aquí en 'Última fecha de modificación ()'
Re: ¿Cómo abortar el script y mostrar un mensaje de error si falla el guardado del archivo?Hola @msharp ,
Gracias por el aporte. Desafortunadamente, no puedo hacer el método de verificación de archivos ya que tengo muchas entradas de direcciones IP.
El archivo ya está allí, y lo que necesito saber es si el archivo se actualizó (se puede hacer comprobando la marca de tiempo). Es mejor verificar el ".csv" como mencionaste, pero realmente quiero un poke-yoke ya que no sé qué más puede desencadenar estos "errores silenciosos".
Creo que agregaré esto al script actual:
1. Ejecute los códigos ya escritos pero en el ciclo for, agregue líneas de código para obtener la marca de tiempo del archivo antes y después de guardar.
2. Marcar un error si antes y después de la marca de tiempo son iguales.
Todavía no sé cómo obtener la marca de tiempo, pero comenzaré con esto: https://community.jmp.com/t5/Discussions/How-to-make-JSL-get-file-timestamp/td-p/3764
Gracias de nuevo.
Re: ¿Cómo abortar el script y mostrar un mensaje de error si falla el guardado del archivo?Simplemente guárdelo y luego verifique si el archivo existe.Si no es así, no guardó:
dt = Current Data Table();
ToolID = {"G01", "G02", "G03", "G04"};
IP_add = {"10.87.123.456", "10.87.123.789", "10.87.456.789", "10.87.789.123"};
current_pref = Char( Arg( Parse( Char( Get Preferences( Export settings ) ) ), 1 ) );
Pref( Export Settings( End Of Field( Comma ), Export Table Headers( 1 ) ) );
captxt = "";
For( i = 1, i <= N Items( IP_add ), i++,
location = "\\" || IP_add[i] || "\c$\filedir\file.csv";
dt << save( location );
//Should work, may not depending on your network settings
If( !File Exists( location ), Caption("Error! Failed to save to location: " || location); Throw());
//Could also try opening it, which will throw an error if it doesn't exist
Try(dttemp = Open(location); Close(dttemp, nosave), Caption("Error: " || exception_msg); Throw());
Caption( "Updated " || Tester[i] || " \\" || IP_add[i] );
captxt = captxt || "
Updated " || ToolID[i] || " \\" || IP_add[i];
Wait( 0.2 );
);
Caption( captxt );
Eval( Parse( "pref(" || current_pref || ")" ) );
Si el problema solo ocurre cuando " si nos olvidamos de poner .csv en el comando de guardar", tendría más sentido verificar si el usuario olvidó esto y corregirlo por ellos.Dicho esto, es posible que desee este error si hay problemas de red o conexión.