C/AL (Client Application Language) es el lenguaje de programación utilizado en el entorno de desarrollo integrado cliente/servidor (C/SIDE) incluido en Dynamics NAV (Navision).
El lenguaje de programación C/AL se puede encontrar en cualquier objeto de la aplicación Dynamics NAV. Tipos de objeto:
- Tablas
- Formularios
- Informes
- Puerto de datos
- Menús
- De documentación (que no se ejecutan)
- Eventos
- Funciones
C/AL es un lenguaje de programación específico de base de datos, y se utiliza principalmente para recuperar, insertar y modificar registros en una base de datos de Dynamics NAV. C/AL se asemeja al lenguaje Pascal ya que se basa en él.
Al cambiar la aplicación Dynamics NAV no cambia el ejecutable (el archivo exe), pero sí los objetos que se almacenan en la base de datos que contiene, y no sólo la definición de tablas, formularios, informes y puerto de datos, sino también la lógica de negocio necesaria para ejecutar la aplicación ERP Dynamics NAV.
Multi-idioma
Dynamics NAV está disponible en varios idiomas. Esto significa que los desarrolladores deben tenerlo en cuenta cuando trabajan en la aplicación. El propósito del entrono multilenguaje es para facilitar la traducción y que sea posible cambiar de un idioma a otro en la interfaz de usuario para que, por ejemplo, un alemán y un sueco puede trabajar juntos en su propio idioma en la misma base de datos.
¿Cuál es su utilidad?
Hay muchos propósitos para los cuales puede utilizarse este lenguaje de programación. Sin embargo, muchos de estos usos se manejan mediante el uso de los objetos estándar de C/SIDE. Por ejemplo:
- La presentación de los datos se realiza a través de los objetos de formulario y objetos de informe.
- La adquisición de datos se maneja principalmente a través de objetos de formulario y objetos de puerto de datos.
- El almacenamiento de datos y la organización está a cargo de los objetos de tabla junto con el sistema de gestión de bases de datos (DBMS) incorporada.
En C/SIDE, el propósito principal del lenguaje de programación es la manipulación de datos. A través de C/AL, puede crear reglas de negocio para asegurar que los datos almacenados en las tablas son íntegros y coherentes con la forma en que la empresa hace negocios. Se pueden agregar nuevos datos o transferir datos de una tabla a otra (por ejemplo, de un diario a un registro). Si los datos de varias tablas necesitan ser combinados en un informe o mostrados en un formulario, es probable que se necesite programarlo.
Otro propósito de C/AL es para controlar la ejecución de varios objetos C/SIDE. Con C/AL es posible coordinarlos de manera que cumpla con los las necesidades de las reglas de negocio.
Web services
Recientemente se ha incorporado la posibilidad de que determinados tipos de objetos pueden ser publicados como web services, con lo que facilita la integración a la lógica de negocio de Navision desde otras aplicaciones, así como el consumo y acceso controlado a los datos, todo ello mediante estándares.
Add-ons
Es posible desarrollar una aplicación add-on para Dynamics NAV, por ejemplo para sectorizar el ERP (adaptarlo a un tipo de negocio). Para hacerlo, es posible que aparte de añadir nuevos objetos, se deban hacer unos pocos cambios en los existentes. Estos cambios pueden variar de un sencillo botón en uno de los menús a los cambios más complicados en las tablas y el código C/AL asociado.
Uno de los objetivos de un desarrollador de aplicaciones add-on debe ser el desarrollo de la aplicación de una manera que las actualizaciones de base o complementarias sean lo más automáticas posible, de manera que el cliente no tenga por qué contratar a consultores para que tomen cuidado de la actualización.
Ejemplo - Looping and data manipulation
Recorrer un conjunto de registros y su modificación individual se logra con unas solas líneas de código. En este ejemplo se asume que “Item” es una variable de tipo registro.
Item.SETRANGE("Blocked",TRUE);
IF Item.FINDSET THEN
REPEAT
IF Item."Profit" < 10 THEN BEGIN
Item."Profit %" := 10;
Item.MODIFY(TRUE);
END;
UNTIL Item.NEXT = 0;
Item.RESET;
Item.MODIFYALL("Blocked",FALSE);