Optimiza y Da Formato a tu Código en AL con 3 Comandos Clave
Bienvenidos bibliotecarios😁.
Cuando realizamos una migración desde versiones anteriores de Business Central o desde NAV hacia versiones modernas, es común encontrarnos con un problema recurrente: el código heredado no sigue las mejores prácticas de formato actuales. Palabras clave en mayúsculas, nombres de funciones sin estandarizar y estructuras que no cumplen con las convenciones modernas pueden dificultar la legibilidad y el mantenimiento del código.
Lo más notable desde mi experiencia, son las palabras claves en mayúsculas, la falta de paréntesis tras la llamada a una función y la falta de ApplicationArea en page, campos de pageextension, reports y campos de requestpage. Esto último causa un error al intentar publicar en un entorno de producción de entornos Saas, por lo que para ahorrarnos tiempo mejor usar está función😁.
Necesitaremos la siguiente extensión que podéis encontrar en la tienda de Microsoft siguiendo el siguiente enlace: https://marketplace.visualstudio.com/items?itemName=andrzejzwierzchowski.al-code-outline
O directamente desde el apartado de extensiones de VS Code con el nombre: AZ AL Dev Tools/AL Code Outline.

Una vez instalada la extensión preparemos algunos ejemplos😉. Usaremos una parte del código de la publicación anterior, que si no la habéis visto aun os recomiendo echarle un ojo: https://labibliotecadebc.com/como-evitar-errores-criticos-al-clonar-entornos-configuraciones-que-se-adaptan-automaticamente-al-sandbox/

codeunit 50000 "BBC EventSuscriber"
{
[EventSubscriber(ObjectType::Codeunit, Codeunit::"Environment Triggers", OnAfterCopyEnvironmentToSandbox, '', false, false)]
LOCAL PROCEDURE EnvironmentTriggers_OnAfterCopyEnvironmentToSandbox()
VAR
SalesReceivablesSetup: Record "Sales & Receivables Setup";
Company: Record Company;
BEGIN
IF Company.FINDSET THEN
REPEAT
SalesReceivablesSetup.CHANGECOMPANY(Company.Name);
IF SalesReceivablesSetup.GET THEN BEGIN
SalesReceivablesSetup."BBC Send Email To Post Inv." := false;
SalesReceivablesSetup.MODIFY;
END;
UNTIL Company.NEXT = 0;
END;
}
Y esto es solo una pequeña porción de código, imaginad un proyecto entero de warnings que a la hora de compilar ralentizan el proceso.
Para tener un código que sea agradable a nuestros ojos, pulsaremos F1 para abrir la paleta de comandos.
Primeramente pondremos las palabras claves como puede ser IF, END, MODIFY, etc, en minúsculas. Para ello buscaremos en la paleta de comandos lo siguiente: AZ AL Dev Tools: Fix Identifiers and Keywords Case in the Active Project.

Resultado:

codeunit 50000 "BBC EventSuscriber"
{
[EventSubscriber(ObjectType::Codeunit, Codeunit::"Environment Triggers", OnAfterCopyEnvironmentToSandbox, '', false, false)]
local procedure EnvironmentTriggers_OnAfterCopyEnvironmentToSandbox()
var
SalesReceivablesSetup: Record "Sales & Receivables Setup";
Company: Record Company;
begin
if Company.FindSet then
repeat
SalesReceivablesSetup.ChangeCompany(Company.Name);
if SalesReceivablesSetup.Get then begin
SalesReceivablesSetup."BBC Send Email To Post Inv." := false;
SalesReceivablesSetup.Modify;
end;
until Company.Next = 0;
end;
}
Seguidamente añadiremos los paréntesis a las funciones convirtiendo Modify en Modify().
Buscaremos en la paleta de comandos lo siguiente: AZ AL Dev Tools: Add Missing Parentheses to the Active Project

Resultado:

codeunit 50000 "BBC EventSuscriber"
{
[EventSubscriber(ObjectType::Codeunit, Codeunit::"Environment Triggers", OnAfterCopyEnvironmentToSandbox, '', false, false)]
local procedure EnvironmentTriggers_OnAfterCopyEnvironmentToSandbox()
var
SalesReceivablesSetup: Record "Sales & Receivables Setup";
Company: Record Company;
begin
if Company.FindSet then
repeat
SalesReceivablesSetup.ChangeCompany(Company.Name);
if SalesReceivablesSetup.Get then begin
SalesReceivablesSetup."BBC Send Email To Post Inv." := false;
SalesReceivablesSetup.Modify;
end;
until Company.Next = 0;
end;
}
Por último veremos como añadir ApplicationArea a todos los elementos del proyecto que lo necesitan. Usaremos esta pageextension como ejemplo.

pageextension 50001 "BBC Sales & Receivables Setup" extends "Sales & Receivables Setup"
{
layout
{
addlast(General)
{
field("BBC Send Email To Post Inv."; Rec."BBC Send Email To Post Inv.")
{
}
}
}
}
Si esta pageextension quedara así, e intentásemos publicarla en un entorno de producción SaaS, nos daría un error, ya que el campo de la pageextension debe de tener obligatoriamente en estos entornos un valor de ApplicationArea.
Para solucionar esto de manera rápida, buscaremos en la paleta de comandos: AZ AL Dev Tools: Add Application Areas to the Active Project.

Seleccionamos el valor de ApplicationArea que queremos asignar. En nuestro caso asignaremos el valor All, aunque contamos con los valores Basic, FixedAsset, All y Custom.

Resultado:

Otros casos para los que tenemos comandos bastante útiles es para eliminar los begin end innecesarios.
Eliminar begin end innecesarios: AZ AL Dev Tools: Remove Begin..End around Single Statements from the Active Project.

Espero que os haya sido te utilidad😜.
Si no te quedó algo claro, o tienes algún tipo de duda podéis dejarla en los comentarios o escribirnos a info@labibliotecadebc.com.
Recuerda seguirnos en Linkedin https://www.linkedin.com/in/la-biblioteca-de-business-central-64467532a/ y suscribirte a nuestra newsletter para no perderte ninguna publicación.
¡Ahora te toca a ti!😎
¡Un saludo!😁
LA BIBLIOTECA DE BC