úterý 15. června 2010

Kompilace

Čas od času se setkávám s představou, že AX aplikaci není třeba kompilovat jako celek a že kompilace změněných objektů je dostačující. Na takových projektech pak dochází k záhadnému chování aplikace, na chyby se přichází až v průběhu nasazování a podobně. Jak je to možné?

Je to proto, že změněné objekty mají další závislosti. Například:

  1. Programátor přidá nový parametr metody, ale opomene změnit některá její volání.
  2. Programátor přidá nový parametr metody, ale neví, že třída má potomka překrývajícího danou metodu.
  3. Programátor přidá instanční proměnnou třídy, ale nezkompiluje předky a potomky (kompilace dopředu mnohdy nestačí!). V tomto případě je kód v pořádku, ale aplikace se nechová správně, což je právě to záhadné chování.
  4. Dva programátoři vytvoří samostatně funkční, ale konfliktní modifikace apod.

Nejjednodušší způsob, jak tyto problémy odhalit (a některé i vyřešit), je pravidelně kompilovat celou aplikaci (a kontrolovat výsledky!). Ačkoli lze kompilaci spouštět manuálně, pro pravidelný běh je daleko výhodnější použít plánovanou úlohu, například takto:

Ax32.exe konfigurace.axc -logdir=C:\log -startupCmd=CompileAll_+

Následovat může synchronizace databáze, odeslání výsledků kompilace e-mailem a podobně. Kompilační log lze naimportovat zpět do AX, na druhou stranu s ním občas trochu bojují webové prohlížeče (je to totiž XML s transformací do HTML).

Podíváme-li se ještě jednou na příklady 1. a 2., vidíme, že jde o chyby vývojáře. Aby bylo možné tyto chyby minimalizovat, je nezbytně nutné udržovat aktuální křížové reference. Bylo by ale naivní předpokládat, že na projektech, kde nepovažují za nutné aplikaci ani kompilovat, pravidelně aktualizují křížové reference. Osobně považuji prostředí bez aktuálních referencí za nezpůsobilé k vývoji.

Zrovna dnes mi na jednom projektu zakázal jakýsi tamní Project Engineer zkompilovat aplikaci s tím, že jde o velmi neobvyklý krok. Pokud je pro ně neobvyklý, není to dobré znamení. Na posledním projektu, kde mi tvrdili, že kompilace je zbytečná, selhalo hned první nasazení právě kvůli nezkompilované rodičovské třídě…

úterý 8. června 2010

AX6: Editor kódu

Následující sedmiminutové video ukazuje nové vlastnosti editoru kódu v Dynamics AX 2011. Je velmi názorné, takže doporučuji zhlédnout, i pokud angličtnou nevládnete.

Rychlé shrnutí novinek
  • Více barev pro zvýrazňování syntaxe. Nic revolučního, ale určitě pomůže pro orientaci v kódu.
  • IntelliSense s nápovědným oknem (zobrazují se zde také informace z XML dokumentace, což by mohl být silný impulz pro její intenzivnější vytváření).
  • Automatické vytváření šablony pro XML dokumentaci (pro metodu doplní konkrétní názvy proměnných).
  • Číslování řádků. Ale že jsem se načekali…
  • Barevný okraj označující změněný kód (stejně jako ve Visual Studiu).
  • Lupa.
  • Sloupcová editace - umožňuje mazat nebo psát kód na více řádcích, ale stejném sloupci.
  • Zobrazní popisu kompilační chyby v tooltipu nad patřičnou řádkou kódu.
  • Text label v tooltipu nad ID labelu.

pátek 4. června 2010

AX.NET for Visual Studio

ProISV (autoři AX.NET) zveřejnili video, ve kterém předvádějí práci s AOT přímo v prostředí Visual Studia - vyhledávání v AOT, vytváření nových objektů, změnu vlastností a podobně. Tyto funkce budou dostupné v AX.NET v2.
Také zmiňují, že možná dojde i na editaci X++ kódu ve Visual Studiu!

čtvrtek 3. června 2010

Virtual Convergence 2010

Na webu vepexp.microsoft.com/convergence2010 jsou ode dneška k dispozici přednášky z konference Convergence 2010 (předpokládám, že jen z Atlanty).
Přednášky pojednávají o Dynamics produktech, stejně jako o Office, serverových řešeních a podobně. Zatím jsem neměl čas na detailní zkoumání, zhlédl jsem jen jedno (hodinové) video Inside Microsoft Dynamics X++ a to mohu vřele doporučit. Věnuje se poněkud opomíjenému tématu garbage collectoru, zmiňuje problematická místa X++, ukazuje breakpoint podmíněný určitou hodnotou v callstacku atd. Konečně jsem se také dozvěděl, proč mají volání CLRInterop onu režiji (protože .NETové metody volají pomocí reflexe). V závěru videa se se také dozvíte, o čem se nesmí mluvit… :-)
Jen mě mrzí, že není k dispozici download. Mohl jsem využít zítřejších šesti hodin ve vlaku.