Vytváření přístupových metod (tzn. metod zpřístupňujících neveřejné členy tříd) je velmi častá činnost. Členské proměnné tříd totiž nejsou přímo přístupné pro čtění či zápis a je proto nezbytné vytvořit metody, která vrátí či nastaví hodnotu dané proměnné.
Díky tomuto řešení lze například zcela odstranit proměnnou a nahradit ji nějakým výpočtem, aniž by bylo třeba provádět změny mimo danou třídu.
Přístupové metody mají obvykle prefix
get (metoda pro čtení) nebo
set (pro zápis), v AX se typicky kombinují do jediné metody s prefixem
parm, která slučuje obě funkce.
(V AX se používá několik přístupů - get
metody jsou většinou zcela bez prefixu, někdo naopak propaguje používání prefixu parm i pro metody jen pro čtení či jen pro zápis atd.)
Šablona parm metody
V Dynamics AX si lze psaní přístupových metod zjednodušit pomocí
šablon metod. V editoru otevřte
Scripts > template > method > parm, případně použijte sekvenci zkratek
"Alt+R" (Alt+M ve starších verzích) "S" "T" "M" "P". Do dialogu zadáte typ a název proměnné a po potvrzení bude vygenerovaný kód vložen na pozici kurzoru.
Stále to ale není "ono". Je třeba vytvořit metodu, vymazat její obsah, ale zejména vědět typ a název proměnné. S jednou metodou se člověk vypořádá snadno, ale má-li jich vytvářet několik desítek, rázem vidí tento problém v jiném světle. Musí hledat deklarace požadovaných proměnných, vytvářet metody, kopírovat typy a názvy a tak dále. To je neproduktvní a stereotypní činnost, která volá po automatizaci.
Generátor
Proto jsem vytvořil generátor přístupových metod, který umí o něco víc. Konkrétně:
- zobrazí členské proměnné dané třídy (formuláře, datasetu apod.) včetně zděděných a umožní vybrat, pro které budou vytvořeny přístupové metody
- tento seznam je možné filtrovat
- umožňuje nastavit, zda vygenerovaná metoda bude určena pro čtení, zápis nebo obojí
- umožňuje změnit vygenerovaný název proměnné a parametru
V praxi to vypadá takto:
Po potvrzení zadání se zobrazí infolog s výsledky generování. Z něj lze dvojklikem otevřít metodu v editoru. Existující metody nejsou přepsány.
Pár poznámek k implementaci
- Vývoj i testování generátoru proběhly v AX2009.
- Potřebujete-li změnit vytváření výchozích názvů metod a parametrů, změňte metody initMethodName() a initParameterName() na tabulce TmpDevAccessorMethod.
- Pokud v dialogu měníte hodnoty checkboxů Read a Write, mění se i prefix v názvu metody. Jakmile však zadáte svůj název, změny Read/Write na něj nemají vliv.
- Vygenerované metody nepoužívají prmIsDefault(), což může být v některých případech problém. Bohužel, v tuto chvíli vám nezbývá než modifikovat vygenerovanou metodu ručně. Mám tuto vlastnost v "Nice to have". :-)
Integrace do kontextové nabídky
Intergrace do kontextového menu je velmi prostá, stačí:
- Přidat do menu
- Určit, u kterých elementů bude tato volba dostupná (
První krok znamená jen přetáhnout menu item (DevAccessorMethodsGenerator) do menu SysContextMenu.
Druhý vyžaduje změnu ve třídě SysContextMenu, metodě verifyItem(). Do větve MenuItemType::Action přidejte následující kód, který zajistí zobrazení jen u podporovaných typů:
case menuitemActionStr(DevAccessorMethodsGenerator):
if (this.selectionCount() == 1
&& !firstNode.AOTIsOld()
&& DevAccessorMethodsGenerator::isSupportedTreeNode(firstNode))
{
return 1;
}
return 0;
Zpětná vazba
Připomínky jsou vítané, hlášení chyb vyžadované. :-)
Download
Generátor přístupových metod (AX2009)
Žádné komentáře:
Okomentovat