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
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
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
To access the CheckBox value in your Activity code simply use Me.MyCheckBox.
http://msdn.microsoft.com/en-us/library/ff859524.aspx http://www.wapshere.com/missmiis/adding-a-checkbox-to-a-fim-custom-workflow-ui
Maheshkumar S Tiwari edited Revision 7. Comment: Added tags
Ed Price - MSFT edited Revision 3. Comment: Added TOC
Ed Price MSFT edited Original. Comment: Updated title case.