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:
Publicar un comentario