Convierte tus Registros en JSON con esta Función Simple en Business Central

La conversión de registros a formato JSON es una tarea común y muy útil en el desarrollo de aplicaciones en Microsoft Dynamics 365 Business Central. Esto permite una fácil manipulación y transferencia de datos entre diferentes sistemas. A continuación, te mostraré cómo lograr esta conversión con un código sencillo y eficiente en AL.

Código Segmentado y Explicación:

Procedimiento Principal: Ejecute

codeunit 51100 "ConvertRecToJsonSimple"
{
    procedure Ejecute(VarianRec: Variant) JsonText: Text;
    var
        RecRef: RecordRef;
        FieldRefe: FieldRef;
        RecField: Record Field;
        Json: JsonObject;
    begin
        RecRef.GetTable(VarianRec);
        RecField.SetRange(RecField.TableNo, RecRef.Number);
        RecField.SetFilter(Type, '<>%1&<>%2&<>%3&<>%4&<>%5', RecField.Type::BLOB, RecField.Type::DateFormula, RecField.Type::GUID, RecField.Type::Media, RecField.Type::MediaSet);
        RecField.SetFilter(ObsoleteState, '<>%1&<>%2', RecField.ObsoleteState::Removed, RecField.ObsoleteState::Pending);
        if RecField.FindSet() then
            repeat
                FieldRefe := RecRef.Field(RecField."No.");

                if RecField.Class = RecField.Class::FlowField then
                    FieldRefe.CalcField();

                Json.Add(RecField.FieldName, format(FieldRefe.Value));
            until RecField.Next() = 0;
        Json.WriteTo(JsonText);
    end;
}

Obtener la Referencia del Registro

RecRef.GetTable(VarianRec);

La función GetTable obtiene una referencia del registro (RecRef) a partir del parámetro VarianRec pasado a la función Ejecute. Esto permite trabajar de manera dinámica con el registro proporcionado.

Filtrar los Campos del Registro

RecField.SetRange(RecField.TableNo, RecRef.Number);
RecField.SetFilter(Type, '<>%1&<>%2&<>%3&<>%4&<>%5', RecField.Type::BLOB, RecField.Type::DateFormula, RecField.Type::GUID, RecField.Type::Media, RecField.Type::MediaSet);
RecField.SetFilter(ObsoleteState, '<>%1&<>%2', RecField.ObsoleteState::Removed, RecField.ObsoleteState::Pending);

Aquí, se establecen los filtros para excluir ciertos tipos de campos (como BLOB, DateFormula, GUID, Media y MediaSet) y estados obsoletos (Removed y Pending). Esto asegura que solo los campos relevantes se incluyan en la conversión a JSON.

Iterar y Convertir los Campos

if RecField.FindSet() then
    repeat
        FieldRefe := RecRef.Field(RecField."No.");

        if RecField.Class = RecField.Class::FlowField then
            FieldRefe.CalcField();

        Json.Add(RecField.FieldName, format(FieldRefe.Value));
    until RecField.Next() = 0;

Este bloque de código itera sobre los campos del registro filtrado. Para cada campo:

  • Se obtiene la referencia del campo (FieldRefe).
  • Si el campo es un FlowField, se calcula su valor.
  • Se añade el campo al objeto JSON con su nombre y valor formateado.

Escribir el JSON Resultante

Json.WriteTo(JsonText);

Finalmente, el objeto JSON se convierte en texto y se almacena en la variable JsonText.

Este procedimiento en AL para convertir registros en JSON es una herramienta poderosa para desarrolladores en Business Central. Proporciona una manera eficiente de manejar y transferir datos en un formato ampliamente aceptado y fácil de manipular.

Si quieres ver el código completo, está en GitHub.

¡Espero que encuentres útil este post y que te ayude a mejorar tus proyectos en Business Central! ¡Hasta la próxima!

Comparte tu aprecio

Leave a Reply

Your email address will not be published. Required fields are marked *