Tutto,
Ho uno script che scarica dati da vari database in tutto il mondo. Questo script è pianificato e automatizzato. Ciò significa che esegue le operazioni previste, salva tutte le tabelle, chiude JMP e l'attività termina.
Tuttavia, di tanto in tanto uno o due database non rispondono. Il server LDAP è inattivo e non accetta la mia password, oppure è in corso qualche operazione di manutenzione del database, ecc.
In questo caso mi compare una finestra pop-up come questa:

Anche se sono presente quando ciò accade e clicco su "Annulla", lo script si interrompe senza completarsi.
Ho una funzione che estrae i dati dal database, incapsulata in un blocco try/catch. Cliccare manualmente sul pulsante "Annulla" non sembra funzionare... Ma soprattutto, come faccio a eseguire lo script in modalità non supervisionata in questo caso? Come faccio a dirgli: "Se non riesci a connetterti a uno dei database, interrompi l'esecuzione, estrai i dati dagli altri database ed elabora quelli che hai a disposizione... Non bloccare l'intero script solo perché uno dei database non risponde"? Come faccio a far sparire la finestra di dialogo e a considerare l'operazione fallita, spostarla nel blocco catch e continuare con lo script?
Ecco la parte dello script responsabile di questo:
DBPaths = [
"Server1" => "ODBC:DSN=...PORT=5432;",
"Server2" => "ODBC:DSN=...PORT=5432;",
"Server3" => "ODBC:DSN=...PORT=5432;",
"Server4" => "ODBC:DSN=...PORT=5432;",
"Server5" => "ODBC:DSN=...PORT=5432;"];
myQuery = Function( {serverDBPath, server},
New SQL Query(
Version( 130 ),
Connection( serverDBPath ),
QueryName( server ),
Select( ... ),
From( ... ),
Where( ... ),
PostQueryScript( ... )
) << Run Foreground()
);
myDTs = {};
For Each( {{server, DBPath}, index}, DBPaths,
Show( server, DBPath, index );
Try( myDTs[index] = myQuery( DBPath, server ), writeToLog( server || " Query error... Using: " || DBPath ||" Error message: "||exception_msg[1] ) );
);
Grazie,
M.
Mi chiedo se eseguire le query in background potrebbe essere d'aiuto. Spesso utilizzo un metodo simile a quello riportato di seguito, con un controllo sulla validità dei dati restituiti:
Esegui le query in background, attendi che vengano completate e fai riferimento ad esse nel resto dello script JSL.