AL per sviluppatori dinosauri: la codeunit Page Management

Dopo il discreto successo del mio precedente articolo (se to lo sei perso puoi recuperarlo a questo link), oggi voglio dare un’altra freccia all’arco di tutti quei sviluppatori che per anni sono abituati a scrivere sempre lo stesso codice.

L’argomento di oggi è la codeunit Page Management. Da come si può intuire dal nome, questa codeunit gestisce l’apertura delle pagine. Per anni siamo stati abituati ad aprire le pagine con le istruzioni PAGE.RUN o PAGE.RUNMODAL mettendo come primo parametro la pagina che si vuole aprire (mi raccomando usate PAGE::”nome pagina” per una migliore leggibilità del codice; inorridisco quando ancora vedo direttamente i numeri delle pagine) e come secondo la tabella opportunamente filtrata. A volte come primo parametro si lasciava 0 che, in combinazione con la tabella del secondo parametro, veniva aperta la pagina eventualmente specificata nella proprietà DrillDownPageId della tabella.

Questa notazione va ancora bene, oggi, ma quante volte ti è capitato (a me spesso, e più passano gli anni e più capita di frequente 😅) di non ricordare immediatamente la pagina scheda che apre ad esempio un ordine di acquisto?

A questo proposito ci viene incontro la codeunit Page Management. Infatti filtrando la tabella Purchase Header con Document Type = Order chiamando, poi, la funzione PageRun passando la tabella filtrata, la codeunit si occuperà di aprire la pagina corretta dell’ordine. Sotto un esempio di quello che sto illustrando a parole.

La funzione, da cui è tratto questo frammento di codice, faceva anche altro, ma quello su cui voglio attirare la tua attenzione è sulla chiamata PageRun. La tabella Purchase Header è filtrata solamente per il tipo documento = ordine.

Nota anche la seconda parte dell’istruzione (quella con else), noterai che se devi aprire una pagina lista, puoi utilizzare la funzione GetDefaultLookupPageIDByVar che restituisce il numero di pagina della proprietà LookupPageId della tabella. Infatti, ricorda, che la funzione PageRun puoi utilizzarla per aprire pagine scheda quando il record gestisce diversi tipi (e quindi diverse pagine).

Se utilizzi l’estensione di Visual Studio code chiamata LinterCop scritta dall’ottimo Stefan Maron, avrai un warning sulle seguenti tabelle:

IdName
36Sales Header
38Purchase Header
79Company Information
80Gen. Journal Template
81Gen. Journal Line
91User Setup
98General Ledger Setup
112Sales Invoice Header
131Incoming Documents Setup
207Res. Journal Line
210Job Journal Line
232Gen. Journal Batch
312Purchases & Payables Setup
454Approval Entry
843Cash Flow Setup
1251Text-to-Account Mapping
1275Doc. Exch. Service Setup
5107Sales Header Archive
5109Purchase Header Archive
5200Employee
5405Production Order
5900Service Header
5965Service Contract Header
7152Item Analysis View
2000000120User

Ora che hai letto questo articolo, userai questa codeunit? Io sono sicuro di sì, anche perché trovo che il codice sia molto più performante ed elegante quando si usano gli strumenti che mette a disposizione il nostro amato AL Language e Business Central.

Lascia una risposta