Automatiza la Migración de Datos entre Empresas en Business Central

Automatiza la migración de datos entre empresas en Business Central con una solución completa que permite exportar e importar tablas específicas mediante archivos JSON. Simplifica la gestión de datos, ahorra tiempo y mejora la eficiencia en entornos multiempresa con una herramienta fácil de usar.

Gestionar varias empresas dentro de Microsoft Dynamics 365 Business Central puede ser complejo, especialmente cuando es necesario migrar tablas de datos de una compañía a otra. Para resolver este desafío, te presento una solución completa que permite exportar e importar datos de tablas específicas entre empresas de manera sencilla y automatizada. Esta funcionalidad sirve para copiar datos entre empresas, ya sean del mismo tenant o diferente, ja que lo que va ha realizar es una extracción de los datos de la tabla en un Json, para después ser importados.

Esta funcionalidad utiliza la codeunit “Mgt. Exp/Imp Table To Json”, que ya te mostré en un post anterior.

¡Vamos manos a la obra! 😜


🔍 Configurando la Migración de Tablas

Para iniciar, se ha creado la tabla 51002 “Setup Table Migr. InterCompany”, que permite definir qué tablas serán migradas entre las distintas empresas. Esta tabla almacena el ID y el nombre de cada tabla seleccionada para la migración.

table 51002 "Setup Table Migr. InterCompany"
{
    Caption = 'Setup Of Tables To Be Migrated Between Companies';
    DataClassification = CustomerContent;
    DataPerCompany = false;
    LookupPageId = "Setup Table Migr. InterCompany";
    DrillDownPageId = "Setup Table Migr. InterCompany";

    fields
    {
        field(1; "Id Table"; Integer)
        {
            Caption = 'Id Table';
            DataClassification = CustomerContent;
            TableRelation = AllObjWithCaption."Object ID" where("Object Type" = const(table));
        }
        field(2; "Name Table"; Text[250])
        {
            Caption = 'Name Table';
            FieldClass = FlowField;
            CalcFormula = lookup(AllObjWithCaption."Object Name" where("Object ID" = field("Id Table")));
            Editable = false;
        }
    }
    keys
    {
        key(PK; "Id Table")
        {
            Clustered = true;
        }
    }
}

🔎 ¿Qué hace esta tabla?

  • Id Table: Permite seleccionar el identificador de la tabla que se desea migrar.
  • Name Table: Muestra automáticamente el nombre de la tabla seleccionada, facilitando su identificación.

Con esto, se centraliza la configuración de las tablas a migrar.


📤 Exportar Datos a JSON

El siguiente paso es la exportación de los datos. Para ello, se ha creado el procedimiento ExportJsonTables, que genera un archivo JSON con los registros de las tablas configuradas.

La codeunit utilizada la podéis encontrar en el post mencionado.

procedure ExportJsonTables(var SetupTableMigrInterCompany: Record "Setup Table Migr. InterCompany")
var
    MgtExpImpTableToJson: Codeunit "Mgt. Exp/Imp Table To Json";
    RecordRef: RecordRef;
    JsonObject: JsonObject;
begin
    Clear(JsonObject);

    SetupTableMigrInterCompany.Reset();
    if SetupTableMigrInterCompany.FindSet() then
        repeat
            Clear(MgtExpImpTableToJson);
            Clear(RecordRef);
            RecordRef.Open(SetupTableMigrInterCompany."Id Table");

            MgtExpImpTableToJson.AddJsonArray(JsonObject, RecordRef);

        until SetupTableMigrInterCompany.Next() = 0;

    DownloadObject(JsonObject);
end;

🛠️ ¿Cómo funciona?

  1. Recorre las tablas configuradas y abre cada una utilizando RecordRef.
  2. Convierte los datos a JSON mediante la codeunit Mgt. Exp/Imp Table To Json.
  3. Genera un archivo JSON listo para descargar.

📂 Descargar el archivo JSON

local procedure DownloadObject(JObject: JsonObject)
var
    TempBlob: Codeunit "Temp Blob";
    DocOutStream: OutStream;
    DocInStream: InStream;
    FileName: Text;
begin
    FileName := 'Exp/Imp ' + '.json';
    TempBlob.CreateOutStream(DocOutStream);
    JObject.WriteTo(DocOutStream);
    TempBlob.CreateInStream(DocInStream);
    DownloadFromStream(DocInStream, '', '', '', FileName);
end;

Este procedimiento convierte el JSON generado en un archivo descargable, facilitando el proceso para el usuario.


📥 Importar Datos desde JSON

Para completar el flujo, se ha creado el procedimiento ImportJsonTables, que permite cargar datos desde un archivo JSON.

procedure ImportJsonTables()
var
    MgtExpImpTableToJson: Codeunit "Mgt. Exp/Imp Table To Json";
    RecordRefe: RecordRef;
    PrincipalJObject: JsonObject;
    JToken: JsonToken;
    DocInStream: InStream;
    FileName: Text;
begin
    if not UploadIntoStream('', '', '', FileName, DocInStream) then
        exit;

    Clear(MgtExpImpTableToJson);
    Clear(PrincipalJObject);
    PrincipalJObject.ReadFrom(DocInStream);

    MgtExpImpTableToJson.SetOverWrite(true);

    Rec.Reset();
    if Rec.FindSet() then
        repeat
            Clear(RecordRefe);
            Clear(JToken);
            RecordRefe.Open(Rec."Id Table");
            if PrincipalJObject.Get(format(RecordRefe.Number), JToken) then
                MgtExpImpTableToJson.ReadJsonArray(JToken.AsArray(), RecordRefe);

        until Rec.Next() = 0;
end;

🔄 ¿Qué hace este procedimiento?

  1. Carga un archivo JSON mediante UploadIntoStream.
  2. Lee los datos y los asigna a las tablas configuradas.
  3. Inserta los registros respetando la estructura original.

🖥️ Interfaz de Usuario: Página de Configuración

La página 51001 “Setup Table Migr. InterCompany” facilita la selección de tablas y la ejecución de las acciones de exportación e importación.

page 51001 "Setup Table Migr. InterCompany"
{
    ApplicationArea = All;
    Caption = 'Setup Of Tables To Be Migrated Between Companies';
    PageType = List;
    SourceTable = "Setup Table Migr. InterCompany";
    UsageCategory = Administration;

    layout
    {
        area(content)
        {
            repeater(General)
            {
                field("Id Table"; Rec."Id Table") { ApplicationArea = All; }
                field("Name Table"; Rec."Name Table") { ApplicationArea = All; }
            }
        }
    }

    actions
    {
        area(Processing)
        {
            action(ExportJsonTables)
            {
                ApplicationArea = All;
                Caption = 'Export Data';
                Image = Export;

                trigger OnAction()
                var
                    SetupTableMigrInterCompany: Record "Setup Table Migr. InterCompany";
                begin
                    CurrPage.SetSelectionFilter(SetupTableMigrInterCompany);
                    Rec.ExportJsonTables(SetupTableMigrInterCompany);
                end;
            }
            action(ImportJsonTables)
            {
                ApplicationArea = All;
                Caption = 'Import Data';
                Image = Import;

                trigger OnAction()
                begin
                    Rec.ImportJsonTables();
                end;
            }
        }
    }
}

📋 Guía Práctica: Cómo Copiar Tablas entre Empresas

1️⃣ Configurar las tablas a migrar

Accede a la página “Configuración tablas a migrar entre empresas” y selecciona las tablas que deseas copiar.

2️⃣ Exportar los datos

Pulsa el botón “Exportar datos”. Se descargará un archivo JSON con la información seleccionada.

3️⃣ Importar los datos

Cambia a la empresa de destino, abre la misma página y pulsa “Importar datos”. Selecciona el archivo JSON previamente descargado.


🚀 Beneficios de esta solución

  • Ahorro de tiempo: Automatiza la migración de datos.
  • Facilidad de uso: Interfaz intuitiva.
  • Flexibilidad: Selección de tablas específicas.

📝 Reflexión final

Esta solución optimiza la gestión de datos entre empresas en Business Central, simplificando la exportación e importación de información clave mediante archivos JSON.

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

¡Hasta la próxima! 😊

Share your love

Leave a Reply

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