L'interfaccia di scripting di Photo>Graphics PRO gestisce le situazioni d'errore in modo differente dall'approccio tradizionale del REXX.
Nella massima parte dei sistemi di script basati su REXX, una notifica di errore viene ritornata tramite un codice d'errore.
Ogni funzione ritorna un codice per indicare il completamento o il fallimento delle operazioni richieste. Se avviene un errore specifico di Photo>Graphics (per esempio, non è stato possibile recuperare un file), viene generata una condizione di errore di sintassi, e il messaggio d'errore può essere recuperato chiamando la funzione CwGetErrorMsg. In questo modo, la tecnica normale per la gestione di un errore in Photo>Graphics PRO è arrestare lo script e mostrare un messaggio d'errore diagnostico.
Se si desidera che lo script reagisca all'errore senza fermarsi è necessario usare SIGNAL e quindi chiamare CwErrorMsg per recuperare il messaggio d'errore. (Se nessun errore si è verificato, CwErrorMsg ritornerà una stringa vuota. Ciò significa che è possibile separare gli errori specifici delle funzioni di Photo>Graphics PRO dai veri e propri errori di sintassi REXX.)
Vediamo il ragionamento dietro questa politica: gli script REXX solitamente sono usati per automatizzare compiti frequenti, che non richiedono grande raffinatezza. È però occasionalmente necessario fare qualcosa di più complesso in REXX. Questi compiti dovrebbero comunque essere possibili, mentre il materiale meno sofisticato dovrebbe comunque restare semplice da sviluppare. Questo inoltre assicura che uno script malfunzionante non continui accidentalmente, con il rischio (non trascurabile) di rovinare un lavoro magari particolarmente complesso.
Esempio:
call CwImportProject projectFileè preferibile a
rc = CwImportProject(projectFile) if rc = 0 then do Say "Error. Unable to open file" projectFile exit endNormalmente, producendo uno script particolarmente " terra-terra ", si potranno ignorare i valori di ritorno delle funzioni. Si consideri il seguente caso:
... x=CwImportProject(pf) oh=CwGetHandleFromObjectName('foo') x=CwSetProperty(oh,"position:x", 5) ...
In questo caso, se la variabile pf
contiene un nome di file non valido, lo script abortirà silenziosamente: sta all'utente
aggiungere delle SAY per il debugging.
Questo può richiedere molto lavoro. Nel sistema di gestione di errori di Photo>Graphics PRO, un errore nella specifica del file causa allo
script un'interruzione forzata, con l'apparizione di un messaggio d'errore chiaro in una message box assieme al numero di linea in cui l'errore
è occorso. A questo punto è semplice tracciare l'errore.
Se si desidera scrivere uno script più complesso (e robusto), è possibile recuperare il controllo dopo un errore, anche se richiede un lavoro più complesso. Comunque uno script complesso abbastanza da richiedere un livello di tolleranza agli errori elevato è già da sé lungo (o anche parecchio lungo), per cui non c'è poi troppo da preoccuparsi.
L'intrappolamento di errori fatali è un compito molto semplice. Si eseguano le seguenti operazioni:
Segue un esempio. Questa è una funzione che tenta di caricare un progetto e ritorna 1 per indicare successo, 0 per indicare un fallimento.
loadFile:procedure parse arg projectFile signal on syntax name cantload /* Trap syntax errors.*/ call CwImportProject projectFile /* Success. Switch trapping off and return. */ signal off syntax return 1 /* Failure.*/ cantload: signal off syntax /* Check if the error isn't really something in the REXX end. */ msg = CwGetErrorMsg() if msg = '' then do say "REXX syntax error." exit end else do /* OK, it's ours. Print an error message, clean up and return.*/ say 'Error: ' msg 'in' CwGetErrorFun() call CwClearError end return 0
![]() Tipi di Dati |
![]() Indice |
![]() Lanciare uno Script |