Objetivo

Establecer una relación entre:

  • Base Extension: contiene objetos reutilizables (tablas, páginas, enums…)
  • Child Extension: depende de la base para extender o usar esos objetos

Paso 1: Crear y publicar la Base Extension

1.1 app.json del proyecto base

{
  "id": "11111111-1111-1111-1111-111111111111",
  "name": "BASE Extension",
  "publisher": "MyCompany",
  "version": "1.0.0.0",
  "application": "25.0.0.0",
  "platform": "1.0.0.0",
  "runtime": "14.0",
  "idRanges": [
    { "from": 70000, "to": 70099 }
  ]
}

1.2 Tabla de ejemplo en base

table 70000 "Base Setup"
{
    CaptionML = ENU = 'Base Setup', ESP = 'Configuración Base';
    DataClassification = CustomerContent;

    fields
    {
        field(1; "Code"; Code[20])
        {
            CaptionML = ENU = 'Code', ESP = 'Código';
        }
    }

    keys
    {
        key(PK; "Code") { Clustered = true; }
    }
}

1.3 Publicar la extensión

Ctrl + Shift + P → AL: Publish without debugging

Paso 2: Crear la Child Extension y declarar dependencia

2.1 app.json de la extensión child

{
  "id": "22222222-2222-2222-2222-222222222222",
  "name": "CHILD Extension",
  "publisher": "MyCompany",
  "version": "1.0.0.0",
  "application": "25.0.0.0",
  "platform": "1.0.0.0",
  "runtime": "14.0",
  "idRanges": [
    { "from": 70100, "to": 70199 }
  ],
  "dependencies": [
    {
      "id": "11111111-1111-1111-1111-111111111111",
      "name": "BASE Extension",
      "publisher": "MyCompany",
      "version": "1.0.0.0"
    }
  ]
}

2.2 Descargar símbolos

Ctrl + Shift + P → AL: Download Symbols

Paso 3: Usar objetos de la base

Extender tabla desde la extensión child

tableextension 70100 "Base Setup Ext" extends "Base Setup"
{
    fields
    {
        field(50000; "WIP Account Debit"; Code[20])
        {
            CaptionML = ENU = 'WIP Account Debit', ESP = 'Cuenta WIP al Debe';
            TableRelation = "G/L Account";
        }
    }
}

Verificación final

  • ✔ La extensión base está publicada en el entorno
  • ✔ La extensión child compila sin errores
  • ✔ Puedes extender objetos sin problema

Recomendaciones

  • Publica siempre primero la base
  • Versionado coherente en ambas extensiones
  • Evita conflictos de ID usando idRanges separados