Controlla se la tabella è di sola lettura?EHI,
Ho un grande script jsl in cui ad un certo punto apre un paio di tabelle di dati, vi inserisce i dati, li salva e li chiude.
Ora, normalmente funziona bene senza problemi. Ma le tabelle di dati che apre si trovano sul server aziendale e capita occasionalmente che qualcun altro abbia il file aperto, il che significa che lo script apre una versione di sola lettura e non può salvarla.
C'è un modo per aggiungere allo script un modo per verificare se il file è aperto in modalità di sola lettura, quindi posso annullare lo script e avvisare l'utente? Qualcosa di simile a Excel dove se apri un file in uso da qualcun altro ricevi un messaggio "File in uso da X, vuoi aprire una versione in sola lettura?".
Grazie,
EdvinRe: controllare se la tabella è di sola lettura?Alla fine ho trovato una soluzione che funziona, quindi la pubblico nel caso in cui qualcun altro trovi questo thread in futuro.
dt = Data Table("Untitled");
Try(test = LogCapture(dt << save));
If(Contains(test, "problem"),
New Window("Error",
<<MODAL></MODAL>Se la tabella è di sola lettura e non può essere bloccata, test diventerà
test = "
I/O problem.
File not open in Write mode.
";
ecco perché il Contains(test, "problem") funziona.
Re: controllare se la tabella è di sola lettura?Sì, ho anche la sensazione che ci manchi qualcosa di semplice, grazie comunque. Qualcun altro ha un'idea?
Re: controllare se la tabella è di sola lettura?Scusa, ho esaurito le idee. Forse un altro collaboratore può pensare a un modo. (Probabilmente è qualcosa di semplice che non mi è venuto in mente.)
Re: controllare se la tabella è di sola lettura?EHI,
Ho provato questa soluzione e ho provato a costruire la funzione Try in un paio di modi diversi, ma sembra che non raggiunga mai la seconda espressione, anche se la prima genera un errore. La tabella è ancora chiusa, ma non salvata. Ecco come appare il file di registro:
Names Default to Here(1);
dt = Data Table("CharData G4 v3.0");
dt << add rows(1);
Try(
Close( dt, Save ),
Print( "Data table locked" );
);
I/O problem.
File not open in Write mode. Re: controllare se la tabella è di sola lettura?OK, forse usa la funzione Try( expr1, expr2 ). Il primo argomento è un'espressione che viene sempre valutata. Usa la tua operazione di salvataggio per il primo argomento. Il secondo argomento è un'espressione che viene valutata solo se il primo argomento genera un errore. In questo modo puoi intrappolare l'errore.
Names Default to Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
// changes made to data table, save table
Try(
Close( dt, Save ),
Print( "Data table locked" );
);
// rest of script
Re: controllare se la tabella è di sola lettura?Ehi, grazie mille per le risposte. Sfortunatamente, nessuna delle soluzioni funziona per me, << Get Lock restituisce '0' e << Get Edit Lock restituisce 'Empty ()'.
Ora ho un tavolo aperto su un altro computer e da solo. Posso modificarlo quanto voglio sul mio computer, niente è bloccato. Ma quando provo a salvarlo, non ci riesco e ricevo lo stesso messaggio di errore di prima, "Problema di I/O. File non aperto in modalità scrittura.".Re: controllare se la tabella è di sola lettura?Dimentica il mio suggerimento sopra. I blocchi di modifica sono separati dal vecchio meccanismo di blocco. Un approccio semplice consiste nell'aprire la tabella dati e inviare il messaggio << Get Lock a qualsiasi colonna. Se la tabella dati è bloccata, lo sono anche tutte le colonne. Il risultato dovrebbe essere vero (1).
Re: controllare se la tabella è di sola lettura?Vedere Guida > Indice script. Cercare "lock" e cercare i messaggi Get Edit Lock e Set Edit Lock. Il primo otterrà le informazioni sullo stato che desideri. Il secondo descriverà le opzioni che potrebbero essere restituite.
Re: controllare se la tabella è di sola lettura?Volevo solo chiarire un po' di più, l'utente riceve un messaggio di errore che dice "Problema di I/O. File non aperto in modalità di scrittura."
Appare solo quando lo script tenta di salvare la tabella, quindi può salvare la tabella 1 e 2, ma non riesce a salvare la tabella 3, il che incasina la mia gestione dei dati.
Voglio aggiungere qualcosa che controlli la modalità di scrittura prima di provare a salvare una qualsiasi delle tabelle. Sto usando JMP 13.