Gestione avanzata degli errori nel codice 4D

Tradotto automaticamente da Deepl

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.

HDI_THROW_ERRORS

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")

blank

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 &quot;{name}&quot; is not found in {path}.</source>
<target>Le fichier &quot;{name}&quot; est introuvable dans {path}.</target>
</trans-unit>

Il metodo ON ERR CALL può procedere con l’errore:

blank

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 &quot;{name}&quot; is not found in {path}.</source>
<target>Le fichier &quot;{name}&quot; 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:

blank

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.

Avatar
- Product Owner - Marie-Sophie Landrieu-Yvert è entrata a far parte del team 4D Product come Product Owner nel 2017. In qualità di Product Owner, è incaricata di scrivere le storie degli utenti e di tradurle in specifiche funzionali. Il suo ruolo è anche quello di assicurarsi che l'implementazione della funzionalità fornita soddisfi le esigenze del cliente.Marie-Sophie si è laureata presso la scuola di ingegneria ESIGELEC e ha iniziato la sua carriera come ingegnere presso IBM nel 1995. Ha partecipato a vari progetti (di manutenzione o di costruzione) e ha lavorato come sviluppatrice Cobol. In seguito ha lavorato come progettista UML e sviluppatore Java. Ultimamente i suoi ruoli principali erano l'analisi e la scrittura dei requisiti funzionali, il coordinamento dei team di business e di sviluppo.