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?
- Extiende la tabla “Customer” agregando un nuevo campo de tipo Blob llamado
"Json Recived"
. - 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;
Clear(Rec."Json Recived")
→ Limpia cualquier dato previo en el campo Blob.CreateOutStream(OutStream, TEXTENCODING::UTF8)
→ Crea un flujo de salida (OutStream) con codificación UTF-8.OutStream.WriteText(NewValue)
→ Escribe el contenido JSON en el flujo.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;
Rec.CalcFields("Json Recived")
→ Calcula el campo Blob antes de su lectura.CreateInStream(InStream, TEXTENCODING::UTF8)
→ Crea un flujo de entrada (InStream) para leer los datos.TryReadAsTextWithSepAndFieldErrMsg(...)
→ Convierte los datos en texto utilizando el separador de línea (LFSeparator()
).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!