Desde la actualización de plataforma 9 en Dynamics 365, podemos usar extensiones de clase sin controladores de eventos usando el concepto de Chain of Command (Línea de Comando)
Esta forma de extensión permite ampliar la lógica estándar de una manera más legible permitiendo acceder a las propiedades, eventos y métodos de las clases originales o clases base, facilitando la creación de transacciones y validaciones complejas.
1. Se realizará un ejemplo en el Módulo de Activos Fijos, donde se agregará un nuevo “Tipo de Transacción” en la ventana estándar de “Perfiles de Contabilización de Activos Fijos”.
2. Existe un filtro estándar que se aplica cada vez que se selecciona la lista desplegable de “Tipo de Transacción”, actualizando la información de la grilla como las columnas Libro, Agrupaciones, Relaciones de cuenta, etc.
3. Para agregar un nuevo “Tipo de Transacción”, se debe buscar en el “Application Explorer” los 2 objetos Enumeraciones:
a. AssetAccountType
b. AssetTransType
y luego dar clic derecho, presionar “Create extensión” para cada uno.
4. Se agrega un nuevo tipo llamado “Attomo FiscalCredit”, y se completa las propiedades principales como Label (Crédito Fiscal) y Name (Attomo FiscalCredit). Esto se debe hacer en las 2 enumeraciones extendidas y realizar la sincronización para aplicar los cambios.
5. Al ejecutar el formulario se notará el nuevo “Tipo de Transacción”, pero no hace la actualización de la grilla.
6. Se deberá buscar la clase estándar “AssetPost” e ir al método
“assetAccountType2AssetTransType”. Como se ve en el código estándar, no realiza la actualización de la información porque no detecta nuestro nuevo tipo de transacción. Para cualquier nuevo tipo de transacción, retornará el valor “None” al final del código.
Se creará una extensión de la clase estándar, para añadir la funcionalidad del nuevo “Tipo de Transacción”. Se llamará “AttomoCAssetPost_Extension”, haciendo referencia a la clase “AssetPost” y agregando al final la palabra “Extension”
COMPLETANDO Y EXPLICANDO EL CÓDIGO…
7. En nuestra nueva clase, colocar la sintaxis para referir la extensión de la clase AssetPost:
[ExtensionOf(classstr(AssetPost))]
final class AttomoCAssetPost_Extension
8. Luego agregar nuevamente el llamado del método, como estaba en el estandar:
public static AssetTransType
assetAccountType2AssetTransType(AssetAccountType _assetAccountType)
9. Revisando la lógica, el nuevo proceso de verificación del nuevo Tipo de Transacción se realizará después del proceso estándar. Para poder ejecutar el proceso estándar se utiliza la palabra “next” seguido del método nuevamente llamado por sus propios parámetros. En este caso devuelve una enumeración por lo que se almacenará en la variable del mismo tipo (AssetTransType assetTransType).
10. Esta parte del código permite detectar el nuevo tipo de transacción permitiendo el correcto flujo del proceso de actualización de información de la grilla, así como el proceso de validación y registro.
case AssetAccountType::AttomoFiscalCredit :
assetTransType = AssetTransType::AttomoFiscalCredit;
11. A continuación, se muestra el código completo, que muestra como se añade el reconocimiento del nuevo tipo de transacción después de haberse ejecutado el proceso estándar “assetAccountType2AssetTransType”. Hay que recordar que el proceso estándar se ejecuta con la palabra “next”.
12. Luego al momento de ejecutar la ventana, y probar el nuevo “Tipo de Transacción”, permitirá actualizar la información de la grilla, así como también la creación de nuevos registros de este nuevo tipo.
Orlando Espinoza
Consultor Técnico Senior / ERP
Attomo Group