A partire dalla v20R2 è ora possibilelanciare errori nel codice 4D.
Questi errori si comportano come qualsiasi altro errore 4D: attivano una finestra di dialogo di errore o possono essere gestiti in un metodo ON ERR CALL.
Questa funzione vi semplificherà la vita perché sarete in grado di migliorare la qualità del vostro codice rilevando in modo proattivo gli errori non appena si verificano. Potrete anche gestire meglio la registrazione degli errori.
Prima di entrare nei dettagli, è importante notare che questa funzione è il primo passo verso una solida gestione degli errori.
Ora entriamo nei dettagli!
Questa funzione si basa su un nuovo comando throw. Questo comando può essere usato in modi diversi, descritti in dettaglio qui di seguito e nell’HDI.
Come lanciare e gestire gli errori
Gli errori lanciati con il comando throw si comportano come qualsiasi altro errore 4D. Nell’esempio che segue non è stato impostato alcun metodo ON ERR CALL.
L’errore viene lanciato con un codice e una descrizione, attivando una finestra di dialogo di errore.
throw(1; "Questo è un errore")
In quest’altro esempio, è stato impostato un metodo ON ERR CALL e l’errore lanciato può essere ottenuto con il comando Last errors.
ON ERR CALL("handleErrors")
throw (1; "Questo è un errore")
Il comando throw in dettaglio
Questo nuovo comando può essere richiamato in modi diversi, a seconda delle esigenze.
Lancia errori predefiniti.
È possibile sollevare errori predefiniti impostati nei file XLF del progetto. A questo scopo, si deve passare un oggetto come parametro al comando throw. Questo oggetto deve contenere le proprietà
- componentSignature: il codice del componente che genera l’errore
- errCode: il codice dell’errore
Un messaggio di errore corrispondente al nome ERR_componentSignature_errCode viene cercato nei file XLF del progetto e l’errore viene lanciato.
Il messaggio di errore può utilizzare valori segnaposto dinamici. Nel file XLF, specificare il nome del segnaposto tra parentesi graffe {}. Quindi, nell’oggetto error, aggiungere una proprietà il cui nome è il nome del segnaposto e fornire il suo valore.
Esempio:
var $file : 4D.File
ON ERR CALL("handleError")
$file:=File("/PROJECT/HDI file")
If (Not($file.exists))
throw({componentSignature: "HDI1"; errCode: 1; name: "HDI file"; path: "/Project"})
End if
Ecco un esempio del file Errors.xlf tradotto in francese:
<trans-unit id="1" resname="ERR_HDI1_1">
<source>The file "{name}" is not found in {path}.</source>
<target>Le fichier "{name}" est introuvable dans {path}.</target>
</trans-unit>
Il metodo ON ERR CALL può procedere con l’errore:
Utilizzare la modalità differita
L’utilizzo della proprietà booleana deferred nel parametro dell’oggetto consente di impilare gli errori lanciati e di procedere globalmente con essi in un secondo momento. Nel metodo seguente, il metodo ON ERR CALL viene chiamato al termine dell’esecuzione del metodo corrente. Procede con gli errori impilati restituiti dal comando Last errors.
var $file : 4D.File
ON ERR CALL("handleError")
$file:=File("/PROJECT/HDI file")
If (Not($file.exists))
throw({componentSignature: "HDI1"; errCode: 1; name: "HDI file"; path: "/Project"; deferred: True})
throw({componentSignature: "HDI1"; errCode: 2; name: "HDI file"; path: "/Project"; deferred: True})
End if
Ecco un esempio del file Errors.xlf tradotto in francese:
<trans-unit id="1" resname="ERR_HDI1_1">
<source>The file "{name}" is not found in {path}.</source>
<target>Le fichier "{name}" est introuvable dans {path}.</target>
</trans-unit>
<trans-unit id="2" resname="ERR_HDI1_2">
<source>Try another file name</source>
<target>Essayez avec un autre fichier</target>
</trans-unit>
Il metodo handleErrors viene chiamato una sola volta e può ottenere gli errori impilati grazie al comando Last errors:
Una variante della modalità differita consiste nel chiamare il comando throw senza parametri. Questo è utile in un metodo ON ERR CALL.
Impila gli errori correnti fino al termine del metodo corrente. Quindi viene richiamato il metodo ON ERR CALL per procedere con gli errori impilati.
Questo è l’esempio concreto dell’HDI.
Scaricate l’HDI per saperne di più su come gestire gli errori per fornire un feedback appropriato all’utente.