Se avete scaricato la nuova release di BC di Ottobre, vi sarete accorti che tutti i sorgenti originali fanno riferimento ai namespace. Ecco un esempio della tabella Production Order, appartenente al namespace Microsoft.Manufacturing.Document.
L'istruzione che dichiara l'appartenenza di un certo oggetto a un namespace specifico prevede poi che ovunque noi decidiamo di referenziare quell'oggetto, bisognerà preventivamente dichiararne il namespace di appartenenza attraverso l'istruzione di using.
La tabella Production Order mostrata sopra, ad esempio, utilizza tutti i namespace dichiarati al suo interno.
Uso dei namespace
La prima domanda che adesso ci si pone è: siamo anche noi obbligati ad usare i namespace con i conseguenti using nei nostri oggetti delle extension?
La risposta è no, non siamo obbligati, almeno per ora. Ma il loro utilizzo può risultare alquanto comodo.
I namespace servono in buona sostanza a catalogare gli oggetti di una extension, permettendo poi, attraverso l'AL explorer, di filtrarli e di vederli raggruppati per namespace di appartenenza, come mostrato sotto.
I namespace introdotti da Microsoft sono davvero molti, ma per fortuna non siamo obbligati a conoscerli a memoria per poter programmare, perché in questo ci aiuta Visual Studio Code.
La definizione di un namespace è molto semplice: prima di richiamare lo snippet per la creazione di un oggetto, scriviamo semplicemente namespace seguito dal nome che vogliamo dargli. Se ne abbiamo già definito qualcuno, l'intellisense ce lo proporrà, altrimenti semplicemente ne creerà uno nuovo.
I namespace andrebbero dichiarati gerarchici, magari con il nome dell'exetension seguito da un gruppo o più gruppi separati dal punto. Da tenere presente che i nostri namespace non devono iniziare con la parola Microsoft.
Nel momento in cui introduciamo i namespace in una nostra extension, definendo quindi i nostri, Visual Studio Code aggiunge poi in automatico le istruzioni di using nel momento in cui dichiariamo variabili, impostiamo una TableRelation o inseriamo parametri alle nostre procedure che fanno riferimento agli oggetti standard (o ai nostri).
Di seguito vedete un esempio di una tabella custom in cui è stata dichiarata l'appartenenza a un namespace nostro e all'interno della quale è stata impostata la proprietà TableRelation in un campo collegandolo alla tabella standard dei numeri di serie. Avendo definito un nostro namespace all'oggetto, Visual Studio Code, nel momento in cui definiamo la TableRelation, aggiunge automaticamente l'istruzione di using in cima all'oggetto, dicendo quindi al sistema che la nostra tabella utilizzerà gli oggetti appartenenti al namespace Microsoft.Foundation.NoSeries.
Ho notato però che non sempre questo accade.
Un piccolo ma fastidioso bug
Ci sono alcune situazioni in cui queste non vengono aggiunte, col risultato che il sistema segnala errori di sintassi.
Nell'esempio sotto, ho creato una codeunit in cui sottoscrivo un evento della tabella Item Journal Line. Mentre all'atto della definizione della tabella di appartenenza (Database::"Item Journal Line") Visual Studio Code aggiunge correttamente l'istruzione using Microsoft.Inventory.Journal, non lo fa nel momento in cui aggiungo il parametro SalesLine della procedure, col risultato che il mio codice risulta non corretto.
Ora, se uno non conosce il namespace di appartenenza dell'oggetto citato, l'unica soluzione che ho trovato è stata quella di dichiarare una variabile che la legga, la cui dichiarazione fa aggiungere a Visual Studio Code l'istruzione di using necessaria
La variabile a quel punto, essendo inutile, può anche essere eliminata.
Comments