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