AX7 - 1/5 Delegates

¿Qué es un delegado?

Simplificando la respuesta, podríamos decir que un delegado es una función que sólo contiene la declaración que deberá tener cualquier método que quiera estar suscrito a éste.
Lo que hacemos es relacionar los métodos con las definiciones de delegados y cuando se ejecute el delegado se dispararán, como en los eventos, todos los métodos asociados a éste.
Los delegados no realizan ninguna acción, sólo sirven para definir la estructura que deberá tener el método que lo podrá llamar.



¿Cómo declaramos un delegate?

Para declarar un delegate se deben seguir los siguientes pasos:

1.-La palabra clave Delegate
2.-No devuelve nada para eso utilizaremos el tipo void
3.-Debe ser un método sin código

A continuación tenemos un ejemplo:

delegate void getCurrencyNameDelegate(CompanyId _companyId, EventHandlerResult _result) { }


En este ejemplo se le pasa por parámetros un valor para la variable companyId y como esperamos que nos devuelva algo utilizamos la clase EventHandlerResult. Como he dicho cualquier método que quiera utilizar este delegate deberá tener estos dos mismos parámetros.


¿Y cómo lo podemos utilizar?

Añadiendo como atributo a un método la palabra clave SubscribesTo, el método quedará ligado a ese delegado.

Aquí tenemos un ejemplo en el cual se puede ver la manera de añadir un atributo; en éste se le indica la clase y delegado a la que irá ligado el método.

[SubscribesTo(classstr(BIFrameworkDelegates), delegatestr(BIFrameworkDelegates, getCurrencyNameDelegate))]


Aquí tenemos el ejemplo entero donde podemos ver que al método se le ha añadido el atributo y observar que los parámetros del método son los mismos que los del delegado.

[SubscribesTo(classstr(BIFrameworkDelegates), delegatestr(BIFrameworkDelegates, getCurrencyNameDelegate))]
    public static void getCurrencyNameDelegateHandler(CompanyId _companyId, EventHandlerResult _result)
    {
     .....
    }


En el momento qué por código llamemos al delegado BIFrameworkDelegates, automáticamente se ejecutará el método getCurrencyNameDelegateHandler;

Comentarios