Pracovní prostory TFS v AX2012

Předchozí příspěvek – Sdílená vs. izolovaná prostředí Dynamics AX – jsem půvobně napsal hlavně jako úvod k tomuto příspěvku a abych se na něj mohl dnes odkazovat. Vyvolal nečekaně mnoho diskuze – a to je dobře. Srovnání obou možných přístupů by vám mělo pomoci zvolit ten nejvhodnější a upozornit, s jakými problémy se případně musíte vypořádat. Tento článek popisuje, jak řešit jeden z těchto problémů – konkrétně jak použít více pracovních prostorů Team Foundation Serveru ve sdíleném prostředí Dynamics AX 2012 (což není standardně podporováno). Předchozí článek vám měl ukázat, že možná chcete raději použít zcela jiný přístup.

AX2012 podporuje pouze jediný pracovní prostor TFS a ten je vytvořen jako soukromý, takže správu verzí v takovém prostředí nemůže použít nikdo jiný než vlastník tohoto pracovního prostoru. Jedním řešením je veřejný pracovní prostor– to funguje dobře, dokud jste si vědomi jeho omezení. V podstatě se dá říct, že z pohledu TFS používá veřejný pracovní prostor stále jen jeden uživatel – jeho vlastník. Například pokud je soubor vyzvednut ze správy verzí, TFS ví, v jakém workspace se s tímto souborem pracuje a ví, kdo daný workspace vlastní. Neví ale nic o tom, jaký konkrétní uživatel tento veřejný pracovní prostor právě používá.

Pokud chcete prostředí používat pro normální vývoj, veřejný pracovní prostor vám asi nebude vyhovovat. Pokud tedy plánujete používat sdílené prostředí AX2012 a TFS, měli byste si ještě před nasazením rozmyslet, jak tento problém hodláte řešit.

Bez více pracovních prostorů se ale asi neobejdete a jak bylo řečeno, AX2012 je defaultně nepodporuje, tudíž to vyžaduje programovou změnu. Každý uživatel by měl mít svůj vlastní (soukromý) pracovní prostor, ale protože se na sdíleném prostředí používá společný kód, i pracovní prostory potřebují používat stejný kód (viz také AX TFS FAQ). Řešením je vytvořit samostaný adresář (a pracovní prostor) pro každého uživatele a přesměrovat je do jednoho společného adresáře. K tomu můžete použít junction points nebo symblické odkazy

Přesně to nabízí rozšíření, o kterém teď bude řeč. Umožňuje definovat pracovní prostory pro jednotlivé uživatele a vytvořit symblické odkazy přímo z Dynamics AX. A samozřejmě mění applikační logiku v AX tak, aby používala tyto nové pracovní prostory.

Addax

Před popisem vlastního rozšíření se ale musím zmínit o ještě jedné věci, na které toto rozšíření závisí a která je součástí .xpo. Pro svou potřebu jsem si napsal jednoduchý systém pro správu různých vývojářských rozšíření a tato modifkace pro soukromé pracovní prostory je jeden z jeho pluginů. Přestože se v tuto chvíli nechystám zveřejnit žádný jiný plugin a mít celý systém pro jediný plugin je dost zbytečné, usoudil jsem, že se to někomu může hodit, minimálně jako inspirace.

Pracovně jsem ho nazval Addax, což je zkratka Addons for AX a také zvíře. 🙂

Instalace

Zazipované .xpo je ke stažení zde. Naimportujte to Dynamics AX 2012 (vytvořeno v RTM verzi).

Xpo obsahuje několik standardních objektů – ne mnoho, ale přesto nejprve zkontrolujte, zda nedojde k nějakému konfliktu.

Nastavení správy verzí

Konfigurace správy verzí neobsahuje žádné parametry pro individuální pracovní prostory. Adresář nastavený nastavený jako Repository folder se zkrátka použije jako rodič všech pracovních prostorů.

Až dokončíte konfiguraci popsanou níže, vraťte se do tohoto dialogu a povolte správu verzí.

Aktivace pluginu

V naimportovaném projektu (AddaxWorkspaces) najděte a spusťte položku menu AddaxPlugin. V tuto chvíli nejsou ve formuláři zobrazeny žádné pluginy, takže je vyhledejte stisknutím tlačítka Update plugins. Aktivujte plugin User repository a přejděte do nastavení pomocí tlačítka Configure.

Konfigurace pracovních prostorů

Konfigurace je jednoduchá – prostě založte nový záznam, vyberte ID uživatele a uložte. Cesta k pracovnímu prostoru je automaticky složena z cesty k repozitáři uvedené v nastavení správy verzí a Aliasu uživatele.

Zároveň s uložením záznamu se vytvoří i příslušný adresář:

Zde jsou symbolické odkazy pro uživatele administrator a hal a společný adresář Shared, na který všechny odkazy směřují (a který je také vytvořen automaticky).

Ve vlastnostech odkazu lze snadno vidět, na jaký objekt odkazuje.

Při smazání záznamu ve formuláři je odstraněn i příslušný odkaz.

Toto řešení má svá teoretická omezení, například nelze použít dva uživatele se stejným aliasem (ale různou doménou), ale nemyslím, že by to byl praktický problém.

Pracovní prostor není vše

Mít pro každého uživatele vlastní pracovní prostor je skvělé, nicméně AX 2012 předpokládá, že pracovní prostor je jen jeden. Například když AX potřebuje seznam check-outnutých objektů, zeptáte se TFS na objekty pro daný pracovní prostor. Samozřejmě nic neví o ostatních pracovních prostorech.

Šlo by to změnit? Jistě, šlo. Já jsem to neimplementoval prostě proto, že jsem to zatím nepotřeboval.