Creazione di un campo di ricerca per una dimensione finanziaria in Dynamics 365
Pubblicato: 16 febbraio 2025 alle ore 11:33:46 UTC
Questo articolo spiega come creare un campo di ricerca per una dimensione finanziaria in Dynamics 365 for Operations, incluso un esempio di codice X++.
Creating a Lookup Field for a Financial Dimension in Dynamics 365
Le informazioni contenute in questo post si basano su Dynamics 365 for Operations, ma la maggior parte di esse funzionerà anche per Dynamics AX 2012 (vedere sotto).
Di recente mi è stato chiesto di creare un nuovo campo in cui dovrebbe essere possibile specificare una singola dimensione finanziaria, in questo caso Product. Naturalmente, il nuovo campo dovrebbe anche essere in grado di cercare i valori validi di questa dimensione.
È un po' più complicato di una normale ricerca in una tabella, ma se si sa come fare, non è poi così male.
Fortunatamente, l'applicazione standard fornisce un comodo modulo di ricerca (DimensionLookup) che può essere utilizzato allo scopo, se si indica semplicemente quale attributo di dimensione cercare.
Per prima cosa, devi creare il campo del modulo stesso. Questo può essere basato su un campo di tabella o su un metodo di modifica, non importa per la ricerca stessa, ma in un modo o nell'altro deve usare il tipo di dati esteso DimensionValue.
Devi quindi creare un gestore eventi OnLookup per il campo. Per creare un gestore eventi, fai clic con il pulsante destro del mouse sull'evento OnLookup per il campo, quindi seleziona "Copia metodo gestore eventi". Puoi quindi incollare un metodo gestore eventi vuoto in una classe e modificarlo da lì.
Nota: la maggior parte di questa procedura funzionerà anche per Dynamics AX 2012, ma anziché creare un gestore eventi, è possibile sovrascrivere il metodo di ricerca del campo del modulo.
Il gestore degli eventi deve avere un aspetto simile a questo (sostituire il nome del modulo e il nome del campo, se necessario):
FormControlEventHandler(formControlStr( MyForm,
MyProductDimField),
FormControlEventType::Lookup)
]
public static void MyProductDimField_OnLookup( FormControl _sender,
FormControlEventArgs _e)
{
FormStringControl control;
Args args;
FormRun formRun;
DimensionAttribute dimAttribute;
;
dimAttribute = DimensionAttribute::findByName('Product');
args = new Args();
args.record(dimAttribute);
args.caller(_sender);
args.name(formStr(DimensionLookup));
formRun = classFactory.formRunClass(args);formRun.init();
control = _sender as FormStringControl;
control.performFormLookup(formRun);
}