Zobrazují se příspěvky se štítkemnástroje. Zobrazit všechny příspěvky
Zobrazují se příspěvky se štítkemnástroje. Zobrazit všechny příspěvky

pátek 20. srpna 2010

Vyhledávač datových referencí - Beta

Vyhledávač datových referencí je nástroj pro AX, jehož primitivní podobu jsem vyvinul pro upgrade v Británii. Bylo totiž potřeba přesunout celý jeden modul do jiné vrstvy a krom změn ID objektů (což není problém) bylo také třeba zjistit, zda jsou původní ID použita někde v databázi (typicky relace alternativních adres nebo řízení dokumentů). Právě pro toto hledání jsem si napsal program, vlastní aktualizaci jsem pak implementoval jako data upgrade script.

Protože jsem měl spoustu jiné práce a také dovolenou, dotažení implementace a refaktoring se trochu protáhli, nicméně nyní považuji práci za dokončenou. Výjimkou je podpora různých verzí AX, protože nyní je připravena pouze verze pro AX2009. To je sice u nástroje primárně určeného pro upgrady trochu nevýhoda, ale rád bych provedl základní testování na jedné verzi a pak teprve vytvořil paralelní verze pro starší Axapty. Pár věcí podporovaných AX2009 ve starších verzích chybí, je tedy třeba udělat nějaké změny v kódu.

Kolega Dan, který mi dělal alfa-testera, se hlasitě dožadoval dokumentace, což jsem nakonec vyslyšel. Pro podrobnější popis programu tedy odkazuji na dokumentaci (odkaz níže). Dokumentace zatím nebyla nikým testována, nejvíc chyb proto očekávám tam.

Pokud se rozhodnete Vyhledávač datových referencí vyzkoušet a naleznete nějakou chybu, nezapomeňte mi dát vědět. Předem díky!

Odkazy

pátek 2. července 2010

Jaké security klíče musím zapnout?

Jedním z důležitých úkolů při nasazování AX je správné nastavení přístupových práv. Pro porozumění tomu, jaké security klíče je třeba nastavit, vytvořil Microsoft nástroj nazvaný Security Profiler.

Security Profiler je implementován v X++ a jeho použití je velmi jednoduché - administrátor spustí formulář Security Profiler a a klikne na Start Profiling. Od této chvíle se zaznamenávají potřebné security klíče, administrátor tedy provede nějaké akce (spuštění formuláře, tisk sestavy) a ukončí sledování tlačítkem Stop Profiling. Výsledkem je seznam security klíčů, které byly pro akci nějakým způsobem vyžadovány - a které je třeba vzít v potaz při nastavování uživatelských účtu s omezenými právy.

Security Profiler je zatím bohužel ve vývoji a není normální cestou k dispozici, lze si ho ale vyžádat přes support. Nicméně je pravděpodobné, že v budoucnu bude standardní součástí Dynamics AX.

O něco více informací (včetně obrázků) lze najít zde.

úterý 25. května 2010

DEV_SysTableBrowser a DEV_CreateNewProject

Vanya Kashperuk zveřejnil nové verze dvou svých nástrojů, nyní oficiálně podporujících AX2009. DEV_SysTableBrowser je extrémně užitečný nástroj, který rozšiřuje prohlížeč tabulek zejména o možnost řazení polí dle názvu (standardně jsou řazena dle ID) a možnost zvolit, jaká pole budou zobrazena. Pro popis dalších vlastnostím, download atd. viz článek na Axaptapedii. Původní DEV_SysTableBrowser bylo možné používat v AX2009 po několika drobných změnách (souvisejících s UtcDateTime), ale před hotfix rollupem 3 byla velkým problémem rychlost - a na tom se zřejmě nic nezměnilo, tudíž pozor na verzi vaší Axapty. DEV_CreateNewProject pomáhá vyvářet projekty - můžete si zadefinovat prefix projektů a snadno vytvářet větve v projektu odpovídající struktuře AOT (a to i v již existujícím projektu). Narozdíl od DEV_SysTableBrowser jsem ho nikdy moc nepoužíval, ale aktuálně pracuji na implementaci, kde mají AOT projekty (poněkud zvrhlý) devítipísmenný prefix, takže asi začnu. Stránka o DEV_CreateNewProject na Axaptapedii.

středa 7. dubna 2010

AX.NET

Podle názvu byste možná řekli, že AX.NET má něco společného s Dynamics AX a .NET. A skutečně! AX.NET je nástroj usnadňující vývoj .NET aplikací, které volají aplikační logiku AX pomocí Business Connectoru. A v čem je to usnadnění? Zejména v tom, že AX.NET vytvoří z AOT .NET sestavení, obsahující všechny třídy, tabulky, enumy atd. Toto sestavení je pak přidáno do projektu ve Visual Studiu a objekty jsou připraveny k použití - lze volat metody tříd, přiřazovat hodnoty do polí v tabulkách atd. To vše s podporou všech schopností Visual Studia - IntelliSense, typová kontrola a spousta dalších. To proto, že díky AX.NET je Axapta jen další .NET sestavení. Skvělé řešení! AX.NET také podporuje LINQ dotazy (Language-Integrated Query, speciální syntaxe pro psaní dotazů), které překládá do X++ a spouští přes Business Connector (takže se opět použije veškerá AX aplikační logika). Praktickou ukázku můžete vidět například v tomto videu. Na AX.NET jsem narazil v podstatě okamžitě, co se objevili první zprávy, ale čekal jsem, zda se to podaří realizovat a jen jsem občas zkontrolovat, co na mě vypadlo z RSS. Ale zřejmě je na čase vzít tento projekt vážně, protože oficiální vydání má být právě dnes! Jen bych asi měl dodat, že jde o komerční projekt. Více informací o AX.NET naleznete na proisv.com.

pátek 2. dubna 2010

Generátor přístupových metod pro AX4

Pomalu se zabydluji ve svém novém působišti ve Velké Británii a tak se zas pokusím trochu vyprázdnit buffer věcí, o které bych se chtěl podělit. První z nich je velmi stručná - jelikož můj aktuální projekt běží na AX 4.0, připravil jsem .xpo generátoru přístupových metod i pro tuto verzi AX. Stahovat můžete zde.

pondělí 1. března 2010

Hotfix Impact Analysis

Microsoft zveřejnil nový nástroj pro Dynamics AX, který pomáhá identifikovat, jaké mohou být dopady změněných objektů. Hlavní částí je formulář Impact Analysis (viz obrázek), který v horní části zobrazuje zvolené objekty a v dolní části křížové reference pro označený objekt. Formulář lze spustit z kontextového menu (Add-Ins > Impact analysis) pro jeden nebo více AOT objektů, pro jeden nebo více projektů, nebo z instalátoru hotfixu. Podívejme se na funkce, které lze z tohoto formuláře vyvolat:
  • Compare - porovná různé vrstvy objektu. Narozdíl od "normálního" porovnání zobrazí dva panely vedle sebe (takže lze zároveň zobrazit např. porovnání SYP×Old SYP a SYP×VAR), naopak nejsou přístupné volby jako zobrazení čísel řádků).
  • Load - zde se nachází funkce pro přidání objektů do analýzy - lze vybrat objekt z AOT nebo z projektu (a přetáhnout myší), přidat celé .xpo nebo dříve uložený stav.
  • Remove - odebere označený objekt z analýzy
  • Save - uloží seznam objektů (vybraných pro analýzu) do XML. Tento soubor lze pak nahrát funkcí Load > Load Impact Analysis State.
  • Export - umožňuje exportovat seznam objektů nebo křížových referencí do XML.
Tlačítka v dolní části zpřístupňují standardní funkce pro křížové reference. Jak jsem již zmínil, analýzu dopadu je možné spustit přímo z instalátoru hotfixu: V následujícím kroku instalátoru je zobrazena stručná informace o zasažených objektech a je možné pomocí tlačítka přejít do výše popsaného formuláře v AX. Po analýze dopadu je možné pokračovat v instalaci hotfixu. Nástroj Impact Analysis je k dispozici jako samostatný hotfix (tak jsem ho získal já) a od dnešního dne by měl údajně být součástí veškerých nových hotfixů. Další informace: KB974255 (Impact Analysis feature for Dynamics AX 2009)

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)

č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í… :-)

neděle 2. srpna 2009

Vyhledávání

Vyhledávání v kódu nebo v AOT je velice častá činnost. Hledáme použití proměnné, modelový kus kódu, objekty určitých vlastností atd. Přesto řada lidí neovládá některé užitečné funkce, které pro to Axapta nabízí. A právě na ty se nyní podíváme. Spustit formulář pro vyhledávání v AOT jistě dokáže každý, ale tento formulář umí podstatně více než jen vyhledat zadaný řetězec. Přímo na formuláři jsou další pole pro upřesnění kritérií (ačkoli pro některé jsem dosud nenašel smysluplné využití) a dokonce možnost zapsat vlastní funkci, která se spustí pro každý TreeNode (jaké má mít metoda parametry se dočtete v nápovědě k formuláři). Co už není tak očividné je možnost zadat regulární výraz do vyhledávacích polí. Syntaxe odpovídá metodě match() a je u ní zdokumentovaná. Takže např. následující příklad hledá přiřazení do proměnné i - jinak řečeno, proměnnou i následovanou libovolným počtem mezer a znakem =. Dohromady i: *=. Obdobně lze hledat třeba metody, jejichž název odpovídá určitému regulárnímu výrazu (např. <check.*sales pro metody začínající check a pak kdekoli obsahující sales). V tomto případě pochopitelně umístíme regulární výraz do pole (Nazváno) Named. Regulární výrazy lze využít i při vyhledávání labelů (což je mimochodem funkce k nezaplacení) a také v editoru kódu. V editoru hlavně pozor na to, že se vyhledává od pozice kurzoru do konce, to je dost matoucí. A kupodivu hledání v AOT a hledání v editoru pracuje jinak např. s koncem řádku… Při hledání v AOT lze využít ještě jednu zajímavou funkci a to vyhledávání ve vlastnostech. Nejprv je nutné přepnout volbu Hledat (Search) na Vše (All nodes) - tím se zobrazí další záložka: Vlastnosti (Properties). Na ní si pak najdeme patřičné vlastnosti, označíme jako Selected a zadáme hodnotu. Ta má opět hodnotu regulárního výrazu. Může to vypadat třeba takto:

úterý 28. července 2009

SysCompareCreateProject

Dnes jsem potřeboval vypsat objekty existující v jedné vrstvě a změněné v jiné vrstvě. Nejdřív mě napadl upgrade projekt, ale pak jsem objevil třídu SysCompareCreateProject. Zadám vrstvy, jméno privátního projektu a jedem… Jenže do projektu se mi dostaly i ty objekty, které ve vyšší vrstvě prostě chyběly, a to jsem nechtěl. Pokusně jsem upravil podmínku v compareNodes() a vše bylo OK. Před zásahem do dialogu (aby bylo možné chování měnit) jsem se ještě podíval do AX2009 (tohle bylo na 3.0) a co myslíte? Jasně, přesně tohle tam už je implementováno. :-)

sobota 18. července 2009

SysMultiTableLookup

Tento týden jsem potřeboval vytvořit lookup s poli z různých tabulek. Věděl jsem o existenci třídy SysMultiTableLookup, ale nějak jsem ji dříve nepotřeboval. A teď tedy přišel čas, abych se na ni podíval. Tuto třídu vytvořil Vanya Kashperuk (blog) s cíle rozšířit funkcionalitu široce používané třídy SysTableLookup. SysMultiTableLookup přináší možnost zobrazovat pole z více tabulek, používat display metody, agregační funkce nebo zadat jiný než standardní popisek pole. Vše, co jsem vyzkoušel, funguje velmi dobře. Skvělá práce! Třídu a formulář s příklady lze stáhnout zde.

úterý 9. června 2009

Tabax

Prostředí Dynamics AX má k dokonalosti v mnoha ohledech daleko a některé úkoly jsou tak zbytečně komplikované. V tu chvíli přichází ke slovu programátor, jehož základní vlastností je lenost :), a pro zjednodušení práce si napíše utilitku. Vývojáři Dynamics AX nejsou výjimkou a mnozí si své nápady nenechávají pro sebe - díky tomu lze na internetu nalézt řadu zajímavých nástrojů. Třeba Tabax. Největším přínosem Tabaxu je umisťování oken na panel záložek, takže nemusíte složitě hledat schovaná okna. V AX2009 se sice některé formuláře otevírají mimo hlavní okno, ale přesto záložky Tabaxu rozhodně využijete. Dále Tabax nabízí nástrojovou lištu, kde sice nenajdete mnoho nového, ale např. možnost jednou kliknout pro otevření aktivního formuláře v AOT ušetří spoustu neproduktivního času. Pro názornost screenshoty z AX3 a AX2009: Stručný popis funkce tlačítek (AX2009):
  • Slouží k rozmisťování oken.
Edit current form
  • Otevře aktivní formulář v AOT (jinak řečeno, přejdu z uživatelského pohledu na formulář do jeho editace).
Edit current field
  • Otevře aktivní formulářový prvek v AOT. Funkce je sice určeno pro pole, ale s úspěchem lze aplikovat i třeba na MenuItemButton.
  • Ctrl+Click - Vypíše do infologu podrobné informace o aktivním poli - např. jméno prvku, jméno pole (popř. metody), použitý datový typ, jeho rozsah atd.
  • Ctrl+Shift+Click - Otevře v AOT použitý datový typ a zobrazí jeho vlastnosti (Properties).
Table browser
  • Otevře tabulku v prohlížeči tabulek (form SysTableBrowser). Funkci můžete použít přímo z formuláře (otevře se tabulka, do níž patří aktivní pole), ale také v podstatě kdekoli v AOT, kde narazíte na tabulku (např. v definici query na tiskové sestavě).
  • Shift+Click - Zobrazí seznam tabulek, které jsou na formuláři použity. Zvolenou tabulku pak zobrazí v prohlížeči tabulek. Pokud je k dispozici pouze jediná tabulka, je zobrazena rovnou.
  • Ctrl+Click - Funguje obdobně jako Shift, ale zvolenou tabulku otevře v AOT.
  • Ctrl+Shift+Click - Zobrazí SQL dotaz použitý k vygenerování aktivního datového zdroje formuláře. Úžasně užitečná funkce pro ladění složitých filtrů, dynamicky připopojovaných datových zdrojů apod.
Refresh AOD
  • Vymaže nacachované informace o aplikačních objektech (na klientu).
xReferences - usedBy
  • Zobrazí křížové reference, tedy informaci, kde všude je zvolený objekt používán. Samozřejmě to vyžaduje aktuální křížové reference…
Application Hierarchy Tree
  • Zobrazí Strom aplikační hierarchie pro aktivní datový typ nebo třídu. Funguje to i pro systémové objekty, takže se můžete třeba podívat, jaké potomky má třída TreeNode.
Copy
  • Zkopíruje do schránky název vybraného objektu (objektů), nebo, v případě formuláře, AxPath odkaz na aktivní záznam.
  • Ctrl+Click - Zkopíruje AOT cestu (např. \Classes\RunBase\run).
  • Ctrl+Shift+Click - Zkopíruje AxPath odkaz. AxPath vydá na samostatný příspěvěk, ale v zásadě jde o protokol pro odkazování do AX (např. na konkrétní záznam v konkrétním formuláři), takže je pak možné jednoduše kliknout na odkaz třeba z e-mailu a v AX se otevře cíl odkazu. Více v angličtině zde.
Open Application Object
  • Otevře aplikační objekt v novém okně. Je to užitečné, jsem-li na nějaké části aplikačního objektu (např. na metodě v editoru) a chci otevřít celý objekt v AOT.
  • V případě otevřeného formuláře otevře v novém okně objekt, který daný formulář vyvolal (caller). To je většinou jiný formulář nebo třída.
Add-ins
  • Otevře menu Add-ins. Víc od toho nečekejte. :-)
Compare
  • Porovná dvě verze objektu (verze z různých vrstev nebo ve smyslu verzí v repository), případně dva objekty mezi sebou. Bohužel na mé instalaci na AX2009 to nefunguje a zatím nevím proč. :-(
Import
  • Zobrazí dialog pro import .xpo.
Následuje prostor pro plug-iny, ve verzi pro AX2009 tam již dva standardně jsou: Search
  • Zobrazí dialog pro vyhledávání v AOT pro vybrané objekty.
Label Search
  • Zobrazí Editor popisků.
V pravé části se nachází: Search (input box) - lze do něj zadat řadu věcí:
  • AOT cestu (třeba \Classes\Info) - otevře objekt v AOT; metodu přímo v editoru.
  • Výraz začínající otazníkem (např. ?74 MOD 17 nebo ?tableId2Name(177)) - vyhodnotí výraz a výsledek vypíše do infologu.
  • Příkaz začínající vykřičníkem (např. !beep();) - provede příkaz.
  • Ostatní - vyhledá text na Googlu. Je tam nastavené hledání AxSearch, které mi ale nepřijde příliš užitečné.
About
  • Verze, odkaz na domovskou stránku, text licence.
Pause
  • Pozastaví úlohy Tabaxu běžící na pozadí. Nevím, co přesně dělají, ale ve výpisu profileru opravdu nehezky překáží. Toto tlačítko problém řeší.
Preferences
  • Obsahuje několik nastavení, např. maximální velikost záložky.
Close
  • Ukončí Tabax.
Automatické spouštění Tabaxu Chcete-li automaticky spouštět Tabax při startu AX, můžete použít postup popsaný na stránce Tabaxu, tzn. umístit následující kód do metody startupPost() (AX3) nebo workspaceWindowCreated() (AX4 a 5) ve třídě Info:

// if shift is pressed skip running tabax
if(!WinAPI::isShiftButtonDown())
{
// check for user ID 
if(curUserId()=='bmi') // <- change to your loginname
{
 // actually run tabax
 TreeNode::findNode(@'\Forms\'+formStr(Tabax)).AOTrun();
    }
} 
Nebo, pokud chcete nastavovat spouštění pro různé uživatele či skupiny uživatelů, můžete zkusit <reklama>můj StartupTool</reklama>. Odkazy: Axaptapedia: Tabax Axaptapedia: Tabax Plugin API Axaptapedia: AxPath Max Belugin: New AxPath plugin