FIM2010-Semi-Dynamic RCDC Operations

Like many, I have been trying to find a good method to create RCDC’s that are dynamic similar to the ones that are created for the groups and user objects where a checkbox may allow different fields to be presented. I have done some playing around with this and found a method that gives me a semi-dynamic method for having some of these controls.

As most have done, we know we can hide different RCDC objects or control whether they are read only using boolean values in our target objects. This is important as we can use these mechanisms to allow controls to be visible or not visible on demand so long as we have automatic postback set on the values.

In the example below, I am using the mail enabled boolean flag to determine whether or not the display name field is visible and required:

<my:Control my:Name=”MailEnabled” my:TypeName=”UocCheckBox” my:Caption=”Mail Enabled” my:Description=”{Binding Source=schema, Path=MailEnabled.Description}” my:AutoPostback=”true” my:RightsLevel=”{Binding Source=rights, Path=MailEnabled}”>

<my:Properties>

<my:Property my:Name=”Enabled” my:Value=”True”/>

<my:Property my:Name=”Visible” my:Value=”True”/>

<my:Property my:Name=”Required” my:Value=”True”/>

<my:Property my:Name=”DefaultValue” my:Value=”False”/>

<my:Property my:Name=”Checked” my:Value=”{Binding Source=object, Path=MailEnabled,Mode=TwoWay}”/>

</my:Properties>

</my:Control>

<my:Control my:Name=”DisplayName” my:TypeName=”UocTextBox” my:Caption=”Display Name” my:RightsLevel=”{Binding Source=rights, Path=DisplayName}” my:Description=”{Binding Source=schema, Path=DisplayName.Description}” my:Visible=”{Binding Source=object, Path=MailEnabled, Mode=TwoWay}”>

<my:Properties>

<my:Property my:Name=”Columns” my:Value=”80″/>

          <my:Property my:Name=”Required” my:Value=”{Binding Source=object, Path=MailEnabled, Mode=TwoWay}”/>

<my:Property my:Name=”MaxLength” my:Value=”256″/>

<my:Property my:Name=”Text” my:Value=”{Binding Source=object, Path=DisplayName, Mode=TwoWay}”/>

</my:Properties>

</my:Control>

You can really use this method against any type of boolean control value in the RCDC including the visible and required methods shown above. But there is also the read-only and enabled flags. Check with the controls that you’re using for the different boolean controls that you can use in this method.

Important caveats to using this method:

  • Uninitialized boolean values will cause your RCDC to not render. You will get that error message that there is a problem with the RCDC at the bottom of the window and be looking at the default view (which is usually seen with the advanced view button). This has resulted in my having to create a default values workflow that ensures that all the booleans are set in new objects that come from the synchronization engine or are created using the portal itself.
  • When using these methods in the create RCDC’s, make sure you are providing  a default value (as in the MailEnabled control where I have <my:Property my:Name=”DefaultValue” my:Value=”False”/> defined) as this “initializes” the values for the attributes and allows them to be used. Failing to this and you end up with the error noted above.
  • Review the operation of the RCDC carefully. In some cases if a user selects an option and it removes a control inappropriately, you may end up with some data issues. This is something that can be mitigated with some post processing of course however, be aware that the RCDC changes immediately. So in the example above, if the user had changed the mail enabled to disabled with a display name value configured, that value could be lost (although it isn’t required). Make sure you test appropriately.
This entry was posted in Forefront Identity Manager 2010. Bookmark the permalink.

15 Responses to FIM2010-Semi-Dynamic RCDC Operations

  1. Bindu says:

    Hello,

    Its a wonderful post. I have a question here. Though the displayName becomes invisible here when the MailEnabled is unchecked. But still the displayname holds the value entered in it when MailEnabled was checked. How can we empty the value also, along with making it invisible

    • You could set up an action workflow that is triggered when the “displayName” or “MailEnabled” flag is changed. The workflow can use the function evaluator to check to see if the value of “MailEnabled” is true. If yes, leave the value of “displayName” alone. Otherwise, remove it. The basic custom expression would be:

      IIF(MailEnabled,DisplayName,””)

      Thanks

      B

      • Bindu says:

        Thanks Blain, But my question is that in the UI in the confirmation page(before submit), the user would see displayname value getting changed which would be confusing. Is there a way to delete the value in RCDC itself, so that the value doesnt show up in the confirmation page.

  2. I’m not sure that there is a means to do that. The RCDC summary displays all the changes made to the group. If the user added a value into the DisplayName field and then hid the field, the RCDC still displays it. There is nothing from the RCDC side of things, that I know of, that you can use to clear it immediately upon the clearing of the checkbox.

    Thanks

    B

    • B says:

      Hello Blain,

      How does the solution of emptying the values work if there is a refernce attribute instead of displayname. My expression looks like
      IIF(MailEnabled,Manager,””)

      where the target attribute is manager. The manager is not getting empty when “MailEnabled” is false. Can you please help

      • I have been looking through the reference guides on this and there is a NULL() function that applies to attriute flows however, I’m curious to see if it works within the attributes in the FIM Service itself. In the case you provided, you could use IIF(MailEnabled,Manager,NULL()). Let me know if that works for you as I’ve not tried that one before.

        The other way around it is to have a blank reference attribute value that you can use as your second parameter. IIF(MailEnabled,Manager,BlankReferenceAttr) for example.

        Thanks

        B

  3. B says:

    Hi Blain,
    Thank you again for the prompt response. I tried using Null(). But it was throwing a post processing error as below:
    System.InvalidOperationException: There was an error generating the XML document. The type Microsoft.MetadirectoryServices.FunctionLibrary.NoFlowSingleton was not expected. Use the XmlInclude or SoapInclude attribute to specify types that are not known statically

    When I used a nullreference attribute, the value was still not getting emptied. Please can you help me get out of this.

    • That is interesting. I will have to dig into that more. I know that one of my developers here built a small workflow activity that deletes attribute values and inserts nulls into them. He was building another workflow to set another complex value and this was just an extension of it. We use it for standardized removal of any attribute type however, the copying of a NULL valued attribute is something that I have expected to operate.

      I’ll have to play with that more in the test lab. However, for now, it would appear the best method to you is to simply build a workflow that allows you to pass an attribute name and deletes the values.

      Thanks

      B

  4. B says:

    Blain,

    I tried building the workflow in which function evaluator will replace the value with empty reference value. But still no change is observed yet. I have also tried using “Null” function, but it throws same error as previous one. Any other way of deleting reference values.

    Thanks,
    Bindu

  5. remv says:

    Thank you very much Blain, for sharing this!
    I was wondering.. Is this also possible to use with a dropdown instead of a checkbox?

    • Hi There,

      The primary issue is that the response has to result in a true or false answer. The control has to be set to a default value and the control that is being hidden has to appear after the control that sets the value.

      So if you use a dropdown, so long as it is assigning values to a Boolean, I believe it should be okay. You just have to see whether or not you can have a default value set. If the Boolean does not have a value defined, the RCDC gives the red error message that it cannot render.

      Thanks

      B

  6. Peter Stapf says:

    Maybe it is a liitle bit to late, because last comment ist from May 2013 but you can delete Reference Value by setting it to one space character. (” “). This is the only way i know to delete/clear reference values.

    Regards
    Peter

    • Hi Peter,

      I’ll give that a try sometime. I thought I had already tried that but perhaps I missed it. I’ve gotten different results using spaces in other areas and possibly just thought it wouldn’t work.

      Thanks!

      B

  7. saad chekhchekh says:

    Hello,

    Is it possible to trigger the visibility of a field only when a specific value in a dropdownlist is selected? same goes for required field..

    Thanks
    Saâd

    • Hi There,
      Not that I am aware of. The only means I have had to make the RCDC have any dynamic properties is to manipulate boolean fields on the page and use autopostback.
      People who have been doing this have generally used a custom web front end and foregone use of the OOB portal from Microsoft.
      Thanks
      B

Leave a reply to saad chekhchekh Cancel reply