Business Central: No alterar datos en el método OnAfterGetRecord


En este artículo demuestro por qué no debemos alterar (insertar, modificar o eliminar) datos dentro del método de obtención de datos para una grilla en Microsoft Dynamics 365 Business Central.

Versión: 2021 Wave 1 (KID: 5004715)

Resulta que el trigger OnAfterGetRecord se utiliza para obtener datos, además estos datos se van cargando a medida que el usuario navega a través de la grilla. Cuando hace scroll hacia arriba o hacia abajo los datos se van cargando. No necesariamente se cargan TODOS los datos de la tabla al momento de mostrar la grilla.

La vista de Clientes se ve asi al comienzo:

Veamos el siguiente código:

trigger OnAfterGetRecord()
begin
    Rec."Responsibility Center" := 'Test';
end;

Esto no es recomendable porque asignamos un valor a un campo directo en la base de datos. Pero si le agregamos esto:

trigger OnAfterGetRecord()
begin
    Rec."Responsibility Center" := 'Test';
    Modify();
end;

Aquí sí ya tenemos un grave problema, pues por cada registro hará un modificar innecesario.

Solución

Básicamente, utilizar una variable local y asignar su valor a un nuevo campo.

pageextension 50100 CustomerListExt extends "Customer List"
{
    layout
    {
        addbefore("Responsibility Center")
        {
            field(responsabilidad; textoResponsabilidad)
            {
                ApplicationArea = All;
                Caption = 'Centro de responsabilidad';
            }
        }
    }

    trigger OnAfterGetRecord()

    begin
        textoResponsabilidad := 'Test';
    end;

    var
        textoResponsabilidad: Text;
}

De esta manera logramos mostrar los datos necesarios sin afectarlos en la base de datos. Ahora, si queremos cambiar los datos se utilizan otras técnicas veremos más adelante en este Blog.

¡Espero resulte útil!


Ver también