Almacenando JSON en un Blob en Business Central: ¡Guarda y Recupera Datos como un Profesional!

Descubre cómo almacenar y recuperar datos JSON en un campo Blob en Microsoft Dynamics 365 Business Central mediante AL.

Los datos en formato JSON son clave en muchas integraciones y procesos dentro de Microsoft Dynamics 365 Business Central. Si necesitas almacenar JSON en un campo Blob dentro de una tabla, este post te guiará paso a paso en cómo hacerlo mediante una extensión de tabla. Implementaremos dos procedimientos: SetJsonRecived para guardar datos y GetJsonRecived para recuperarlos.

¡Vamos manos a la obra! 😤


🏗️ Extensión de la tabla “Customer”

El siguiente código crea una extensión de la tabla “Customer”, añadiendo un nuevo campo Blob para almacenar datos en formato JSON.

tableextension 58001 "SetAndGetBlob" extends "Customer"
{
    fields
    {
        field(58001; "Json Recived"; Blob)
        {
            Caption = 'Json', Comment = 'ESP="Json"';
            DataClassification = CustomerContent;
        }
    }

🔍 ¿Qué hace esta extensión?

  1. Extiende la tabla “Customer” agregando un nuevo campo de tipo Blob llamado "Json Recived".
  2. Define la clasificación de datos con DataClassification = CustomerContent;, asegurando el cumplimiento con regulaciones de privacidad.

Esto permite almacenar JSON en un campo Blob, que es ideal cuando los datos pueden ser extensos y no caben en un simple campo Text.


✍️ Procedimiento para Guardar JSON en el Blob

Para guardar datos JSON en el campo Blob, se usa el siguiente procedimiento:

    procedure SetJsonRecived(NewValue: Text)
    var
        OutStream: OutStream;
    begin
        Clear(Rec."Json Recived");
        Rec."Json Recived".CreateOutStream(OutStream, TEXTENCODING::UTF8);
        OutStream.WriteText(NewValue);
        Rec.Modify();
    end;
  1. Clear(Rec."Json Recived") → Limpia cualquier dato previo en el campo Blob.
  2. CreateOutStream(OutStream, TEXTENCODING::UTF8) → Crea un flujo de salida (OutStream) con codificación UTF-8.
  3. OutStream.WriteText(NewValue) → Escribe el contenido JSON en el flujo.
  4. Rec.Modify() → Guarda los cambios en la base de datos.

Con este procedimiento, podemos guardar cualquier cadena de texto en formato JSON dentro del campo Blob.


📥 Procedimiento para Recuperar el JSON

El siguiente procedimiento extrae los datos JSON guardados en el campo Blob:

    procedure GetJsonRecived() ReturnValue: Text
    var
        TypeHelper: Codeunit "Type Helper";
        InStream: InStream;
    begin
        Rec.CalcFields("Json Recived");
        Rec."Json Recived".CreateInStream(InStream, TEXTENCODING::UTF8);
        exit(TypeHelper.TryReadAsTextWithSepAndFieldErrMsg(InStream, TypeHelper.LFSeparator(), FieldName(Rec."Json Recived")));
    end;
  1. Rec.CalcFields("Json Recived") → Calcula el campo Blob antes de su lectura.
  2. CreateInStream(InStream, TEXTENCODING::UTF8) → Crea un flujo de entrada (InStream) para leer los datos.
  3. TryReadAsTextWithSepAndFieldErrMsg(...) → Convierte los datos en texto utilizando el separador de línea (LFSeparator()).
  4. exit(ReturnValue) → Retorna el contenido del campo Blob en formato texto.

Esto permite recuperar los datos JSON almacenados y utilizarlos en el código de Business Central.


🚀 Beneficios y Aplicaciones Prácticas

Facilita la integración con APIs externas que manejan JSON.
Optimiza el almacenamiento, ya que el campo Blob es más eficiente para datos grandes.
Garantiza compatibilidad UTF-8, asegurando que los datos se almacenen y recuperen correctamente.
Evita problemas de truncado, que pueden ocurrir con campos de tipo Text.

Este método es ideal para integraciones, logs de datos o almacenamiento temporal de estructuras JSON dentro de Business Central.


📌 Conclusión

Al extender la tabla “Customer” con un campo Blob, podemos almacenar y recuperar datos JSON de forma eficiente. Esto es útil en integraciones, registros de auditoría y almacenamiento temporal. Si necesitas manejar JSON dentro de Business Central, este enfoque es una solución robusta.

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

¡Nos vemos en el próximo post!

Share your love

Leave a Reply

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