12/17 Anular un método

En el anterior post vimos como crear un método y los métodos básicos que se deberían de hacer para crear una tabla.

Hoy explicaremos como anular los métodos que tiene por defecto una tabla y explicaremos su funcionamiento.
Para anular un método nos situaremos encima del nodo métodos y nos dirigiremos a su submenú, una vez en él presionaremos sobre la opción Anular Método, lo que nos desplegará los métodos que se ven en la imagen, con sólo cliclar encima de éste lo anularemos.



A continuación explicaré los métodos más comunes en AX.

Estos métodos son llamados automáticamente cuando trabajamos con formularios o directamente en la tabla pero én el código X++ los tendremos que llamar nosotros.

InitValue:

El método initValue se utiliza para inicializar valores por defecto.



Lo que he hecho es agregar dos campos de fecha en la tabla: el OpenDate y CloseDate, con lo que quiero es que al crear un registro se inicialize por defecto el valor para el campo OpenDate con la fecha actual.



Esto lo conseguirimos anulando el método initValue y en él inicializaremos el valor del campo OpenDate.

Con la palabra "this" accedemos a todos los campos y métodos de la tabla del actual registro y la función systemDateGet() nos devuelve la fecha actual.

this.OpenDate = systemDateGet();



ModifiedField: 

Este método es llamado cada vez que se modifica el valore de un campo (Atención: Solo cuando se modifica en las tablas y formularios).

Para este ejemplo si no lo tenemos ya, nos crearemos un campo llamado active (Que extienda del NoYesId). Y lo que haremos será que cuando asignemos una fecha de cierre para la granja se desmarque el campo active.


Lo primero será explicar el método, ¿Qué es eso que recibe por parámetros de FieldId? Eso es el identificador del campo que se está modificando en ese momento.

Acordaos que cuando hablabamos de los campos os dije que cada campo tiene asignado un Id, éste por ejemplo sería el Id del campo CloseDate.



Así quedaría nuestro método con la modificaciones para realizar lo que comentaba anteriormente..
 ¿Por qué un switch y no un if? Sseamos elegantes si vamos a tener 10 campos mejor un switch que no 10 If else, ¿No?

Como comentábamos le llega por parámetros el Id del campo que se ha modificado, y lo que hace nuestro switch es comprobar si en algún case está nuestro campo.



Vamos a probarlo al modificar el campo closeDate



Como podemos comprobar con el depurador es que está recibiendo el Id del campo close date y la función fieldnum nos devolverá ese mismo valor, por lo que entrará.



Atención a este método que sirve para modificar valores, sólo se deben actualizar campos de la misma tabla tal y como hemos hecho, nada de actualizar campos de otras tablas, ¿Queda claro? Porqué el registro no ha sido guardado y el usuario podría presionar escape y ninguna de las modificaciones se habrían realizado, pero si hemos aprovechado para actualizar datos de otras tablas éstas sí quedarán modificadas, con lo que se producirán incongruencias.


ValidateField:

Éste método tiene la misma estructura que el modifiedField, para el ejemplo lo que he hecho es para el caso que estemos validando cualquiera de los campos de fecha, validar que el campo fecha cierre sea superior al fecha apertura.

Si os fijáis en la imagen devuelve un boleano y la función checkFailed a parte de mostrarnos un mensaje por pantalla retorna un false.





ValidateWrite:

A diferencia del validateField este método se utilizará para validar el registro entero, se llama antes de realizar un insert o update en la tabla.

Como siempre aqui teneís un ejemplo validando que el campo OpenDate esté rellenado.




ValidateDelete:

 Valida que el registro se puede borrar. Como podéis ver es igual que el validateWrite; devuelve un boleano indicando si el registro puede eliminarse.

En el super del método se valida por ejemplo si existen deleteActions restricted que puedan evitar que el registro se elimine.




Tenemos los métodos: insert, update o delete que son llamados cuando se inserta, actualiza o elimina un registro. Los tres tienen el mismo formato, cuando se llama al super es cuando se realiza la acción.


También existen los métodos: doInsert, doUpdate y doDelete que realizan la misma función que los anteriores con la diferencia que éstos últimos no pasan por los métodos: insert, update o delete.
Para que os hagáis una idea, si tuviérais código en el método insert de la tabla y llamárais al doInsert para insertar un registro ese código no se ejecutaría porque no pasa por el insert.


Aquí teneís un ejemplo de como llamar a algunos de los métodos anteriores.




Comentarios