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

