<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Mark Gabarra's Blog</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/markgabarra/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/markgabarra/feed.xml</link>
    <description>Disclaimer:&amp;nbsp;&amp;nbsp;These postings are provided &amp;quot;AS IS&amp;quot; with no warranties, and confer no rights. Use of included script samples are subject to the terms specified at http://www.microsoft.com/info/cpyright.htm.</description>
    <lastBuildDate>Wed, 17 Apr 2019 04:03:27 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>One Final Surprise</title>
      <link>https://docs.microsoft.com/archive/blogs/markgabarra/one-final-surprise</link>
      <pubDate>Sat, 08 Nov 2008 01:41:00 GMT</pubDate>
      <dc:creator><![CDATA[MSDN Archive]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/markgabarra/2008/11/08/one-final-surprise/</guid>
      <description><![CDATA[I promised a week of surprises and I have one final surprise for all of you.&nbsp; It is with a very...]]></description>
      <content:encoded><![CDATA[<P>I promised a week of surprises and I have one final surprise for all of you.&nbsp; It is with a very heavy heart that I say farewell to Microsoft.&nbsp; Twelve years ago Microsoft hired me right out of college and it has been an amazing ride ever since.&nbsp; My days in test helping to ship such components as OLE Automation and CLR 1.0 and 1.1.&nbsp; My transition to dev to help build and ship <a href="http://wcf.netfx3.com/">Windows Communication Foundation</a> 3.0 and <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a>.&nbsp; It has been one crazy rollercoaster.</P>
<P>However, recently I have been on an even crazier rollercoaster with my daughter.&nbsp; This has often led to making decisions between spending time on work or time with my daughter.&nbsp; Over the next year or two my daughter will be entering a very important developmental window where we will be working towards preparing her for school.&nbsp; During this time a very focused effort on her can have an incredible positive impact on her life long term.</P>
<P>That being the case, I have decided to step away from Microsoft and devote myself full-time to my daughter during this very precious, and limited, developmental window of her life.&nbsp; I step away from the role of Software Design Engineer to take on a variety of roles that are best summed up as Stay-At-Home Dad.</P>
<P>It has truly been a pleasure working with all everyone over the past twelve years.&nbsp; I know it sounds like cheerleading to talk about how we have changed the world with our software, but I honestly believe that we can make that claim.&nbsp; The CLR changed how software was written with the introduction of managed code and made it easier to write complex software.&nbsp; The WCF provided a mechanism to abstract the communication layer of distributed applications in a similar manner to how the data and UI layers are separated (again making it easier to write distributed applications).&nbsp; ILM "2" will change the way that identity management is done within the enterprise and has the potential to change the way identity aware applications are written.</P>
<P>My last day was today (Friday, November 7).&nbsp; For those of you following the development of ILM "2", especially the integration with <a href="http://wf.netfx3.com/">Windows Workflow Foundation</a>, fear not.&nbsp; I leave you in good hands.&nbsp; Assuming that I still have access to post here I will be providing a pointer to my replacement's blog as soon as it is available.&nbsp; Until then there is always Bobby and Nima's Blog.&nbsp; (Had to get one last shot in you two! :) )&nbsp; Thank you again for all the support and great questions that kept me posting.&nbsp; Good luck with all of you endeavors and I hope to hear great things of how ILM "2", and its integration with WF, is being used to solve amazing problems!<BR></P>]]></content:encoded>
    </item>
    <item>
      <title>Display Name Generation Activity - A Custom ILM2 Action Activity</title>
      <link>https://docs.microsoft.com/archive/blogs/markgabarra/display-name-generation-activity-a-custom-ilm2-action-activity</link>
      <pubDate>Thu, 06 Nov 2008 15:08:44 GMT</pubDate>
      <dc:creator><![CDATA[MSDN Archive]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/markgabarra/2008/11/06/display-name-generation-activity-a-custom-ilm2-action-activity/</guid>
      <description><![CDATA[I have tried in a few of my posts regarding the Microsoft Identity Lifecycle Manager "2" request...]]></description>
      <content:encoded><![CDATA[<p>I have tried in a few of my posts regarding the <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> request processing model to emphasize that the Action phase can be used for a wide range of activities.&#160; ILM2 will ship with some activities to be used inside this phase of processing that may provide insight into its flexibility.&#160; I anticipate that one common use for this phase within enterprises will be to update the target of a request with additional, calculated data.&#160; To help out developers interested in this scenario, I am making available a 20 minute video where I walk you through writing a custom activity to be used in the Action phase to calculate a dynamic DisplayName for a request's target resource and update that resource with the new DisplayName value.</p>  <p>In what I call the DisplayNameGeneratorActivity, I have created an activity that allows administrators to configure ILM2 workflow definitions to define a resource's DisplayName attribute format using the lookup grammar available within ILM2 email templates.&#160; The activity will resolve that grammar according to a request and then update the target resource's DisplayName attribute with the result of that resolution.&#160; This allows for enterprises to define policy around a resource's DisplayName.&#160; For example, using this approach an enterprise can enforce that all Person resources managed in ILM2 will have their DisplayName attribute set to &quot;LastName, FirstName (AccountName)&quot;.</p>  <p>Just as with the DisplayNameValidatorActivity walk through, after implementing the actual activity code, I continue to walk you through writing the code required to expose this activity through the ILM2 portal's workflow designer.&#160; I then walk you through the actual deployment of this new activity to an ILM2 web service.&#160; Finally, I use the ILM2 web portal to create a workflow definition including my new activity, connect it to an ManagementPolicyRule, and trigger the execution of the workflow - showing how this activity overwrites an end user's requested DisplayName with the one defined by this policy. </p>  <p>The concepts used in this activity will allow developers to understand how to create custom activities to be used within an ILM2 deployment for calculating dynamic attribute values for specific resources and then updating those resources within the Action phase when resources are either created or updated.&#160; As always, enjoy... </p>  <p>Video Length : ~20 minutes </p>  <p><iframe style="border-right: #dde5e9 1px solid; padding-right: 0px; border-top: #dde5e9 1px solid; padding-left: 0px; padding-bottom: 0px; margin: 3px; border-left: #dde5e9 1px solid; width: 240px; padding-top: 0px; border-bottom: #dde5e9 1px solid; height: 66px; background-color: #ffffff" marginwidth="0" marginheight="0" src="http://cid-ff8e7442f8ce079a.skydrive.live.com/embedrowdetail.aspx/Public/DisplayNameGeneratorActivity.wmv" frameborder="0" scrolling="no"></iframe></p>]]></content:encoded>
    </item>
    <item>
      <title>Display Name Validation Activity - A Custom ILM2 Authorization Activity</title>
      <link>https://docs.microsoft.com/archive/blogs/markgabarra/display-name-validation-activity-a-custom-ilm2-authorization-activity</link>
      <pubDate>Thu, 06 Nov 2008 14:56:29 GMT</pubDate>
      <dc:creator><![CDATA[MSDN Archive]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/markgabarra/2008/11/06/display-name-validation-activity-a-custom-ilm2-authorization-activity/</guid>
      <description><![CDATA[I have tried in a few of my posts regarding the Microsoft Identity Lifecycle Manager "2" request...]]></description>
      <content:encoded><![CDATA[<p>I have tried in a few of my posts regarding the <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> request processing model to emphasize that the Authorization (AuthZ) phase can be used for more than just seeking another person's approval for a specific request.&#160; ILM2 will ship with some additional validation activities to be used inside this phase of processing; however, I anticipate that enterprises may want to write their own custom validation logic.&#160; To help out I am making available a 40 minute video where I walk you through writing a custom activity to be used in the AuthZ phase to perform additional validation on a resource's DisplayName attribute before allowing the request to be processed.</p>  <p>In what I call the DisplayNameValidatorActivity, I have created an activity that allows administrators to configure ILM2 workflow definitions to check the DisplayName attribute for the presence of a list of illegal words.&#160; Both the set of illegal words and the delimiters used to define a word are configurable to allow the behavior of the activity to grow without requiring recompiling and deployment.</p>  <p>After implementing the actual activity code, I continue to walk you through writing the code required to expose this activity through the ILM2 portal's workflow designer.&#160; I then walk you through the actual deployment of this new activity to an ILM2 web service.&#160; Finally, I use the ILM2 web portal to create a workflow definition including my new activity, connect it to an ManagementPolicyRule, and trigger the execution of the workflow - showing both a case where the activity denies the request and a case where the activity allows the request.</p>  <p>The concepts used in this activity will allow developers to understand how to create custom activities to be used within an ILM2 deployment for doing complex inspection of a request's content to determine whether or not that request should be allowed.&#160; As always, enjoy...</p>  <p>Video Length : ~40 minutes</p>  <p><iframe style="border-right: #dde5e9 1px solid; padding-right: 0px; border-top: #dde5e9 1px solid; padding-left: 0px; padding-bottom: 0px; margin: 3px; border-left: #dde5e9 1px solid; width: 240px; padding-top: 0px; border-bottom: #dde5e9 1px solid; height: 66px; background-color: #ffffff" marginwidth="0" marginheight="0" src="http://cid-ff8e7442f8ce079a.skydrive.live.com/embedrowdetail.aspx/Public/DisplayNameValidatorActivity.wmv" frameborder="0" scrolling="no"></iframe></p>]]></content:encoded>
    </item>
    <item>
      <title>Setting Up Visual Studio For ILM Custom Activity Development</title>
      <link>https://docs.microsoft.com/archive/blogs/markgabarra/setting-up-visual-studio-for-ilm-custom-activity-development</link>
      <pubDate>Thu, 06 Nov 2008 14:42:00 GMT</pubDate>
      <dc:creator><![CDATA[MSDN Archive]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/markgabarra/2008/11/06/setting-up-visual-studio-for-ilm-custom-activity-development/</guid>
      <description><![CDATA[The first step in getting started writing custom Windows Workflow Foundation activities for use in...]]></description>
      <content:encoded><![CDATA[<P>The first step in getting started writing custom <a href="http://wf.netfx3.com/">Windows Workflow Foundation</a> activities for use in <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> is to get your environment ready.&nbsp; There are a number of ways to do this and a developers environment can be a very personal thing.&nbsp; However, in an attempt to help out those of you getting started with custom activity development I am making available a 6 minute video capture of how I setup my Visual Studio for ILM2 activity development.&nbsp; Hopefully this will help you better follow along subsequent posts where I actually walk you through activity development.</P>
<P>Enjoy.</P>
<P>Video Length : ~6 minutes</P>
<P><IFRAME style="BORDER-RIGHT: #dde5e9 1px solid; PADDING-RIGHT: 0px; BORDER-TOP: #dde5e9 1px solid; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 3px; BORDER-LEFT: #dde5e9 1px solid; WIDTH: 240px; PADDING-TOP: 0px; BORDER-BOTTOM: #dde5e9 1px solid; HEIGHT: 66px; BACKGROUND-COLOR: #ffffff" marginWidth=0 marginHeight=0 src="http://cid-ff8e7442f8ce079a.skydrive.live.com/embedrowdetail.aspx/Public/Setting%20Up%20Visual%20Studio.wmv" frameBorder=0 scrolling=no mce_src="http://cid-ff8e7442f8ce079a.skydrive.live.com/embedrowdetail.aspx/Public/Setting%20Up%20Visual%20Studio.wmv"></IFRAME></P>]]></content:encoded>
    </item>
    <item>
      <title>A New Look at The ILM 2 Request Processing Model</title>
      <link>https://docs.microsoft.com/archive/blogs/markgabarra/a-new-look-at-the-ilm-2-request-processing-model</link>
      <pubDate>Tue, 04 Nov 2008 22:03:00 GMT</pubDate>
      <dc:creator><![CDATA[MSDN Archive]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/markgabarra/2008/11/04/a-new-look-at-the-ilm-2-request-processing-model/</guid>
      <description><![CDATA[Ok, so I was sitting around my house one weekend trying to determine how best to continue my dive...]]></description>
      <content:encoded><![CDATA[<P>Ok, so I was sitting around my house one weekend trying to determine how best to continue my dive into the <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> request processing model.&nbsp; A few of you had asked for diagrams and some more conceptual information.&nbsp; The potential length of such a narrative actually gave me pause to start the required post.&nbsp; Then a flash of brilliance so amazing that I nearly fell out of my chair (ok, I actually asked my wife for some advice :)).&nbsp; The result of which is an experiment on how to share more complex information regarding ILM2 to all of you.&nbsp; Attached you will find a 20 minute presentation in WMV format.&nbsp; I am hoping that you will excuse the production quality of this first attempt at such a format; however, I am hoping to continue with additional presentations including various screen capture walk through of creating custom ILM2 activities.</P>
<P>I look forward to hearing comments from all of you as to if this is a favorable method of passing information through my blog.</P>
<P>Video Length : ~20 minutes</P>
<P><IFRAME style="BORDER-RIGHT: #dde5e9 1px solid; PADDING-RIGHT: 0px; BORDER-TOP: #dde5e9 1px solid; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 3px; BORDER-LEFT: #dde5e9 1px solid; WIDTH: 240px; PADDING-TOP: 0px; BORDER-BOTTOM: #dde5e9 1px solid; HEIGHT: 66px; BACKGROUND-COLOR: #ffffff" marginWidth=0 marginHeight=0 src="http://cid-ff8e7442f8ce079a.skydrive.live.com/embedrowdetail.aspx/Public/ILM%202%20Request%20Processing%20Model.wmv" frameBorder=0 scrolling=no mce_src="http://cid-ff8e7442f8ce079a.skydrive.live.com/embedrowdetail.aspx/Public/ILM%202%20Request%20Processing%20Model.wmv"></IFRAME></P>]]></content:encoded>
    </item>
    <item>
      <title>A Week of Surprises</title>
      <link>https://docs.microsoft.com/archive/blogs/markgabarra/a-week-of-surprises</link>
      <pubDate>Tue, 04 Nov 2008 21:54:37 GMT</pubDate>
      <dc:creator><![CDATA[MSDN Archive]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/markgabarra/2008/11/04/a-week-of-surprises/</guid>
      <description><![CDATA[I know it has been awhile since I posted anything, and I apologize for not keeping up with my...]]></description>
      <content:encoded><![CDATA[<p>I know it has been awhile since I posted anything, and I apologize for not keeping up with my blog.&#160; I am sure you have learned that we have shipped <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> RC.&#160; This is part of what has been taking up my time lately.&#160; I will be posting more frequently this week than I have in the past.&#160; I am looking forward to hearing comments about some of the upcoming posts as they become available.&#160; For now, I am going to step aside and share with you a more formal announcement of the ILM2 RC release from Lori Craw, our Group Product Manager:</p>  <blockquote>   <p>I&#8217;m Lori Craw, group product manager covering identity and security at Microsoft. Today I am pleased to announce the exciting news that the Identity Lifecycle Manager &#8220;2&#8221; Release Candidate (RC) is now available. </p>    <p>ILM &#8220;2&#8221; builds on our Identity Lifecycle Manager 2007 investments, and includes solutions that will help IT more efficiently and effectively automate identity policies for users and their associated credentials and entitlements. An important set of features in this release focus on self-service for end users, enabling them to manage some of their own information like their passwords and groups, using self-service tools built into Office. The IT pro tools, combined with end-user self-service in Office and developer experiences using .NET and Visual Studio add up to a very powerful combination. </p>    <p><b><i></i></b></p>    <p>We&#8217;ve received great feedback on these features from our beta and TAP customers so far. We also have seen some great momentum with core partners, including Quest, Omada, and Unisys.</p>    <p><b><i></i></b></p>    <p>So what&#8217;s new in the RC, you ask? Some of the top new additions to the RC include:</p>    <p>- Support for scale out of the ILM &quot;2&quot; middle tier database and portal on separate servers, and support for multiple portal servers     <br />- Added support for managing groups across multiple Active Directory forests      <br />- Improvements in the request and notification emails, including customizable notification emails and request details baked into the out-of-box request emails      <br />- Support for third-party certificate authorities (CAs)      <br />- Performance and stability improvements      <br />- Localization support for German and Japanese </p>    <p>I&#8217;d like to invite you to learn more about ILM &#8220;2&#8221; and to try out the RC for yourself by visiting <a href="http://www.microsoft.com/ilm2">www.microsoft.com/ilm2</a>.</p>    <p>Regards,     <br />Lori Craw      <br />Group Product Manager      <br />Microsoft Identity and Security</p></blockquote>]]></content:encoded>
    </item>
    <item>
      <title>Give A Product An Extensibility Point, Feed A Community</title>
      <link>https://docs.microsoft.com/archive/blogs/markgabarra/give-a-product-an-extensibility-point-feed-a-community</link>
      <pubDate>Wed, 24 Sep 2008 18:00:00 GMT</pubDate>
      <dc:creator><![CDATA[MSDN Archive]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/markgabarra/2008/09/24/give-a-product-an-extensibility-point-feed-a-community/</guid>
      <description><![CDATA[Another week of heads down coding and bug fixing for the latest Microsoft Identity Lifecycle Manager...]]></description>
      <content:encoded><![CDATA[<P>Another week of heads down coding and bug fixing for the latest <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> product milestone, and another week with trouble finding time to produce a new blog post.&nbsp; This week I would like to thank Brad, Paul, and the folks at <A href="http://www.ensynch.com/" mce_href="http://www.ensynch.com">Ensynch</A> for providing me another easy post.&nbsp; :)&nbsp; Ensynch has just published a wonderful white paper on how to write custom <a href="http://wf.netfx3.com/">Windows Workflow Foundation</a> activities for the ILM2 product, they even made their Visual Studio project public as well.&nbsp; They provided me with an early read and I believe my comments were , and I quote, "This is awesome!"&nbsp; This is a great explanation on the ILM2 WF extensibility point.&nbsp; Given that it did not come from me, it may be more beneficial than anything I could have produced.&nbsp; Their custom activity library includes some great diagnostic activities that can be used in testing any custom solution.</P>
<P>Without further ado you can find the white paper in the side bar of <A href="http://www.ensynch.com/pa_secure_ID_management.aspx" mce_href="http://www.ensynch.com/pa_secure_ID_management.aspx">Ensynch's Identity &amp; Access Management Practice Area</A>.&nbsp; Or for those who want direct links:</P>
<P><A href="http://www.ensynch.com/Documents.aspx?docID=124" mce_href="http://www.ensynch.com/Documents.aspx?docID=124">Identity and Access Management Operations Guide - ILM 2 Workflow Activity Walkthrough</A></P>
<P><A href="http://www.ensynch.com/Documents.aspx?docID=125" mce_href="http://www.ensynch.com/Documents.aspx?docID=125">Walkthrough Project Files</A></P>]]></content:encoded>
    </item>
    <item>
      <title>News and Updates from the UK MCS Talks Team : Session 5 Details: Registration Now Available</title>
      <link>https://docs.microsoft.com/archive/blogs/markgabarra/news-and-updates-from-the-uk-mcs-talks-team-session-5-details-registration-now-available</link>
      <pubDate>Thu, 18 Sep 2008 16:22:15 GMT</pubDate>
      <dc:creator><![CDATA[MSDN Archive]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/markgabarra/2008/09/18/news-and-updates-from-the-uk-mcs-talks-team-session-5-details-registration-now-available/</guid>
      <description><![CDATA[I have been heads down writing code and fixing bugs for the latest Microsoft Identity Lifecycle...]]></description>
      <content:encoded><![CDATA[<p> I have been heads down writing code and fixing bugs for the latest <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> product milestone.&#160; Unfortunately, that has made it difficult to find time to produce additional blog topics for all of you.&#160; However, someone out there has come to my rescue.&#160; I was recently made aware of a series of TechNet webcasts called MCS Talks Infrastructure Architecture (<a href="http://blogs.technet.com/mcstalks">http://blogs.technet.com/mcstalks</a>).&#160; These talks are being held in the United Kingdom and their next session is on Identity and Access Management.&#160; It is taking place in two weeks from this posting.&#160; On the off chance that some of you may be interested in attending, here is a link for more information (including registration):</p>  <p><a href="http://blogs.technet.com/mcstalks/archive/2008/09/18/session-5-details-registration-now-available.aspx">News and Updates from the UK MCS Talks Team : Session 5 Details: Registration Now Available</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Advice To Microsoft Identity Lifecycle Manager 2007 Consultants: Transitioning from ILM 2007 to ILM "2"</title>
      <link>https://docs.microsoft.com/archive/blogs/markgabarra/advice-to-microsoft-identity-lifecycle-manager-2007-consultants-transitioning-from-ilm-2007-to-ilm-2</link>
      <pubDate>Thu, 04 Sep 2008 16:02:25 GMT</pubDate>
      <dc:creator><![CDATA[MSDN Archive]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/markgabarra/2008/09/04/advice-to-microsoft-identity-lifecycle-manager-2007-consultants-transitioning-from-ilm-2007-to-ilm-2/</guid>
      <description><![CDATA[In recently helping a Microsoft Identity Lifecycle Manager 2007 solutions expert solve a problem for...]]></description>
      <content:encoded><![CDATA[<p>In recently helping a <a href="http://www.microsoft.com/ilm2007">Microsoft Identity Lifecycle Manager 2007</a> solutions expert solve a problem for their customer within the <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> Beta 3 release.&#160; He had already defined his scenario within the <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> request processing model and had run into some issues with the Out-Of-Box (OOB) workflow activities.&#160; Unfortunately, his scenario was outside the ability of the OOB support and required writing a custom activity, which I walked him through doing.&#160; In his thank you for my assistance he included the following remark:&#160; &quot;I&#8217;m starting to see that ILM 2007 consultants are going to need to be very deep in WF if they want be able to exploit ILM 2 to its full potential.&quot;</p>  <p>While I completely agree with his assessment, it got me thinking about what advice I have for those of you out there that have a strong knowledge of the <a href="http://www.microsoft.com/ilm2007">Microsoft Identity Lifecycle Manager 2007</a> product to assist your transition to the <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> product.&#160; To that point I will take yet another pause from peeling back the onion of the <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> request processing model and focus today's blog posting on that advice.</p>  <p>Let me start by assuring those out there who have spent (or are about to spend) the time to understand the <a href="http://www.microsoft.com/ilm2007">Microsoft Identity Lifecycle Manager 2007</a> product that you have not wasted your time.&#160; The components that made up that product are still an integral part of the <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> product.&#160; The Synchronization Engine and Certificate Lifecycle Manager will continue to be the focal points of a number of solutions for enterprises and those solutions will look very similar to solutions built on top of <a href="http://www.microsoft.com/ilm2007">Microsoft Identity Lifecycle Manager 2007</a>.&#160; With the release of <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> there will be new functionality in the form of the web services platform I have been writing about up until now.&#160; These new web services will provide additional extensibility and is where I would recommend solutions experts focusing their time.</p>  <p>When thinking about educating yourself about the new <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> web services platform as a transition from <a href="http://www.microsoft.com/ilm2007">Microsoft Identity Lifecycle Manager 2007</a> to <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a>, I like to break it into three pieces:&#160; conceptual processing model, <a href="http://wf.netfx3.com/">Windows Workflow Foundation</a> integration, and <a href="http://wcf.netfx3.com/">Windows Communication Foundation</a> integration.&#160; I would also recommend exploring these areas in that order.&#160; The <a href="http://wf.netfx3.com/">Windows Workflow Foundation</a> and <a href="http://wcf.netfx3.com/">Windows Communication Foundation</a> integration will help with implementing custom solutions using those extensibility points; however, it does not make sense to start writing custom code until you understand the concepts behind how that code will affect the processing model of the <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> product.&#160; Once you do understand the request processing model at a conceptual level it is most likely that your first scenario that requires custom code will involve the <a href="http://wf.netfx3.com/">Windows Workflow Foundation</a> extensibility rather than the <a href="http://wcf.netfx3.com/">Windows Communication Foundation</a> extensibility.</p>  <p>How do you educate yourself about the <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> request processing model?&#160; Personally, I recommend a certain MSDN blog that is focused on this specific topic.&#160; :)&#160; Honestly, this is the exact purpose I am trying to fill with this blog at the moment.&#160; Beyond my blog I would also recommend <a href="http://blogs.technet.com/doittoit/default.aspx">Bobby and Nima's ILM Blog</a> (these two generally focus on actually walk you through specific scenarios rather than conceptual discussions), and the other online references in my ILM References section in the side bar of my blog.&#160; <a href="http://blogs.technet.com/doittoit/default.aspx">Bobby and Nima's ILM Blog</a> is currently the best resource for describing the Codeless Provisioning feature of <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a>.&#160; (Essentially, how to configure the Synchronization Engine without writing a single line of code.)&#160; Hopefully more resources will become available as time goes on.</p>  <p>After you have gained an understanding of the <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> request processing model I would point you towards learning how to customize the OOB web portal.&#160; The portal that ships with <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> supports managing custom resource types and allows for customizing the user experience for managing those types.&#160; This customization does have its limits but will go a long way to providing custom solutions for managing resources not included within the shipping product.&#160; </p>  <p>As an example, it is a good bet that enterprises will want to add a &quot;Computer&quot; resource type in their deployments of <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a>.&#160; This is actually an example that the product group has used in demonstrations of <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> at various conferences.&#160; The shipping web portal will allow you to create this resource type, attached existing attributes, and create any new attributes needed to accurately describe the data tracked for a &quot;Computer&quot;.&#160; The portal will then provide a default user experience for managing these types immediately.&#160; Enterprises can go a step further and create an appropriate instance of a configuration resource to &quot;teach&quot; the portal how to provide a better user experience when managing these types.</p>  <p>How do you education yourself about customizing the <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> web portal?&#160; Well that is an even trickier question than the request processing model.&#160; I am most likely not going to get into that topic on my blog (I prefer the custom code side of things).&#160; I cannot speak for <a href="http://blogs.technet.com/doittoit/default.aspx">Bobby and Nima's ILM Blog</a> but that is the resource I would recommend at the moment.&#160; The <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> SDK should include documentation and, hopefully, a sample or two.&#160; If anyone reading this has their own blog, I would be happy to reference any posts you have on this topic.</p>  <p>Once you have an understanding of the <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> request processing model and portal customization you will find yourself at the point where additional extensibility requires custom code (of some type).&#160; Welcome to my world!&#160; :)&#160; At this point I would recommend diving deeper into the <a href="http://wf.netfx3.com/">Windows Workflow Foundation</a> technology.&#160; Given the customization support for custom resource types in the <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> web portal enterprises are more likely going to need custom business logic before they need custom web service clients.&#160; I believe that the majority of custom solutions will require some sort of custom business logic.</p>  <p>There are two methods of <a href="http://wf.netfx3.com/">Windows Workflow Foundation</a> centered extensibility within the [IML2] product:&#160; custom workflows and custom activities.&#160; In both cases, the word &quot;custom&quot; simply means that it is not supported OOB by the <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> product.&#160; In the case of custom workflows this means that the <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> web portal's process designer cannot create the appropriate XOML.&#160; This will require using a <a href="http://wf.netfx3.com/">Windows Workflow Foundation</a> designer application, such as Visual Studio, to create a XOML out of band and then use the <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> web portal process designer to import that workflow.&#160; In the case of custom activities this means that the <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> product did not ship with an activity that performs the required logic.&#160; This will require using a code editor, such as Visual Studio, to author and compile the custom code that will express the custom business logic.&#160; Using <a href="http://wf.netfx3.com/">Windows Workflow Foundation</a> specific language, this could be a composite activity (i.e. an activity made up of child activities) or a completely new activity.</p>  <p>How do you educate yourself about <a href="http://wf.netfx3.com/">Windows Workflow Foundation</a>?&#160; This is a bit easier than the topics discussed thus far since the technology has been available for some time and there are a number of books available.&#160; Personally, I recommend &quot;Essential Windows Workflow Foundation&quot; by Dharma Shukla and Bob Schmidt (ISBN #978-0321399830).&#160; This provides a great overview of the technology and dives fairly deep, leaving appropriate topics to other resources.&#160; It covers more than you will need to know for extending <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a>; however, that knowledge would not be wasted as it will provide context and allow you to ask questions and understand answers about why I chose to design our extensibility a certain way.&#160; While learning about <a href="http://wf.netfx3.com/">Windows Workflow Foundation</a> I would recommend focusing on the following topics (appropriate chapter titles from &quot;Essential Windows Workflow Foundation&quot; provided):</p>  <ol>   <li>The <a href="http://wf.netfx3.com/">Windows Workflow Foundation</a> conceptual model - [Deconstructing WF]</li>    <li>The <a href="http://wf.netfx3.com/">Windows Workflow Foundation</a> activity model - [Activity Execution] and [Advanced Activity Execution]</li>    <li>How to author <a href="http://wf.netfx3.com/">Windows Workflow Foundation</a> activities - [Activity Execution], [Advanced Activity Execution], and [Advanced Authoring]</li>    <li>XOML only workflows - [WF Programs] and [Applications]</li> </ol>  <p>As an additional resource for learning <a href="http://wf.netfx3.com/">Windows Workflow Foundation</a>, I am planning on spending some time here discussing the above topics in general.&#160; I am also planning on providing detailed discussions and examples of the <a href="http://wf.netfx3.com/">Windows Workflow Foundation</a> extensibility inside of <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a>.&#160; With some general knowledge of the <a href="http://wf.netfx3.com/">Windows Workflow Foundation</a> technology and how it specifically relates to <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> you should be able to build the vast number of possible scenarios on top of <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a>.</p>  <p>Finally, the next level of extensibility to look at would be our integration with the <a href="http://wcf.netfx3.com/">Windows Communication Foundation</a> technology.&#160; This is the technology we used to implement our WS-STAR compliant web services.&#160; Since we implemented our web services to be WS-STAR compliant it is not necessary to use <a href="http://wcf.netfx3.com/">Windows Communication Foundation</a> and, if you are familiar with developing web service clients, you could just educate yourself about our protocols.&#160; However, I would recommend looking into the <a href="http://wcf.netfx3.com/">Windows Communication Foundation</a> technology as a way to quickly author web service clients with minimal code.&#160; (Of course I could be biased since I helped to ship that piece of technology in my prior product team.)&#160; The use of <a href="http://wcf.netfx3.com/">Windows Communication Foundation</a> within an <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> solution will normally involve writing a custom client to interact with our web service.&#160; I have seen some solutions that required using <a href="http://wcf.netfx3.com/">Windows Communication Foundation</a> to write a custom web service client as part of a <a href="http://wf.netfx3.com/">Windows Workflow Foundation</a> custom activity that would interact with an external web service to make business logic decisions in managing resources within <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a>.</p>  <p>How do you educate yourself about <a href="http://wcf.netfx3.com/">Windows Communication Foundation</a>?&#160; This is a question similar to how you educate yourself about <a href="http://wf.netfx3.com/">Windows Workflow Foundation</a>.&#160; These technologies shipped at the same time and there are a number of books available.&#160; The interesting part here is that the books about <a href="http://wcf.netfx3.com/">Windows Communication Foundation</a> often cover the entire technology and focus on writing web services instead of clients.&#160; Writing clients tends to be a small chapter after explaining how to write services.&#160; I do not have any specific book recommendations, but I would recommend trying to find a book that spends some time talking specifically about creating <a href="http://wcf.netfx3.com/">Windows Communication Foundation</a> clients.</p>  <p><em>As a side note of some significance, there were some important differences between versions 3.0 and 3.5 of <a href="http://wcf.netfx3.com/">Windows Communication Foundation</a>, and we have built <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> on top of version 3.5.&#160; In particular, we make use of the WS-SecureConversations standard and make use of those context headers to make our services durable.</em></p>  <p>I hope this was of some use to you <a href="http://www.microsoft.com/ilm2007">Microsoft Identity Lifecycle Manager 2007</a> solutions experts looking to transition to <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a>.&#160; I am still hoping to provide more details here about the <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> request processing model and <a href="http://wf.netfx3.com/">Windows Workflow Foundation</a> integration.&#160; Ideally this post will give you some idea of how you can further educate yourself in parallel while you are waiting for me to cover the specific topic of your interest.&#160; (Just as a reminder, if you do have a specific topic of interest please feel free to use my Contact form or by using Comments of any of my posts.)</p>]]></content:encoded>
    </item>
    <item>
      <title>Automating Group Management: A Dynamic Group Primer</title>
      <link>https://docs.microsoft.com/archive/blogs/markgabarra/automating-group-management-a-dynamic-group-primer</link>
      <pubDate>Thu, 21 Aug 2008 11:47:00 GMT</pubDate>
      <dc:creator><![CDATA[MSDN Archive]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/markgabarra/2008/08/21/automating-group-management-a-dynamic-group-primer/</guid>
      <description><![CDATA[Well a "short break" turned into something a bit longer than I anticipated.&nbsp; My laptop is back...]]></description>
      <content:encoded><![CDATA[<P>Well a "short break" turned into something a bit longer than I anticipated.&nbsp; My laptop is back in gear, and I again have the freedom of spending my writing time somewhere other than my office.&nbsp; That little surprise I was working on for you is still in the works.&nbsp; Unfortunately, it seems to take lining up a few more ducks that I first thought.&nbsp; In the mean time I thought I would jump a bit ahead in my peeling of the <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> onion and respond to a question I received recently from one of you out there.&nbsp; This also allows me to celebrate my first post in the "Identity Lifecycle Manager Solution" category!&nbsp; Essentially, the question is this (some editing done to maintain confidentiality of content):</P>
<BLOCKQUOTE>
<P>After the sync with an external connected system completes, such as an HR system, is there an easy process to create/maintain groups based on a specific attribute?&nbsp; For example, if one of the attributes of the user is CostCenter, how can we automatically create/populate/maintain a group for each value of CostCenter found in the system?</P>
<P>The benefit, of course, is that if a user has the value of their CostCenter change they automatically have their group membership updated and that update is reflected in AD on the next export/sync of the appropriate Management Agents.&nbsp; Great for role based security!</P></BLOCKQUOTE>
<P>The great news is that this functionality is extremely easy in the eventual released version of <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a>.&nbsp; The not so good news is that this dynamic creation of groups is not supported out of box in the current Beta release of <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a>; however, it is still possible with a little extra coding effort.</P>
<P>Since this is going to be a discussion of a possible solution on top of <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a>, let me satisfy the legal folks here by starting with the following: 
<P><b>Disclaimer:</b>&nbsp;&nbsp;<font color="red">This posting and any code contained within are provided "AS IS" with no warranties, and confer no rights. Use of included code samples are subject to the terms specified at <a href="http://www.microsoft.com/info/cpyright.htm">http://www.microsoft.com/info/cpyright.htm</a>.</font></P>
<P>To start this discussion let me first put aside the complex part of the solution, dynamic creation of groups based on attribute values, and start talking about dynamic group membership.&nbsp; As I mentioned in an earlier post (<A href="http://blogs.msdn.com/markgabarra/archive/2008/07/11/a-discussion-of-computed-explicit-and-temporal-sets-in-microsoft-identity-lifecycle-manager-2.aspx" mce_href="http://blogs.msdn.com/markgabarra/archive/2008/07/11/a-discussion-of-computed-explicit-and-temporal-sets-in-microsoft-identity-lifecycle-manager-2.aspx">A Discussion of Computed, Explicit, and Temporal Sets in Microsoft Identity Lifecycle Manager "2"</A>) <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> supports a variety of set membership concepts.&nbsp; Although there are differences between Group and Set objects within <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a>, for discussions about membership they can be viewed as synonymous.&nbsp; This means that <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> also supports the same type of memberships for groups as it does for sets.&nbsp; For this particular post the type of group membership of interest in computed (also referred to as dynamic).</P>
<P>A dynamic group derives its membership from its Filter attribute which is essentially an XPath expression.&nbsp; As an example, lets say I wanted to create a dynamic group for all users who are in the domain "Domain1".&nbsp; Looking at the schema for the Person object type in <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> there is a string attribute Domain that contains this information.&nbsp; I could then create a group whose XPath filter was "/Person[Domain='Domain1']".&nbsp; This group would then populate its membership with every resource in the <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> system of type Person that has its Domain attribute set to the value "Domain1".&nbsp; Further, any new resources of type Person created with Domain set to "Domain1" will be automatically added to this group as part of its creation.&nbsp; Still further, any existing resource of type Person that is updated to set its Domain attribute to "Domain1" will be automatically added to this group as part of that update.&nbsp; Finally, any resource of type Person that currently has its Domain attribute set to "Domain1" that is updated to change its Domain attribute to something else will be (as you have probably guessed) automatically removed from this group as part of that update.</P>
<P>Lets look at a bit more complex of a scenario.&nbsp; Lets say that I wanted to create a dynamic group for all users who report directly to me (have me as there direct manager).&nbsp; Looking at the schema for the Person object type in <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> there is a reference attribute Manager that contains this information.&nbsp; I could then create a group whose XPath filter was "/Person[Manager='{SomeGuid}']" where "{SomeGuid}" is my Person resource's ObjectID attribute.&nbsp; Now this, unfortunately, would require that I know my Person resource's ObjectID and GUID's really are not that human friendly (have you ever tried to type one manually?).&nbsp; It would be nice if I could instead use something else I know to be unique on my Person resource as a way of identifying the Manager value.&nbsp; With a little bit of understanding of the Person resource we can identify that the AccountName and Domain attribute pair must also be unique.&nbsp; Luckily those two attributes are strings (much easier to type).&nbsp; Taking that into consideration, we can now write the following XPath:&nbsp; "/Person[Manager=/Person[AccountName='markgabarra' and Domain='Domain1']/ObjectID]".&nbsp; This group would then populate its membership with every resource in the <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> system of type Person that has its Manager attribute set to the value of every ObjectID value for every resource in the <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> system of type Person that has its AccountName attribute set to the value "markgabarra" and its Domain attribute set to the value of "Domain1".&nbsp; Assuming that I have correctly identified my AccountName (markgabarra) and my Domain (Domain1), this results in the embedded XPath returning only my Person resource's ObjectID, thus the total XPath results in returning every resource in the <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> system of type Person that has its Manager attribute set to my ObjectID.</P>
<P>Now lets look at the scenario mentioned in the question regarding CostCenter.&nbsp; From the discussion above creating a group for all Person resources in the CostCenter named "Department 100" would involve creating a dynamic group with the filter "/Person[CostCenter='Department 100']".&nbsp; This answers the question about maintaining (and populating) a group based on a specific attribute since <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> will automatically manage the group membership for the lifetime of that group.&nbsp; This leaves the question of dynamically creating such groups.&nbsp; To answer this I will have to take a step back and talk conceptually.&nbsp; Due to schedule and resource constraints the current Beta of <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> had to ship without the features needed to support this scenario.&nbsp; However, those features will be available in the final released version of the product.</P>
<P><EM>As a side note on XPath filters within <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> for you administrators and IT Professionals out there, if you are interested in creating a filter of all resources created by a specific person you could use the direct manager example above with some minor changes.&nbsp; To tell the filter to target "all resources" and not just resources of a specific type you would use the "*" wildcard.&nbsp; To identify the creator of a resource you would look at the Creator attribute.&nbsp; In the case of finding all resources that I created (assuming the same AccountName and Domain values for my Person resource above) you would use the following XPath filter:&nbsp; "/*[Creator=/Person[AccountName='markgabarra' and Domain='Domain1']/ObjectID]".</EM></P>
<P>In an earlier post (<A href="http://blogs.msdn.com/markgabarra/archive/2008/07/18/authn-authz-and-action-oh-my-microsoft-identity-lifecycle-manager-2-request-processing.aspx" mce_href="http://blogs.msdn.com/markgabarra/archive/2008/07/18/authn-authz-and-action-oh-my-microsoft-identity-lifecycle-manager-2-request-processing.aspx">AuthN, AuthZ, and Action, oh my: Microsoft Identity Lifecycle Manager "2" Request Processing</A>) I started to detail the different phases of request processing within <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a>.&nbsp; This post discussed the internal details of these phases but left for a later post the discussion of how scenarios can use these phases to solve specific problems.&nbsp; For this discussion I will focus on one possible use of the Action phase of request processing to solve the problem of dynamic group creation based on specific attribute values.</P>
<P>Briefly summarizing the relevant content in my previous posts, it is important to know the following:</P>
<UL>
<LI>All data operations within <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> are actually requests to perform the specified operation and the details of each request is available through an <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> Request resource</LI>
<LI>All requests in <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> go through the same phases of Request Processing: Rights Check, Authentication, Authorization, Commit, and Action</LI>
<LI>Any phase prior to the Commit phase can deny a request from occurring</LI>
<LI>The Authentication, Authorization, and Action phases can execute zero or more <a href="http://wf.netfx3.com/">Windows Workflow Foundation</a> workflow instances</LI>
<LI>The configuration of these Request Processing phases is done through the management of <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> ManagementPolicyRule, WorkflowDefinition, and Set resources</LI></UL>
<P>The creation of a dynamic group based on the possible values of an attribute can be done in a couple of ways.&nbsp; Lets look at two possibilities:</P>
<OL>
<LI>The attribute in question has a restricted set of possible values enforced through <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> schema (e.g. an integer with explicit MinValue and MaxValue, a string with explicit StringRegEx defining an enumerated string, etc)</LI>
<LI>The attribute in question does has an unrestricted set of possible values (it is worth noting that this solution would also work for the above scenario as well and is a more general solution to this problem)</LI></OL>
<P>In the first case, I would create a ManagementPolicyRule that would trigger for updates to the specified AttributeTypeDescription resource that contains the attribute's <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> schema information (from the question above "/AttributeTypeDescription[SystemName='CostCenter']") and touched the appropriate attribute that restricted the set (from the question above "StringRegEx" since "CostCenter" is a string attribute).&nbsp; To this ManagementPolicyRule I would attach a single ActionWorkflowDefinition.&nbsp; This action workflow would perform the following algorithm (notes about what is available and what requires custom code are based on the current Beta of <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> and not the final release version):</P>
<OL>
<LI>Retrieve the current request (available with the <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> CurrentRequestActivity)</LI>
<LI>Inspect the current request's parameters to determine the change to the StringRegEx attribute (requires custom code)</LI>
<LI>Determine the new possible set of filters for dynamic groups for each possible value (requires custom code)</LI>
<LI>For each possible filter value do the following (requires custom code, can use <a href="http://wf.netfx3.com/">Windows Workflow Foundation</a> WhileActivity or ReplicatorActivity)</LI>
<OL>
<LI>Query <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> for any groups whose filter is the possible value (requires custom code and reentering through the Web Service layer)</LI>
<LI>If above query results in zero results do the following (requires custom code, can use <a href="http://wf.netfx3.com/">Windows Workflow Foundation</a> IfElseActivity)</LI>
<OL>
<LI>Create new <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> Group resource with appropriate filter (available with the <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> CreateResourceActivity)</LI></OL></OL></OL>
<P>In the second case, I would create a ManagementPolicyRule that would trigger for all creates and updates of an appropriate set of resources (from the question above "All Persons") where the request touched the specific attribute (from the question above "CostCenter").&nbsp; To this ManagementPolicyRule I would attach a single ActionWorkflowDefinition.&nbsp; This action workflow would perform the following algorithm (notes about what is available and what requires custom code are based on the current Beta of <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> and not the final release version):</P>
<OL>
<LI>Retrieve the current request (available with the <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> CurrentRequestActivity)</LI>
<LI>Inspect the current request's parameters to determine the value this request set the key attribute (requires custom code)</LI>
<LI>Determine the new possible filters for the dynamic group for this value (requires custom code)</LI>
<LI>Query <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> for any groups whose filter is the possible value (requires custom code and reentering through the Web Service layer)</LI>
<LI>If above query results in zero results do the following (requires custom code, can use <a href="http://wf.netfx3.com/">Windows Workflow Foundation</a> IfElseActivity)</LI>
<OL>
<LI>Create new <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> Group resource with appropriate filter (available with the <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> CreateResourceActivity)</LI></OL></OL>
<P>These two approaches will result in the dynamic creation of these groups when new (possible) values are detected for the key attribute.&nbsp; They do not address the deletion of such groups when those values are no longer available.&nbsp; This is a bit more complex of a problem, but is possible.&nbsp; Staying at a very high conceptual level, I would recommend extending the schema of the <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> Group resource to add an attribute that can be used to mark these dynamically created groups.&nbsp; I would then create an <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> temporal Set that contains an XPath filter selecting all of these dynamically created groups that were modified in the last 24 hours (I will leave the details of creating a temporal set to another post).&nbsp; Next, I would create a ManagementPolicyRule that triggered on resources that transitioned into that Set and attach a single ActionWorkflowDefinition.&nbsp; The action workflow would Use the <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> ReadResourceActivity to retrieve the target resource and count the number of values in the ComputedMember attribute.&nbsp; If that number is zero (meaning the group has zero membership), it would use the <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> DeleteResourceActivity to delete the target resource.&nbsp; This would result in the dynamically created groups deleting themselves shortly after their membership become empty.</P>
<P>The workflow definitions for these two approaches may seem complex and require a number of steps utilizing custom code and (in the case of querying <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a>) reentering the <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> Web Service layer from within workflow.&nbsp; This may be disheartening to some of the potential customers of <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a>; however, let me provide some good news.&nbsp; Shortly after the current Beta of <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> released I was able to get to the missing features to better support these scenarios with less custom code.&nbsp; <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> will ship with an EnumerateResourcesActivity that will allow workflow developers to set an XPath filter and perform operations on each resource returned (or just use it to get a count of resources that match a specified filter).&nbsp; Additionally, <a href="http://www.microsoft.com/ilm2">Microsoft Identity Lifecycle Manager "2"</a> will ship with a ResourceTemplateActivity that can be used to dynamically create a resource based off of a template should a test filter return a count of zero.&nbsp; In other words, the ResourceTemplateActivity can be used to perform steps 4, 5, and 5.1 in the algorithm of option two, and steps 4.1, 4.2, and 4.2.1 of option one.&nbsp; The EnumerateResourcesActivity can be used to perform step 4 of option one.&nbsp; In both options this reduces the amount of custom code to inspecting the contents of the request to calculate the desired filter(s).</P>
<P>This begs the question, how do I write this custom code?&nbsp; That is a longer topic for multiple follow up posts around the topics of writing custom workflow and/or custom activities.&nbsp; I will have to leave it for another time, although I am working my way in that direction and I appreciate your patience.&nbsp; In the mean time, feel free to use my Contact Form or the Comments on my blog to ask questions or suggest topics.</P>]]></content:encoded>
    </item>
  </channel>
</rss>