Extendiendo Interfaces y Enums (Business Central 2020) - Business Central

Breaking

domingo, 15 de marzo de 2020

Extendiendo Interfaces y Enums (Business Central 2020)

Nivel: developer


Como extender las Interfaces y Enums en Business Central 2020 (parte 2)

Tal y como os contaba en la entrada anterior (puedes verla aquí), una de las mayores ventajas de las interfaces y de los enums es su facilidad para extenderse sin tener en cuenta la implementación original.

En la entrada de hoy, vamos a comprobar como extender nuestra App anterior.  Según veíamos, nuestra aplicación permitía importar ficheros de texto para crear Clientes y Productos.   Para seleccionar que es lo que queremos importar, usábamos un enum que visualmente es como un tipo de datos Option.



Creando una nueva extensión dependiente.

Lo primero que debemos hacer en VSCode es crear una nueva extensión, que lógicamente va a depender de la que tiene el diseño original del enum y de la interface.

Aunque seguro que todos sabemos como crear nuestra extensión dependiente de otra, lo recordaremos.  Desde el menú de Business Central buscamos Extensiones.  Allí veremos un listado de las extensiones publicadas en nuestro entorno.


Localizamos nuestra extensión anterior.  En mi caso la había llamado Test Rcb.  Una vez allí, pinchamos sobre ella y nos mostrará toda la información necesaria para crear una dependencia.  Esa información de la dependencia la debemos incluir en el fichero App.json de la nueva aplicación.



De esa forma, mi nueva extensión heredará la definición de todos los objetos de la extensión de la que depende al hacer un "Download Symbols", incluyendo la interface y el enum.

Extendiendo el enum.

Una vez que ya tenemos heredado los objetos en la nueva extensión, podemos ampliar nuestro enum.  Para hacerlo usamos el snippet "tenumext", que nos permite extender valores a un Enum ya existente, en nuestros caso TypeOfFile:


Como podemos ver en la línea 1, tenemos el id (50120), el nombre de la extensión (TypeOfFileExtend) y el nombre del enum que extiende (TypeOfFile).

De la misma forma que definíamos cada uno de los valores, ahora añadimos los nuevos (líneas 3 a 12).

Las líneas 6 y 11, nos indican la implementación de nuestra interface que se ejecutará según lo seleccionado.  Recordad que como todavía no hemos diseñado ImportVendors ni ImportResources, nos mostrarán error.   

Si eres de los que le gusta probar para ver como va quedando, cuidado, si no se cumplimentan estas dos líneas (6 y 11) nos dará un error al intentar publicar la extensión.  Así que toca esperar a desarrollar las nuevas codeunits.

Diseñando las nuevas implementaciones de la interface.

Ahora voy a diseñar las nuevas implementaciones.  Es decir, definir la funcionalidad que se realizará cuando se seleccione Proveedores o Recursos.

En mi caso, definiré dos codeunits nuevas: ImportVendors e ImportResources ambas encaminadas a leer un fichero de texto e insertar proveedores o recursos, según el caso.  La funcionalidad interna de la codeunit es muy similar a las vistas en la entrada anterior por lo que no las voy a explicar (pincha aquí si tienes dudas)


La única característica especial es que el encabezado debe incluir "implements ImportFiles".  Es decir, tenemos que indicar que las nuevas codeunits, deben implementar la interface "ImportFiles" y por tanto su procedimiento "ImportFile".

Una vez concluidas las dos codeunits, ya podemos compilar nuestra App y publicarla (recuerda añadir las líneas 6 y 11 en el enum para indicar que implementación se ejecutar en cada selección).



Como vemos, ya nos permite seleccionar las nuevas opciones y además se ejecuta la implementación definida en cada caso:



Conclusión

Como hemos podido ver en ésta y la anterior entrada, la definición de Enums, nos dá una posibilidad muy interesante para extender (y reutilizar) tipos de datos de selección por opción, que los Option no nos permitían.

Si le añadimos las interfaces, disponemos de una gran herramienta para encapsular y hacer crecer nuestra aplicación, añadiendo nuevas implementaciones conociendo solamente los procedimientos definidos en ellas.

Al final son nuevas técnicas de desarrollo que los que venimos del mundo Navision, no estábamos acostumbrados a utilizar y a las que tenemos que perder el miedo.

Cualquier duda, me podéis preguntar en https://www.linkedin.com/in/robertocorella/



No hay comentarios: