Come gestire un enum in una dialog di selezione
Salve lettore, in questo articolo voglio portarti un esempio di come potresti gestire i valori di un enum in una finestra di scelta interattiva.
Con l’avvento di Business Central, i campi e le variabili di tipo option sono progressivamente sostituiti dai campi e variabili enum. Gli enum sono dei tipi di dato che possono essere estesi (laddove l’enum stesso lo permetta tramite la proprietà Extensibile = true). Mi è capitato di dover mostrare in una finestra di scelta rapida (STRMENU) i valori di un enum.
Un STRMENU è caratterizzato dall’avere come parametro una stringa con i valori separati da una virgola. Pertanto creiamo una codeunit con una funzione che restituisca una stringa con i valori dell’enum “Sales Document Type” formattata con la virgola.
Come puoi osservare, per scorrere l’enum abbiamo bisogno dell’istruzione foreach, inoltre per avere il valore del singolo elemento dell’enum, occorre utilizzare l’istruzione Names.Get passando l’indice del valore dell’enum che si sta leggendo.
A questo punto, creiamo una page extension, ad esempio della page Customer List, ed eseguiamo la funzione facendoci restituire la scelta dell’utente.
Il risultato che ne otterremo sarà il seguente.
Questo approccio potrebbe essere sufficiente per un enum non estendibile o comunque non ancora esteso, sappiamo quindi esattamente, quanti e quali valori sono presenti, quindi se l’utente cliccherà su Ordine programmato, sa già che il valore della variabili Choose sarà 4 e quindi poi può partire con una certa elaborazione.
Ma se l’enum fosse esteso? Come ben sai, il valore di un enum assume la numerazione dell’app di cui ne fa parte, pertanto se il range della tua app personalizzata è ad esempio 50100..50200, significa che il primo elemento dell’estensione dell’enum sarà uguale a 50100.
Questo scenario è perfettamente gestito dalla funzione GetEnumOptionString, come puoi vedere dall’immagine sotto.
Per poter gestire i valori dell’enum, una possibile soluzione potrebbe essere quella di avere nella funzione un parametri var di ingresso che è una variabile dictionary di [Integer,Integer] dove salviamo la posizione dell’indice della stringa STRMENU e il valore dell’enum. La variabile var di tipo Dictionary verrà riempita tramite la funzione Add, dove come primo parametro avremo la posizione nella stringa del valore dell’enum, e come secondo parametro il valore dell’elemento dell’enum stesso.
Creiamo, quindi, una nuova action dove, in questo caso, chiameremo la funzione GetEnumOptionString con il parametro Dictionary.
Come puoi vedere, in questo caso, dopo che l’utente ha selezionato un valore, dobbiamo andare a ricercare tale valore nella nostra variabile Dictionary appositamente riempita con la funzione descritta in alto. La ricerca in una variabile Dictionary la si fa tramite l’istruzione Get inserendo come primo parametro la posizione da cercare, nel secondo parametro serve una variabile dello stesso tipo del secondo elemento del Dictionary affinché venga riempita col valore trovato.
Il risultato che ne consegue scegliendo il valore DZ Order è quello mostrato nelle immagini successive.
In questo modo, se devi legare un’elaborazione al valore di un enum scelto da una pagina di dialogo sei perfettamente in grado di farlo. Voglio ricordarti che questo è un approccio, se vuoi anche abbastanza semplice, ma che ti potrà sicuramente dare uno spunto per crearne di tuoi più o meno complicati di questo.
Spero che questo articolo ti sia stato d’aiuto per gestire queste casistiche con gli enum.