Ako na custom Workflow v Microsoft Dynamics CRM 4.0

Published 13. januára 2009 14:09

Takže po dlhšom čase som sa dostal k napísaniu niečoho zmysluplného, vitajte a dúfam že sa Vám téma bude páčiť. (PS PF 2009 Big Smile )

V práci som sa dostal k problému, pri ktorom som musel napísať WF pre CRM 4.0. Keďže to bol môj prvý WF, trochu som sa rozhľadel a začal hľadať resources po webe. Nenašiel som toho veľa, ale predsa len sa niečo pošťastilo. Napísať niečo funkčné nebol až taký problém, väčší bol debugovať WF. Poviem Vám otvorene, najlepší názov pre tento problém je "pain in the ass", bohužiaľ. Aspoň ja som sa zabavil. Angry

Takže, ja som vyvíjal na CRM 4.0 Virtual PC od MS, nechcel som pokaziť CRM ktoré máme v práci. Na pokusy Vám bude bohato stačiť. Nainštalovaný je VS05, budete potrebovať Extension for Windows WF a môžete začať. (myslím že nič iné som nedoinštaloval)

CRM 4.0 by malo podporovať zaregistovanie celého WF, alebo len custom activity, ktorá sa dá normálne vložiť ako krok pri editácii WF tvoreného cez web rozhranie CRM.

Vytvorenie aktivity :

1: Vytvoríme Workflow activity library, pretože vytvárame Activity,

2 :Pridajte referencie na microsoft.crm.sdk a na microsoft.crm.sdktypeproxy, ktoré nájdete v SDK, budete ich potrebovať kvôli typom a atribútom,

3: Pre väčší komfort odporúčam pridať si aktivity vytvorené teamom CRM, ktoré nájdete v assembly microsoft.crm.sdk.dll v SDK. Pribudne Vám 13 nových aktivít, ktoré sú lepšie ako nič. Škoda, že ich design time experience nieje extra veľký, no potešia.

4: using Microsoft.Crm.Workflow; using Microsoft.Crm.Workflow.Activities; using Microsoft.Crm.SdkTypeProxy; a using Microsoft.Crm.Sdk; by mohlo potešiť intellisense aj vás Smile

5: Triedu označíme atribútom [CrmWorkflowActivity("názov aktivity", "názov sekcie, kde sa aktivita zobrazí")]

6: Property ktorú spojíme s dependency property označíme atribútom [CrmInput("Názov prop")]

7: Override-neme metódu Excecute do ktorej dáme kód ktorý sa má vykonať a náš primitívny Workflow je na svete.

Celý projekt pripojím k tomuto článku, aby ste sa mali od čoho odraziť.

 

Týmto sme vytvorili assembly ktorú musíme nejak podstrčiť CRM. Tu nastáva prvý problém, ako na to. V SDK sú nejaké pokusy, je tam aj command line tool, ktorý registruje assembly podľa xml (PluginDeveloper), dalej existuje GUI tool Plugin Registration Tool, ktorý som však mal problém zbuildovať no nakoniec sa to podarilo. Nájdete ich v adresári sdk\tools. Ja osobne som použil PluginRegistrationTool. Registrovanie funguje štýlom hokej, raz mi fungovala registracia cez GAC, raz cez databázu, nikdy však možnosť disk. Dôvod neviem, bohužial.

Registrácia pluginu cez tool :

 

 Nová aktivita ktorá nám pribudne do CRM 4.0 :

 

 Vytvorený WF s našou aktivitou :

 

V pravo dole môžete vidieť jedinú textovú property, ktorú sme použili. Môžeme ju naplniť buď statickými dátami, ako ja na obrázku, alebo dynamickými. Chcem len pripomenúť, že v prípade ak použijete dynamické hodnoty, tieto automaticky zmažú z políčka statické, teda sa nedajú bohužiaľ kombinovať, ďalej sa vám budú zobrazovať po uložení dyn. hodnoty 2x. Je to bug MS. Naplnené budú len 1x.

Bližšie info a fix nájdete tu :  https://forums.microsoft.com/Dynamics/ShowPost.aspx?PostID=3904741&SiteID=27 a http://weblogs.asp.net/gayanperera/archive/2008/09/23/crm-4-custom-workflow-activity-editor-bug-fix.aspx.

Debugovanie :

Vybuildujte knižnicu v Debugu, zaregistrujte ju a .pdb prihodte do adresára C:\Program Files\Microsoft Dynamics CRM\server\bin\assembly. To je samozrejme defaultný adresár, u Vás sa môže líšiť.

 

Ak budete samozrejme meniť file, budete potrebovať : odregistrovať starý file, zaregistrovať nový (ja som skúšal variantu s assembly v GAC, takže pridať / odobrať), reštartovať IIS, najlepšie cez iisreset command a ďalej restartovať service s názvom : Microsoft CRM Asynchronous Processing Service ktorý beží ako Network Service. Najrýchlejšia cesta je napísať do run services.msc a tým sa dostanete do konzoly servisov a môžete veselo reštartovať čo treba. Smile

Po tejto tortúre (mimochodom pripomínajúcej MOSS development, kde som tiež reštartoval IIS ako na bežiacom páse) sa attachnite na proces CrmAsyncService.exe, ten ste práve reštartovali.

 

Zastavenie na breakpointe chvíľu trvá, no malo by k nemu prísť. Každopádne som sa s debugom hodne potrápil, pretože mi nechcel kód zastať na breakpointe.

Takže dúfam, že som na nič nezabudol, keby mal niekto doplňujúce otázky, rád ich zodpoviem v diskusii, pripájam ešte zipnutý projekt na hranie a naviac link na bližší popis zdrojákov WF pre CRM 4.0 - http://nishantrana.wordpress.com/2008/10/30/custom-workflow-activities-in-crm-40/ a example WF - http://mscrmsupport.wordpress.com/2008/03/22/example-of-custom-workflow-activity-crm-40/.

Želám všetkým pekný deň.

Bookmark and Share

Komentáre

Bez komentárov