Come incrementare le performance con i task in background delle pagine

Salve lettore,
in questo articolo voglio parlarti di un modalità di reperire informazioni in maniera più performante utilizzando Business Central. In particolar modo voglio parlarti delle attività in background delle pagine.

In pratica è possibile sviluppare una pagina per eseguire calcoli di sola lettura e processi lunghi in modo asincrono nelle attività di background. Le attività in background rendono una pagina più veloce da aprire e più reattiva; questo fa sì che l’utente che inserisce dati non ha problemi di performance. Tipicamente questa pagine possono essere nelle pile di un role center o nelle pagine nei factbox.

Tornando sul concetto delle attività in background, quando si apre una pagina nel client, viene stabilita una sessione tra la pagina e l’istanza di Business Central. Mentre un utente lavora, potrebbe essere che quando inserisce dei dati si possa bloccare. In questo frangente potrebbe essere utile utilizzare i task in background. Ma che cos’è un task in background? E’ una pagina (figlia) che esegue processi da una codeunit in background. Al termine del processo, la sessione figlia viene terminata e la sessione principale riceve una notifica con i risultati dell’attività.

In maniera esplicativa, nell’immagine seguente, tratta dalla guida ufficiale ti viene schematizzata la situazione.

Vediamo un esempio su come possiamo utilizzare le attività in background. L’idea è creare una pagina CardPart sulla lista clienti dove vengono esposti il nr. totale dei clienti e il nr. dei clienti bloccati.

Per prima cosa sviluppiamo una codeunit dove nel trigger onRun contiamo il totale dei record della tabella Customer e poi i record della tabella Customer dei clienti bloccati. Queste informazioni le salviamo in un dictionary che obbligatoriamente deve essere composto da elementi Text; nella prima chiave mettiamo una stringa dove capiamo che informazione è salvata e nella seconda il valore del count dei record. Infine impostiamo SetBackgroundTaskResult che imposta il risultato dell’attività in background della pagina come dizionario. Al termine dell’attività, il trigger OnPageBackgroundCompleted verrà richiamato nella pagina con questo dizionario dei risultati.

Sviluppiamo poi la CardPart per richiamare questo task, in particolare nel trigger OnAfterGetCurrRecord chiamiamo la funzione EnqueueBackgroundTask per creare e mettere in coda un’attività in background di una certa codeunit senza richiamare l’interfaccia utente. Col trigger della pagina OnPageBackgroundTaskCompleted dato il taskid e il dictionary, salviamo i risultati della codeunit di elaborazione.

Infine estendiamo la pagina Customer List come segue.

Il risultato che ne otteniamo è il seguente.

Se provi ad inserire record o bloccare clienti, noterai che la pagina è reattiva e nessun blocco causa performance verrà visto dall’utente finale.

Spero che questo articolo ti sia di aiuto per ottimizzare le tue pagine, inoltre è un modo per dare ai clienti finali, ad esempio il nr. di record di una lista, spesso è un’attività che chiedono e in questo modo lo puoi in maniera veloce. Se vuoi approfondire il discorso attività in background ti consiglio di seguire questo link alla documentazione ufficiale Microsoft.

Lascia una risposta