Opzioni ed enumerazioni

Completato

Il tipo di dati Option è un tipo di enumeratore a base zero; pertanto, è possibile convertire i valori delle opzioni in numeri interi. Per questo motivo, Option è un tipo di dati numerico perché i valori delle opzioni sono memorizzati come numeri interi.

Per definire una variabile di tipo Option, non è possibile usare la proprietà OptionMembers usata in un campo di tipo di dati Option. È necessario indicare le opzioni disponibili sotto forma di elenco con valori delimitati da virgole dopo la definizione della variabile.

Esempio dell'uso del tipo di dati Option in AL.

Se si desidera riusare lo stesso tipo Option in altri oggetti (ad esempio altre codeunit, pagine o tabelle), è necessario ridefinire tutti i valori disponibili. Successivamente, se si decide di aggiungere un valore extra, è necessario modificare tutti gli oggetti con questo valore extra. Le opzioni in una tabella non sono estendibili con un'estensione di tabella.

Un approccio migliore consiste nell'uso dell'oggetto Enum. Enum è un oggetto separato con numero e nome specifici. È possibile usare un oggetto Enum in ogni altro oggetto senza la necessità di ridefinirlo. È possibile anche estendere l'oggetto Enum con estensioni di enumerazione.

Un tipo di enumerazione, noto anche come enum in programmazione, è una parola chiave usata per dichiarare un tipo costituito da un set di costanti denominate. L'elenco delle costanti denominate è chiamato elenco di enumerazione. È possibile usare le enumerazioni come campi di tabella, variabili locali e globali e parametri.

Per dichiarare un'enumerazione in AL è necessario specificare un ID e un nome. L'elenco di enumerazione è costituito da valori, ciascuno dei quali viene dichiarato con un ID e un valore. L'ID valore è il valore ordinale nell'elenco di enumerazione e deve essere univoco. Quando i valori di enumerazione vengono visualizzati nell'interfaccia utente, vengono ordinati in base all'ordine di dichiarazione. Inoltre, se l'estensione B estende l'estensione A, i valori di enumerazione dichiarati nell'estensione A appaiono prima dei valori di enumerazione dichiarati nell'estensione B.

Esempio dell'uso del tipo di oggetto Enum in AL.

Sebbene gli oggetti enum ed enumextension dispongano di ID oggetto, questi non vengono applicati dalla licenza. Nelle versioni precedenti riusavano l'intervallo per le tabelle e venivano confrontati con la licenza al momento della distribuzione, ma non è più così. La convalida dell'univocità viene ora applicata durante l'installazione, che non riesce se un ID oggetto enum confligge con un enum già installato. Pertanto, come sempre, è importante usare gli ID oggetto nell'intervallo assegnato. Ciò si applica per le app AppSource, ma non per le estensioni del tenant o in locale. Non è necessario che l'enumerazione usi lo stesso ID della tabella in cui è inserita.

È possibile estendere solo le enumerazioni la cui proprietà Extensible è impostata su True.

Quando si creano didascalie per le enumerazioni, è importante che la didascalia non contenga una virgola. La presenza di una virgola nella didascalia, ad esempio Caption = 'Diamond Level, with bonus', può comportare la visualizzazione su più righe nell'interfaccia utente. Questo comportamento fa anche sì che il valore effettivo selezionato dall'utente nell'interfaccia utente non corrisponda al valore salvato nel database.

Viene attivato un avviso AppSourceCop se i file .xlf contengono virgole nelle didascalie delle enumerazioni.

Le enum si possono estendere per aggiungere più valori all'elenco di enumerazione; in questo caso la proprietà Extensible deve essere impostata su True. La sintassi per un'estensione che estende l'enumerazione Loyalty con il valore Diamond è mostrata di seguito.

	enumextension 50130 LoyaltyWithDiamonds extends Loyalty
	{
	    value(50130; Diamond)
	    {
	        Caption = 'Diamond Level';
	    }
	}