In today's article we are going to talk about C/AL, a topic that has gained great relevance in recent years and is of interest to a large number of people. C/AL is a topic that has generated debate and has been the subject of study and research, since its impact covers different areas of society. From its origin to its evolution, C/AL has captured the attention of experts and fans, who seek to understand its complexity and its influence on our daily lives. Throughout this article we will explore the most relevant aspects of C/AL, as well as its importance in various areas of modern life. Join us and discover everything you need to know about C/AL!
This article includes a list of general references, but it lacks sufficient corresponding inline citations. (December 2009) |
This article relies largely or entirely on a single source. (March 2024) |
Paradigm | Imperative |
---|---|
Designed by | Michael Nielsen |
Developer | Microsoft |
Influenced by | |
Pascal |
C/AL (Client/server Application Language) was the programming language used within C/SIDE the Client/Server Integrated Development Environment in Microsoft Dynamics NAV (Formerly known as Navision Attain) and Microsoft Dynamics 365 Business Central up until (and including) version 14. It has been replaced by AL. C/AL is a Database specific programming language, and is primarily used for retrieving, inserting and modifying records in a Navision database. C/AL resembles the Pascal language on which it is based. The original C/AL compiler was written by Michael Nielsen.
This is the classic Hello World example. Since the C/SIDE (Client/Server Integrated Development Environment) does not have a console to output text, this example is made using a dialog box as the visual interface.
MESSAGE('hello, world!');
Variables in C/AL are not defined through code, but are defined via the variable declaration menu in the C/AL editor. In this example Item is assumed to be a variable of type Record.
IF Item.GET('31260210') THEN
MESSAGE(STRSUBSTNO('Item name is: %1',Item.Description));
Item.RESET;
Item.SETRANGE("No.",FromItem,ToItem);
Item.FINDLAST;
Looping over a recordset and modifying the individual records is achieved with only a few lines of code.
Item.RESET;
Item.SETRANGE("Blocked",TRUE);
IF Item.FINDSET THEN
REPEAT
IF Item."Profit %" < 20 THEN BEGIN
Item."Profit %" := 20;
Item.MODIFY(TRUE);
END;
UNTIL Item.NEXT = 0;
Item.MODIFYALL("Blocked",FALSE);