čtvrtek 20. srpna 2009

AxAssist

AxAssist je bezpochyby jeden z nejužitečnějších nástrojů, které jsou pro vývoj v Dynamics AX k dispozici. Není sice zdarma, ale přináší mnoho skvělých funkcí za rozumné peníze. Navíc je k dispozici třicetidenní zkušební verze, takže každý má možnost si AxAssist důkladně osahat. Hned na úvod odkáži na oficiální stránky (AxAssist.com), protože je tam většina funkcí popsána a nechybí flashová videa, která přiblíží chování AxAssistu asi lépe než cokoli jiného. Mým cílem tedy není popsat všechna nastavení atd., spíše rychle prolétnout všechny funkce a podívat se na pár praktických zkušeností. Jen jeden obrázek (z AX3) pro představu, o čem je řeč: Doplňování kódu Nejviditelnější a nejdůležitější shopností je doplňování kódu při psaní. MorphX sice dokáže nabídnout seznam metod objektu nebo polí tabulky a dokonce i seznam tříd či datových typů (pod různými záhadnými klávesovými zkratkami), ale AxAssist to dělá řádově lépe. Nabízí datové typy při deklaraci, proměnné vhodného datového typu v přiřazení nebo volání parametrické metody, nabízí i makra atd. atd. Navíc je toto chování konfigurovatelné, např. lze definovat, po kolika zapsaných znacích se má nabídka zobrazit. Další příbuzná funkce je Acronyms, tedy zkratky. Slouží k nabízení datových typů a principem je „skákání po hrbech velblouda“, abych tak odkázal na velbloudí notaci. :-) Zkrátka nabídnou se ty typy, v nichž jsou v daném pořadí obsažena zadaná velká písmena. Například pro LJTI se (v AX3) nabídne LedgerJournalTrans_InventTrans (je-li povolena volba Extended Acronyms), LedgerJournalTransImport a LedgerJournalTypeId. Rozdíl v počtu znaků, které je nutné napsat, je evidentní. Užitečná funkce je také možnost zadání ignorovaných prefixů. Pokud vaše firma například prefixuje objekty trojicí znaků XYZ, můžete nechat prefix XYZ ignorovat a typ XYZOrderId se nabídne po prostém zadání OI. Lze zadat i více prefixů, oddělených čárkou. Po nastavení prefixu budete pravděpodobně muset restartovat AX klienta. Do nabídek lze přidat vlastní kusy kódu, tedy různé často zapisované konstrukce, komentáře dle firemních pravidel atd. Text nemusí být úplně statický, výsledná podoba je zkonstruována při spuštění AxAssist. Lze tedy např. předpřipravit komentář s vyplněným jménem přihlášeného uživatele apod. A ještě jedna drobnost: rozbalovací nabídka také zobrazuje ToolTip pro aktuálně vybraný prvek (a v něm např. typ proměnné, předka typu, label apod.). Způsob vytváření těchto ToolTipů lze také libovolně modifikovat a přidávat tak další informace, měnit formátování atd. Tlačítka Ve výchozím nastavení AxAssist také přibyde šest tlačítek na hlavní lištu a do AOT a tři do lišty editoru kódu. Z první skupiny zaujme třeba možnost otevření datového typu pole v AOT (což lze volat i z definice datového zdroje formuláře apod.), v editoru je zásadní skvěle fungující Open in AOT (lze použít z definice i použití libovolné proměnné a její typ je otevřen v samostatném AOT okně). Některá tlačítka mě příliš nezaujala z prostého důvodu, že všude používám Tabax a mám je tam (a třeba TableBrowser je v Tabaxu lepší ;)). Funkce tlačítek může být měněna, mohou být přidávana další atd. Vyžaduje to drobné zásahy do kódu, ale je to popsáno na webu AxAssist a není na tom nic složitého. Další změny v IDE Do IDE dále přibylo:
  • dolní lišta v AOT – zobrazuje definici (třídy, metody) nebo label (tabulky, formuláře, pole, EDT...)
  • rozbalovací seznam metod v editoru
  • panel v editoru (vlevo dole) – zobrazuje informaci o vybrané proměnné, včetně např. všech hodnot výčtového typu. I toto lze velmi snadno rozšiřovat a často se to hodí. Zobrazené hodnoty lze i kopírovat, typicky odtud kopíruji název datového typu.
Klávesové zkratky AxAssist umožňuje definovat vlastní klávesové zkratky a to zvlášť pro editor a zvlášť pro zbytek IDE. Funkce, pro kterou chcete definovat klávesovou zkratku, musí být definována v třídách AxAssist. Defaultně tam jsou funkce pro jednotlivá tlačítka a Code reformatter (viz dále). Opět odkáži na dokumentaci na webu, kde je postup přidávání dalších funkcí dobře popsán. Code reformatter Cílem Code reformatteru je zpřehlednit existující kód pomocí jeho rozdělení na více řádek a odsazení. Zřejmě se tak děje jen pro parametry metody a deklarace proměnných, což je pro mě trochu zklamání, ale budiž. Způsob odsazování lze nakonfigurovat v nastavení (čtvrtá záložka, „ReFormatter“). Spouštění reformatteru je poněkud zvláštní. Spouštěcí funkce je implementována a lze k ní přiřadit klávesovou zkratku nebo tlačítko, ale defaultně to provedeno není – tudíž ve výchozím nastavení není možné reformatter spustit. Nicméně stačí přidat čtvrté tlačítko do editoru a bude automaticky volat Code reformatter. Instalace, spuštění, synchronizace AxAssist se distribuuje jako jeden .exe soubor obsahující instalátor. Ten mj. uloží do instalačního adresáře soubor AxAssist.xpo, který musíte naimportovat do AX. Dále je třeba udělat ještě drobný zásah do třídy EditorScripts (viz web), jinak vám AxAssist vynadá, že instalace není dokončena. Po instalaci se ale AxAssist ještě nijak nespouští - je třeba spustit formulář DEV_AxAssistForm. Může být spouštěn buď automaticky po startu (zásah do Info.startupPost(), resp. workspaceWindowCreated()), nebo ručně (k tomu je ideální Tabax - stačí přidat ikonku Display_DEV_AxAssistForm.bmp do AX adresáře \Share\Include\Tabax\Plugs). Při startu provádí AxAssist synchronizaci, kdy si ukládá informace o typech a tyto informace pak využívá při konstrukci nabídek. Synchronizace trvá cca půl minuty, což může pochopitelně zdržovat, chcete-li se např. jen rychle na něco podívat. V závislosti na osobních preferencích pak můžete spuštět AxAssist ručně, automaticky s případným přeskočením startu AxAssist (typicky stiskem Shift nebo Ctrl; toto musí výslovně implementováno ve spouštěcí logice), používat různé konfigurace (např. konfiguraci bez AxAssist pro AxPath) atd. Cena Aktuální ceník naleznete zde. Rád bych upozornil na dvě věci:
  1. Jste-li firma, nemůžete zakoupit Single Developer License, vždy musíte koupit zakoupit Company License
  2. AxAssist se pořizuje pro každou verzi AX zvlášť, ale zároveň je hned zmíněna možnost slev (s čímž ovšem zkušenost nemám)
Support Při nasazování na projekt v AX3 jsem narazil na určité nejasnosti a výkonnostní problémy (v předchozí verzi AxAssist, nyní je již problém vyřešen) a vyzkoušel jsem tedy i support. Reakce byla rychlá a přínosná a pomohla i v přípravě tohoto příspěvku. Takže díky, Alexi! Závěr AxAssist umožňuje pracovat významně rychleji a lépe se soustředit na smysl implementace, protože není třeba přerušovat psaní kódu hledáním typu v AOT a podobně. Je až s podivem, kolik Dynamics AX vývojářů o AxAssist nikdy ani neslyšelo. Snad se to teď v české kotlině trochu změní… :-)

Žádné komentáře:

Okomentovat