AX7 - Extension Methods

Cómo comenté en el post anterior existen objetos los cuales no son extensibles, entre las cuales están las clases.


Pero, sí que existe una forma de modificar una clase sin crear una extension ni utilizar la opción de customize. Esta opción, es la de crear métodos extension los cuales pueden ser aplicados en los siguientes objetos:

- Class
- Table
- View
- Map

Vamos a ver un ejemplo muy simple para entender su funcionamiento.

Me he creado la siguiente clase la cual sólo tiene un método llamado parmName.



Posteriormente he creado una clase llamada igual que la primera(no es necesario) pero con el sufijo _Extension (Esto es obligatorio).

A la que le he creado un método llamado printName.


El siguiente paso ha sido crearse una RunnableClass para realizar una prueba, y como podéis ver en las imágenes, aparece mi método como si existiese en la clase TestExtensionClass.






Si lo ejecutamos vemos que funciona perfectamente.



Lo que debéis tener en cuenta a la hora de crear métodos extension son los siguientes puntos:

1.-La clase debe ser declarada como public static.
2.-Los métodos de la clase deben ser declaradas como public static.
3.-El primer parámetro que recibe el método siempre es el objeto (clase, tabla..) del que extiende.


A continuación vamos a ver el funcionamiento en una tabla.

he añadido la siguiente clase:




y esta RunnableClass



Como vemos en la imagen, el desplegable me muestra el método extension que he creado en mi clase extension.


Lo mismo sucede para el siguiente método, el cual requiere de un parámetro.


Si os habéis fijado, en ninguno de los casos me pide el primer parámetro, ya que éste lo tomará el sistema por defecto.


Vamos lo que sucede al ejecutar el proceso.


El sistema sabe perfectamente donde debe dirigirse.Esto es debido,a que el primer parámetro del método es el que le indica el objeto al que hace referencia, independientemente del nombre que tenga la clase (Excepto el _Extension)



Podemos ver que en la clase principal se ha asignado el custGroup que tenía por defecto en el método initValue_Extension.





Comentarios