How to Add a CheckBox to an FIM Custom Workflow UI

How to Add a CheckBox to an FIM Custom Workflow UI

This article shows you how to add a CheckBox to the UI part of your FIM custom workflow.



UI code functions

Add the following functions to your workflow's UI class:

#Region "CheckBox Functions"
    Private Function AddTableRowCheckBox(ByVal labelText As [String], ByVal controlID As [String], _
                                         ByVal defaultValue As [Boolean]) As TableRow
        Dim row As New TableRow()
        Dim labelCell As New TableCell()
        Dim controlCell As New TableCell()
        Dim label As New Label()
        Dim checkbox As New CheckBox()

        label.Text = labelText
        label.CssClass = MyBase.LabelCssClass
        labelCell.Controls.Add(label)

        checkbox.ID = controlID
        checkbox.Checked = defaultValue

        controlCell.Controls.Add(checkbox)
        row.Cells.Add(labelCell)
        row.Cells.Add(controlCell)
        Return row
    End Function

    Private Function GetIsChecked(ByVal checkBoxID As String) As Boolean
        Dim checkBox As CheckBox = DirectCast(Me.FindControl(checkBoxID), CheckBox)
        Return checkBox.Checked
    End Function

    Private Sub SetIsChecked(ByVal checkBoxID As String, ByVal isChecked As Boolean)
        Dim checkBox As CheckBox = DirectCast(Me.FindControl(checkBoxID), CheckBox)
        If checkBox IsNot Nothing Then
            checkBox.Checked = isChecked
        Else
            checkBox.Checked = True
        End If
    End Sub

    Private Sub SetCheckBoxReadOnlyOption(ByVal textBoxID As String, ByVal [readOnly] As Boolean)
        Dim checkBox As CheckBox = DirectCast(Me.FindControl(textBoxID), CheckBox)
        checkBox.Enabled = Not [readOnly]
    End Sub

#End Region

 

 

 

Define a Boolean property in the Activity code

In your workflow's Activity code you need to define a Boolean property which will represent whether the CheckBox is ticked in the FIM Portal workflow configuration:

    Public Shared MyCheckBoxProperty As DependencyProperty = DependencyProperty.Register("MyCheckBox", GetType(System.Boolean), GetType(MyActivity))
    <Description("Please specify the target attribute")> _
    <DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)> _
    <Browsable(True)> _
    Public Property MyCheckBox() As Boolean
        Get
            Return DirectCast(MyBase.GetValue(MyActivity.MyCheckBoxProperty), [Boolean])
        End Get
        Set(ByVal value As Boolean)
            MyBase.SetValue(MyActivity.MyCheckBoxProperty, value)
        End Set
    End Property

 

 

Add the CheckBox to the UI

You also need to modify the default methods of the UI class to render the CheckBox.

    Public Overrides Function GenerateActivityOnWorkflow(ByVal workflow As SequentialWorkflow) As Activity
        If Not Me.ValidateInputs() Then
            Return Nothing
        End If
        Dim MyActivity As New MyActivity()
        MyActivity.MyCheckBox = Me.GetIsChecked("bMyCheckBox")
        Return MyActivity
    End Function

    Public Overrides Sub LoadActivitySettings(ByVal activity As Activity)
        Dim MyActivity As MyActivity = TryCast(activity, MyActivity)
        If MyActivity IsNot Nothing Then
            Me.SetIsChecked("bMyCheckBox", MyActivity.MyCheckBox)
        End If
    End Sub

    Public Overrides Function PersistSettings() As ActivitySettingsPartData
        Dim data As New ActivitySettingsPartData()
        data("MyCheckBox") = Me.GetIsChecked("bMyCheckBox")
        Return data
    End Function

    Public Overrides Sub RestoreSettings(ByVal data As ActivitySettingsPartData)
        If data IsNot Nothing Then
            Me.SetIsChecked("bMyCheckBox", DirectCast(data("MyCheckBox"), Boolean))
        End If
    End Sub

    Public Overrides Sub SwitchMode(ByVal mode As ActivitySettingsPartMode)
        Dim [readOnly] As Boolean = (mode = ActivitySettingsPartMode.View)
        Me.SetCheckBoxReadOnlyOption("bMyCheckBox", [readOnly])
    End Sub

    Protected Overrides Sub CreateChildControls()
        Dim controlLayoutTable As Table
        controlLayoutTable = New Table()
        controlLayoutTable.Width = Unit.Percentage(100.0)
        controlLayoutTable.BorderWidth = 0
        controlLayoutTable.CellPadding = 2
        ' The following line adds the CheckBox
        controlLayoutTable.Rows.Add(Me.AddTableRowCheckBox("MyTitle:", "bMyCheckBox", True))
        Me.Controls.Add(controlLayoutTable)

        MyBase.CreateChildControls()
    End Sub

 

Using the value in your Activity code

To access the CheckBox value in your Activity code simply use Me.MyCheckBox.


References

http://msdn.microsoft.com/en-us/library/ff859524.aspx
http://www.wapshere.com/missmiis/adding-a-checkbox-to-a-fim-custom-workflow-ui

Leave a Comment
  • Please add 1 and 4 and type the answer here:
  • Post
Wiki - Revision Comment List(Revision Comment)
Sort by: Published Date | Most Recent | Most Useful
Comments
Page 1 of 1 (3 items)
Wikis - Comment List
Sort by: Published Date | Most Recent | Most Useful
Posting comments is temporarily disabled until 10:00am PST on Saturday, December 14th. Thank you for your patience.
Comments
  • Ed Price MSFT edited Original. Comment: Updated title case.

  • Ed Price - MSFT edited Revision 3. Comment: Added TOC

  • Maheshkumar S Tiwari edited Revision 7. Comment: Added tags

Page 1 of 1 (3 items)