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!
Leave a Reply