Cómo Evitar Errores Críticos al Clonar Entornos: Configuraciones que se Adaptan Automáticamente al Sandbox
Bienvenidos bibliotecarios😁.
En esta nueva entrada veremos como cambiar valores automáticamente cuándo clonamos un entorno de Producción en un Sandbox.
Cuando trabajamos con entornos en Business Central, la gestión adecuada de las configuraciones entre producción y sandbox es crucial para evitar errores costosos. Al clonar un entorno de producción en un sandbox, no basta con copiar datos y estructuras: es esencial asegurarnos de que ciertas configuraciones exclusivas de producción, como el envío de correos electrónicos a clientes o la conexión con servicios en vivo, se ajusten automáticamente para evitar acciones no deseadas.
En esta entrada, exploraremos cómo implementar un mecanismo que, al clonar un entorno, detecte y modifique automáticamente configuraciones sensibles para que sean seguras en el entorno de prueba.
Bien, imaginemos que tenemos en configuración de ventas y cobros un check, el cual si se encuentra marcado al registrar una factura de venta automáticamente se envía un correo electrónico al cliente con esa factura. Es crucial que esta configuración solo esté activa en producción, no podemos estar enviando a clientes correos con facturas ficticias, más de uno podría llevarse algún susto😅.
Bien veamos un ejemplo rápido, y como solucionar esto con un simple evento de suscripción:
Para ello he creado rápidamente un campo en la configuración de ventas y cobros y lo he mostrado por pantalla.
tableextension 50000 "BBC Sales & Receivables Setup" extends "Sales & Receivables Setup"
{
fields
{
field(50000; "BBC Send Email To Post Inv."; Boolean)
{
DataClassification = CustomerContent;
Caption = 'Send Email to Post Invoice', Comment = 'ESP="Enviar correo electrónico al registrar factura"';
}
}
}
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.")
{
ApplicationArea = All;
}
}
}
}
Bien, hecho esto el evento que necesitamos para realizar esta función es OnAfterCopyEnvironmentToSandbox.
Este evento se encuentra en la codeunit 2000000012 «Environment Triggers».
codeunit 2000000012 "Environment Triggers"
{
SingleInstance = true;
trigger OnRun()
begin
end;
[BusinessEvent(false)]
procedure OnAfterCopyEnvironmentToSandbox()
begin
end;
[BusinessEvent(false)]
procedure OnAfterCopyEnvironmentToSandboxPerCompany()
begin
end;
[BusinessEvent(false)]
procedure OnAfterCopyEnvironmentPerDatabase(SourceEnvironmentType: Option Production,Sandbox; SourceEnvironmentName: Text; DestinationEnvironmentType: Option Production,Sandbox; DestinationEnvironmentName: Text)
begin
end;
[BusinessEvent(false)]
procedure OnAfterCopyEnvironmentPerCompany(SourceEnvironmentType: Option Production,Sandbox; SourceEnvironmentName: Text; DestinationEnvironmentType: Option Production,Sandbox; DestinationEnvironmentName: Text)
begin
end;
}
Un aspecto importante a destacar, es que está funcionalidad solo he conseguido replicarla en entornos Saas. No sabría como hacerlo en un entorno Onprem, si esto es posible en ese tipo de entornos, y en caso de que lo fuese, como sabría Business central si el entorno es producción o es un entorno de pruebas. Si sabéis algún tipo de información al respecto no dudéis en dejarla en los comentarios😁.
Nuestro código sería el siguiente:
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;
}
En nuestro código recorremos todas las empresas, poniendo en cada una de ellas el campo a false para que en nuestro entorno de Sandbox, el campo permanezca a false y con ello nuestra seguridad de que no enviaremos nada por error😁.
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