Tworzenie pola odnośnika dla wymiaru finansowego w Dynamics 365
Opublikowano: 16 lutego 2025 11:33:57 UTC
W tym artykule wyjaśniono, jak utworzyć pole odnośnika dla wymiaru finansowego w programie Dynamics 365 for Operations, w tym przykład kodu X++.
Creating a Lookup Field for a Financial Dimension in Dynamics 365
Informacje zawarte w tym poście dotyczą systemu Dynamics 365 for Operations, ale większość z nich będzie działać również w systemie Dynamics AX 2012 (patrz poniżej).
Niedawno powierzono mi zadanie utworzenia nowego pola, w którym powinno być możliwe określenie pojedynczego wymiaru finansowego, w tym przypadku produktu. Oczywiście nowe pole powinno również móc wyszukiwać prawidłowe wartości tego wymiaru.
Jest to nieco bardziej skomplikowane niż zwykłe wyszukiwanie w tabeli, ale jeśli wiesz jak, to wcale nie jest tak źle.
Na szczęście standardowa aplikacja udostępnia wygodny formularz wyszukiwania (DimensionLookup), który można wykorzystać w tym celu, wystarczy wskazać atrybut wymiaru, którego ma dotyczyć wyszukiwanie.
Najpierw musisz utworzyć samo pole formularza. Może ono bazować na polu tabeli lub metodzie edycji, nie ma to znaczenia dla samego wyszukiwania, ale w taki czy inny sposób musi używać rozszerzonego typu danych DimensionValue.
Następnie musisz utworzyć obsługę zdarzeń OnLookup dla pola. Aby utworzyć obsługę zdarzeń, kliknij prawym przyciskiem myszy zdarzenie OnLookup dla pola, a następnie wybierz „Kopiuj metodę obsługi zdarzeń”. Następnie możesz wkleić pustą metodę obsługi zdarzeń do klasy i edytować ją stamtąd.
Uwaga: Większość z tych rozwiązań będzie działać również w systemie Dynamics AX 2012, jednak zamiast tworzyć procedurę obsługi zdarzeń, można zastąpić metodę wyszukiwania pola formularza.
Obsługujący zdarzenie obiekt musi wyglądać mniej więcej tak (w razie potrzeby należy zmienić nazwę formularza i nazwę pola):
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);
}