A partir de v20R2 es posiblelanzar errores en el código 4D.
Estos errores se comportan como cualquier error 4D: activan un diálogo de error o pueden ser manejados en un método ON ERR CALL.
Esta característica le facilitará la vida porque podrá mejorar la calidad de su código detectando proactivamente los errores tan pronto como se produzcan. También podrás manejar mejor el registro de errores.
Antes de entrar en detalles, es importante tener en cuenta que esta característica es el primer paso hacia el logro de una sólida gestión de errores.
Ahora, ¡entremos en los detalles!
Esta función se basa en un nuevo comando throw. Este comando puede ser utilizado de diferentes maneras, detalladas a continuación y en el HDI.
Cómo lanzar y gestionar errores
Los errores lanzados con el comando throw se comportan como cualquier otro error 4D. En el ejemplo de abajo no se ha configurado ningún método ON ERR CALL.
Se lanza un error con un código y una descripción, lanzando un diálogo de error.
throw(1; "Esto es un error")
En este otro ejemplo, se ha configurado un método ON ERR CALL, y el error lanzado se puede obtener con el comando Last errors.
ON ERR CALL("handleErrors")
throw (1; "Esto es un error")
El comando throw en detalle
Este nuevo comando puede ser llamado de diferentes maneras de acuerdo a tus necesidades.
Lanzar errores predefinidos.
Puede lanzar errores predefinidos establecidos en los archivos XLF de su proyecto. Para ello, pase un objeto como parámetro al comando throw. Este objeto debe contener las propiedades
- componentSignatureel código del componente que provoca el error
- errCodeel código del error
Se busca en los archivos XLF del proyecto un mensaje de error que coincida con el resname ERR_componentSignature_errCode, y se lanza el error.
El mensaje de error puede utilizar valores de marcador de posición dinámicos. En su archivo XLF, especifique el nombre del marcador de posición entre llaves {}. A continuación, en el objeto de error, añada una propiedad cuyo nombre sea el nombre del marcador de posición y proporcione su valor.
Ejemplo:
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
Este es un ejemplo del archivo Errors.xlf traducido al francés:
<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>
El método ON ERR CALL puede proceder con el error:
Utilizar el modo diferido
El uso de la propiedad booleana deferred en el parámetro objeto le permite apilar los errores lanzados y proceder con ellos globalmente más tarde. En el método siguiente, el método ON ERR CALL se llama al final de la ejecución del método actual. Procede con los errores apilados devueltos por el 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
He aquí una muestra del fichero Errors.xlf traducido al francés:
<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>
El método handleErrors se llama una vez y puede obtener los errores apilados gracias al comando Last errors:
Una variación del modo diferido es llamar al comando throw sin parámetros. Esto es útil en un método ON ERR CALL.
Apila los errores actuales hasta que finaliza el método actual. Entonces se llama al método ON ERR CALL para proceder con los errores apilados.
Encontrará esto en el ejemplo concreto del ID H.
Descargue el IDH para aprender más acerca de cómo los errores pueden ser manejados para proporcionar una retroalimentación adecuada al usuario.