Vytvoření vyhledávacího pole pro finanční dimenzi v Dynamics 365
Vydáno: 16. února 2025 v 11:32:41 UTC
Tento článek vysvětluje, jak vytvořit vyhledávací pole pro finanční dimenzi v Dynamics 365 for Operations, včetně příkladu kódu X++.
Creating a Lookup Field for a Financial Dimension in Dynamics 365
Informace v tomto příspěvku jsou založeny na Dynamics 365 for Operations, ale většina z nich bude fungovat také pro Dynamics AX 2012 (viz níže).
Nedávno jsem dostal za úkol vytvořit nové pole, ve kterém by mělo být možné specifikovat jednu finanční dimenzi, v tomto případě Produkt. Nové pole by samozřejmě mělo být také schopno vyhledat platné hodnoty této dimenze.
Je to o něco složitější než běžné vyhledávání v tabulce, ale pokud víte jak, není to vlastně tak špatné.
Naštěstí standardní aplikace poskytuje pohodlný vyhledávací formulář (DimensionLookup), který lze pro tento účel použít, pokud jí pouze řeknete, který atribut dimenze má vyhledat.
Nejprve musíte vytvořit samotné pole formuláře. To může být založeno na poli tabulky nebo na metodě úprav, nezáleží na samotném vyhledávání, ale tak či onak musí používat rozšířený datový typ DimensionValue.
Poté musíte pro pole vytvořit obslužnou rutinu události OnLookup. Chcete-li vytvořit obslužnou rutinu události, klepněte pravým tlačítkem myši na událost OnLookup pro pole a poté vyberte "Kopírovat metodu obsluhy události". Potom můžete vložit prázdnou metodu obsluhy události do třídy a odtud ji upravit.
Poznámka: Většina z toho bude fungovat i pro Dynamics AX 2012, ale místo vytvoření obslužné rutiny události můžete přepsat metodu vyhledávání pole formuláře.
Obslužná rutina události musí vypadat nějak takto (podle potřeby nahraďte název formuláře a název pole):
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);
}