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

Hola bibliotecario, 👋
Encantados de conocerte.

Déjanos tu correo para enviarte nuestro boletín con todas las novedades! 😁
(Domingos 18:00)

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Translate »