{"id":678,"date":"2006-06-01T00:58:00","date_gmt":"2006-06-01T09:58:00","guid":{"rendered":"http:\/\/www.cloudidentity.com\/blog\/2006\/06\/02\/breakpoints-in-a-custom-wf-designer-now-you-can\/"},"modified":"2013-03-15T21:31:08","modified_gmt":"2013-03-16T06:31:08","slug":"613983","status":"publish","type":"post","link":"https:\/\/www.cloudidentity.com\/blog\/2006\/06\/01\/613983\/","title":{"rendered":"Breakpoints in a custom WF designer? Now you can!"},"content":{"rendered":"<p><P>Let&#8217;s break the Infocard series for a short WF flavoured pause.<\/P><br \/>\n<P>After <EM>months<\/EM>, I finally managed to handle to <A HREF=\"\/mwinkle\/default.aspx\">Matt <\/A>the WF sample I made with Iwona for the <A href=\"http:\/\/www.microsoft.com\/events\/EventDetails.aspx?CMTYSvcSource=MSCOMMedia&amp;Params=%7eCMTYDataSvcParams%5e%7earg+Name%3d%22ID%22+Value%3d%221032295606%22%2f%5e%7earg+Name%3d%22ProviderID%22+Value%3d%22A6B43178-497C-4225-BA42-DF595171F04C%22%2f%5e%7earg+Name%3d%22lang%22+Value%3d%22en%22%2f%5e%7earg+Name%3d%22cr%22+Value%3d%22US%22%2f%5e%7esParams%5e%7e%2fsParams%5e%7e%2fCMTYDataSvcParams%5e\">manufacturing webcast<\/A> from some time ago. And Matt has been so kind first <A HREF=\"\/mwinkle\/archive\/2006\/06\/01\/613526.aspx\">to demonstrate it <\/A>in his <A href=\"http:\/\/msevents.microsoft.com\/cui\/WebCastEventDetails.aspx?EventID=1032296529&amp;EventCategory=5&amp;culture=en-US&amp;CountryCode=US\">webcast<\/A>, then to<A href=\"http:\/\/windowsworkflow.net\/downloads\/examples\/CustomWFDesigner%20-%202006-06-01.exe\"> publish it on windowsworkflow.net<\/A>!<\/P><br \/>\n<P>The idea behind the sample is simple: we crossed the designer <A href=\"http:\/\/www.microsoft.com\/downloads\/details.aspx?FamilyId=5DF74E3B-FB51-4A94-A11D-DFF70288A8BB&amp;displaylang=en\">HOL <\/A>with the monitoring HOL, so that you can edit your workflow and see them running in the same environment (we also changed a bit the appearence to be a more familiar experience for VS developers).<\/P><br \/>\n<P>Then we wondered how we could push further and add more control on the execution: namely, adding a breakpoint! Some friend from Italy asked for it, and I was really sad at the time not to have a solution to give them. But&#8230; I gave the problem to Iwona and she came out with a very nice solution! The idea is implementing a special Tracking Service: if it will run&nbsp;in the same process as the WF runtime, you will have a chance to get an hold of the execution thread in the right moments. Which is pretty much what we do in the sample \ud83d\ude42<\/P><br \/>\n<P>Last point, I hated the idea of having to recompile the entire solution every time I want to try a new activity library&#8230; so I added some reflection here and there, but not too much \ud83d\ude42<\/P><br \/>\n<P>Actually, there are TONS of things I would have liked to add: from the F9 for the breakpoint, to a decent activation\/deactivation pattern for the toolbar, etc etc&#8230; but honestly, that would not have been useful for demonstrating the point but just to satisfy my aesthetic sense. I&#8217;m still learning how to be in DPE, my old MCS ways are too rooted \ud83d\ude42<\/P><br \/>\n<P>If you have questions, let me know!<\/P><\/p>\n<div style=\"clear:both\"><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Let&#8217;s break the Infocard series for a short WF flavoured pause. After months, I finally managed to handle to Matt the WF sample I made with Iwona for the manufacturing webcast from some time ago. And Matt has been so kind first to demonstrate it in his webcast, then to publish it on&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"footnotes":""},"categories":[61],"tags":[],"class_list":["post-678","post","type-post","status-publish","format-standard","hentry","category-architecture-ws"],"_links":{"self":[{"href":"https:\/\/www.cloudidentity.com\/blog\/wp-json\/wp\/v2\/posts\/678","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.cloudidentity.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.cloudidentity.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.cloudidentity.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.cloudidentity.com\/blog\/wp-json\/wp\/v2\/comments?post=678"}],"version-history":[{"count":1,"href":"https:\/\/www.cloudidentity.com\/blog\/wp-json\/wp\/v2\/posts\/678\/revisions"}],"predecessor-version":[{"id":1809,"href":"https:\/\/www.cloudidentity.com\/blog\/wp-json\/wp\/v2\/posts\/678\/revisions\/1809"}],"wp:attachment":[{"href":"https:\/\/www.cloudidentity.com\/blog\/wp-json\/wp\/v2\/media?parent=678"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.cloudidentity.com\/blog\/wp-json\/wp\/v2\/categories?post=678"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.cloudidentity.com\/blog\/wp-json\/wp\/v2\/tags?post=678"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}