Definizione degli oggetti estensione nella stessa app dell'oggetto base
Un oggetto estensione permette, tra le altre cose, di aggiungere nuovi campi, azioni e layout a una pagina esistente oppure di aggiungere elementi dati, colonne, pagine di richiesta e layout a un report esistente. Con l'estensione enumerazione è possibile aggiungere nuovi valori a un'enumerazione esistente.
Affinché un oggetto base sia estensibile, deve essere contrassegnato con la proprietà Extensible = true;. Il valore predefinito per tutti gli oggetti è che siano estensibili. Pertanto non è necessario specificare esplicitamente questa proprietà nel codice.
Di seguito sono elencati i diversi oggetti estensione che è possibile creare in AL.
Estensione tabella
- Aggiungere altri campi a una tabella esistente.
Estensione pagina
- Aggiungere campi, azioni e layout a una pagina esistente.
Estensione report
- Aggiungere elementi dati, colonne, pagine di richiesta e layout a un report esistente.
Estensione enumerazione
- Aggiungere nuovi valori a un'enumerazione esistente.
Estensione set di autorizzazioni
- Aggiungere nuove autorizzazioni a un set di autorizzazioni esistente.
A partire dalla versione 13.0, le applicazioni di grandi dimensioni possono mantenere separate le varie attività. Ciò si ottiene consentendo agli oggetti estensione di coesistere con la propria destinazione all'interno della stessa app. Questa caratteristica facilita lo sviluppo di più estensioni per una singola destinazione, tutto all'interno della stessa app.
Nei metadati, gli oggetti estensione rimangono separati, come in precedenza, quindi ogni oggetto estensione richiede ancora il proprio ID oggetto nell'intervallo usato. La modifica principale è che ora possono risiedere nella stessa estensione/app dell'oggetto base. Con le tabelle, le estensioni di tabella che risiedono nella stessa app della tabella di base vengono unite a quella tabella nello schema del database, senza creare alcuna estensione di tabella complementare.
Quando le estensioni di tabella risiedono nella stessa app della destinazione, i relativi campi e chiavi vengono integrati nella tabella di base. Questa integrazione elimina la necessità di join SQL in runtime.
Tutti i tipi di oggetti estensione (enumerazioni, pagine, report, tabelle e XMLport) possono coesistere con la propria destinazione all'interno della stessa app. Ciò permette varie combinazioni, ad esempio una singola tabella con la sua estensione di tabella, una singola pagina con più estensioni di pagina, più estensioni enumerazione e così via. Questa flessibilità supporta un'ampia gamma di strutture e funzionalità applicative.
Consentire agli oggetti estensione di coesistere con la loro destinazione all'interno della stessa app è utile per il refactoring del codice non invasivo all'interno di un'app. Permette di suddividere gli oggetti in moduli in base a funzionalità specifiche o di preparare lo spostamento degli oggetti in un'app separata in previsione di future versioni.
Con il runtime 13.0, gli oggetti estensione di un'app specifica vengono applicati alla destinazione in base all'ID dell'oggetto estensione.
Questo introduce le seguenti nuove convalide del compilatore:
Agli oggetti base è vietato fare riferimento ai membri degli oggetti estensione.
Un oggetto estensione può fare riferimento a membri di altri oggetti estensione all'interno della stessa app solo se l'altro oggetto estensione ha un ID oggetto inferiore.