sobota 24. října 2009

Generování přístupových metod

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čí:
  1. Přidat do menu
  2. 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