01 - Desarrollo de Business Central desde cero: Tablas I - Business Central

Breaking

jueves, 23 de junio de 2022

01 - Desarrollo de Business Central desde cero: Tablas I

En este tutorial estamos aprendiendo a desarrollar en Business Central, por lo que te recomiendo que si no lo has hecho, revises el post anterior https://blog.msdyn365bc.es/2022/05/esarrollo-en-business-central-desde-cero.html donde podrás aprender a realizar tu primer "Hello World".



Conceptos básicos

Vamos a empezar a crear tablas pero antes debemos de tener claros ciertos conceptos importantes.

Entornos.  Un entorno, como vimos en el post anterior, es una instancia de Business Central.  Eso significa que son aislados y por tanto, lo que desarrolles en uno no afecta a los otros.  Esto es especialmente importante para trabajar en un entorno de "desarrollo" o "pruebas" y que no afecte al entorno de producción.  Si eres totalmente principiante, te recomiendo que te crees un entorno para tí, separado de los entornos de producción o de tu partner.  Así podrás trabajar sin molestar y sin que te molesten.

Empresas.  Business Central es un software Multi-empresa.  Eso quiere decir que puedo crear muchas empresas en el mismo entorno.   Pero en este caso, lo que se desarrolla en un entorno, afecta a todas las empresas.  Es decir, si creo un campo para la empresa A con una lógica de negocio, ese campo también estará en la empresa B, con la misma lógica.  Podremos hacer que el campo no se vea y/o que no se use, pero el campo estará.  

Objetos. En Business Central, podemos encontrar diferentes objetos que podemos desarrollar, como son:

Tablas: Donde almacenamos la información.  Una tabla no es visible directamente para el usuario por lo que necesitaremos Pages para poder mostrarlos.

Pages:  Permiten visualizar los datos.

Reports: Para resumir y mostrar datos impresos.

XMLPorts : Para importar o exportar datos en XML

Queries: Permite realizar consultas.

Codeunits: Para realizar consultas.

Con las nuevas versiones, se han ido incrementando los objetos, pero para empezar, con estos nos bastaría.

Lenguaje: Para el desarrollo de Business Central, se utiliza el lenguaje AL, heredero de C/AL y Report Builder para el diseño de los layouts de los reports.

Localizaciones.  Microsoft desarrolla una versión de Business Central global, pero cada país tiene especialidades, habitualmente a nivel contable. En España tenemos el IVA, la cartera, el SII,..., temas que en USA o India no tienen, o al menos, no con las mismas características.  Por ello, Microsoft localmente o bien algún partner muy especializado, realiza una ampliación del Business Central Global, para adaptarlo a la legislación de cada pais.  

Extensiones.  En Business Central, se desarrollan extensiones.   Esto es, ampliamos la funcionalidad estandar con nuevas características, pero NO tocamos (no seré yo el que os enseñe a modificar) el original.  De esta forma, Microsoft puede actualizar el nucleo a las nuevas versiones sin verse afectado por las extensiones desarrolladas por terceros.  Las extensiones se pueden publicar en un MarketPlace llamado AppSource para que cualquier usuario de Business Central pueda descargarlas y usarlas (bien gratis o bien pagando), pero también se pueden desarrollar para un cliente o para nuestra instalación y subirla directamente al entorno (también llamado tenant).  La forma de desarrollar es la misma, pero para publicarlas en AppSource, Microsoft hace una serie de comprobaciones, no solamente técnicas, mucho más exigentes, debiendo pasar un proceso de validación.

Extensiones instaladas en nuestro entorno


Numeraciones.  Cada objeto desarrollado en Business Central se identifica con un número.  Ese par TipoObjeto-Número debe de ser único en nuestro entorno.  Para evitar colisiones entre lo que ha desarrollado Microsoft, lo que desarrolla un ISV (un desarrollador de soluciones que las publica en el Appsource) y lo que desarrolle nuestro partner o nosotros mismos, existen unas reglas.

Del 1 al 49.999: son numeraciones utilizadas por Microsoft y las localizaciones.
Del 50.000 al 99.999: corresponden a los desarrollos del cliente o del partner.
Del 100.000 en adelante, las reparte Microsoft para productos especiales, para objetos del sistema o bien para que los fabricantes de aplicaciones (ISVs) puedan desarrollar sus extensiones sin que entren en conflicto con las de otros.  

Nosotros trabajaremos en el rango del 50.000 al 99.999.  Si quisieras en algún momento desarrollar para realizar una extensión y publicarla en el AppSource, necesitaríamos solicitar un rango de números a Microsoft.  De momento, este caso no lo vamos a tratar aquí.
Extensiones en el AppSource


Propiedades.  Cada elemento en Business Central tiene propiedades.  Algunas son muy básicas (el nombre de la tabla, si un campo es editable,...) otros no lo serán tanto.

Triggers.  Los desencadenadores (Triggers) ejecutan un trozo de código cuando ocurre algo (cuando se inserta un registro en una tabla, cuando se borra, cuando se abre una página,...)

Fields.  Los campos (fields) son la unidad de almacenamiento más pequeña.  Los campos componen los registros (records) y estos componen las tablas.

Controles.  Los controles nos permiten mostrar un campo en una página o en un report.

Eventos.  Los eventos son unos triggers especiales que se ejecutan cuando se dá una situación.  Se utilizan para que podamos alterar la funcionalidad estandar de Business Central, sin tener que tocar el código base.

Creando tablas en Business Central

Para crear una tabla nueva para Business Central, deberemos de realizar los siguientes pasos:

- Crear una extensión y definir el fichero App.json
- Diseñar la tabla
- Diseñar una pagina para poder mostrar los datos
- Publicar la extensión en el entorno.

AL:GO

Para crear una extensión en VSCode, usamos el comando AL:GO (como vimos en el post anterior) y nos crea una serie de ficheros que son muy importantes de cara a nuestra extensión.

Estructura de ficheros generada


Carpeta .alpackages


Incluye los objetos base del estandar (símbolos) para la que estamos desarrollando.  Esto quiere decir, que si nuestro entorno en SaaS es una versión 20.2, nos descargará todas las tablas, páginas, codeunits,... de esa versión en la carpeta .alpackages.  Es de suma importacia disponer de esos elementos, ya que sin ellos no podemos interrelacionarnos con Business Central base:  No podemos seleccionar un cliente o un producto del estandard.

En caso de que por algún motivo la carpeta está vacia, debemos intentar descargarlos manualmente mediante el comando AL:Download symbols


Si ha acabado correctamente, veremos el mensaje "All reference symbols have been downloaded"


Carpeta .VSCode

En esta carpeta encontraremos el fichero lunch.json.  Este fichero va a contener la configuración que nos permite conectarnos a nuestro Business Central y donde vamos a publicar nuestra extensión para probar.



Por ahora, los parámetros que nos interesa conocer y en su caso modificar serían:

environmentType:  El tipo de entorno en el que estoy trabajando (Producción o Sandbox)
environmentName: El nombre del entorno.  Por defecto nos pone "sandbox", pero deberá de ser el "name" que aparezca en vuestro admin center:

App.json



El fichero app.json es el fichero que configura nuestra extensión.  Iremos viendo a lo largo del curso más parámetros, pero de momento nos van a interesar los siguientes:

"id": "e7dd1e23-e7fd-495e-8ea0-8a015e1f38d7",
  "name": "01-Tablas",
  "publisher": "Default publisher",
  "version": "1.0.0.0",

id: identifica la extensión.  No puede haber dos extensiones con el mismo id.
name:  El nombre de nuestra extensión.
publisher: Vuestro nombre, la empresa que desarrolla la extensión.
version: La versión de vuestra extensión.

Esta información aparecerá en Business Central, una vez instalada.


Podremos añadir un logo, una descripción,... pero para empezar, vamos a hacer que funcione y luego ya le haremos marketing.

"idRanges": [
    {
      "from": 50100,
      "to": 50149
    }
  ]

idRanges.  Son los rangos de números que podemos usar en nuestra extensión.  Tal y como indicaba más arriba, las numeraciones para los desarrolladores de la propia empresa o los partners, van desde el 50.000 al 99.999.   Por defecto nos pone del 50100 al 50149, pero recuerda que si ya has realizado otras extensiones, no pueden coincidir en el mismo tenant.

Con esto, ya tenemos configurada nuestra extensión y estamos preparados para desarrollarla.

helloworld.al

El desarrollo de Business Central está basado en ficheros de texto.  Cada vez que queramos desarrollar un objeto (una tabla, una página, una codeunit,...), crearemos un fichero.  En VSCode usaremos la extensión .al para los ficheros que usemos en nuestra extensión.

Por defecto, al crear la estructura de archivos, VSCode nos crea un fichero llamado helloworld.al como ejemplo.  Nosotros borraremos el contenido para empezar a realizar nuestra tabla.  También podrías borrarlo y crear añadir un fichero nuevo:


Diseñar una tabla

Para facilitarnos el desarrollo y evitar tener que escribir todo desde cero, VSCode nos suministra snippets.  Son unos asistentes que nos permiten acelerar el desarrollo.  En nuestro caso, como queremos desarrollar una tabla, usaremos el snippet ttable:


Al seleccionar este snippet, nos genera la estructura básica de una tabla.


El cursor se situa en id.  Allí tendremos que poner el número de nuestra tabla y seguidamente el nombre:


Recuerda que el número debe estar en el rango que hemos elegido en el fichero app.json.

El nombre de la tabla debe tener como máximo 30 caracteres y no debe coincidir con ninguna que tenga Business Central.  Por ejemplo no podemos nombrar una tabla propia como Customer o Item, puesto que la versión estandard ya tiene tablas llamadas así.  Hablaremos más adelante de los prefijos y sufijos para evitar que nuestros desarrollos coincidan con los de otros (al final somos poco originales con los nombres).

Otra característica de los nombres, es que pueden tener espacios, acentos, etc siempre que estén entre comillas dobles.

Fields.  Los fields son los campos de nuestra tabla.  El snippet nos ha creado uno de ejemplo, que podemos borrar o reutilizarlo.  Lo normal es que añadamos más campos:



Los campos (fields) tienen tres propiedades básicas:

Número:  Indica el número del campo.
Nombre:  El nombre del campo.  Al igual que los nombres de las tablas, pueden tener hasta 30 caracteres y pueden contener espacios si los ponemos entre comillas dobles.
Tipo:  El tipo del campo nos indica que tipo de valores va a contener.  De momento vamos a ver estos cuatro mostrados aquí:

        Integer:                 Número entero
        Text [longitud] :     Alfanumérico de la longitud indicada
        Decimal:               Números decimales
        Boolean:               Valores booleanos de true / false

Para poder ver algo rápido (los desarrolladores somos impacientes) no vamos a ver más.

También añade una propiedad de los campos llamada DataClassification.  Por el momento, vamos a usar ToBeClassified para todos.

TIP.  He dejado el nombre del primer campo como MyField a proposito para no tener que explicar las claves (keys) por ahora y evitar que nos de un error de compilación.

Si tenemos algún error, nos aparecerá en rojo.  En caso contrario podemos continuar.

Diseñar una page

Las tablas almacenan datos, pero Business Central no nos permite visualizarlas directamente, por lo que para que podamos ver el contenido usaremos las Pages.  Tenemos muchos tipos de Pages, pero eso ya lo veremos en el tema que haremos sobre ellas.  Aquí vamos a usar una de tipo Lista.

Para ello, crearemos un nuevo fichero con extensión .al y usaremos el snippet tpage seleccionando la de Page of type List:


Una vez seleccionado cumplimentaremos el número de página, el nombre, así como los campos a mostrar:



Debemos añadir una propiedad más a las que nos pone el snippet por defecto que será "Caption".  El caption es la etiqueta que veremos en Business Central cuando busquemos en la lupa.

No entro en el detalle de la Page, puesto que lo veremos más detenidamente.  Por ahora, escribe el campo que quieres mostrar tal y como se indica en la imagen.

Publicar nuestra extensión


Si todo ha ido bien (no tenemos ningún subrayado en rojo) significa que podemos compilar y publicar la extensión en nuestro Sandbox.

Para ello, usaremos el menú Ejecutar - Iniciar depuración o la tecla F5.


Esta acción compilará la extensión, creará el fichero .app y la publicará en el entorno Sandbox que habíamos seleccionado en el fichero lunch.json.


Una barra de color naranja aparecerá en la parte inferior de VSCode indicando que estamos en depuración y nos abrirá el entorno de Sandbox para que podamos probar nuestra extensión.  Si buscamos en la lupa por el valor de la propiedad caption que le hemos puesto en la Page, allí encontramos nuestro desarrollo.


Y por tanto, la tabla que acabamos de crear, la cual está totalmente operativa para poder rellenar.  En caso de que no esté editable puedes pulsar en "Editar lista"



Resumen


En este post hemos visto algunas características de la estructura de archivos creada en VSCode cuando desarrollamos una extensión así como algunas de las propiedades de las tablas y de los campos para realizar nuestra primera tabla y mostrarla en Business Central.  Próximamente, mejoraremos esta extensión y veremos más detalladamente la creación de otros tipos de campos.

Puedes ver en mi canal el video con la explicación:



Si quieres descargar los ejemplos, puedes hacerlo desde github:




No hay comentarios: