/// <summary> /// Ensures that the controls that are created based on the WorkflowType have been created /// </summary> /// <param name="workflowTypePicker">The workflow type picker.</param> private void EnsureSelectedWorkflowTypeControls(WorkflowTypePicker workflowTypePicker) { DynamicControlsPanel containerControl = workflowTypePicker.Parent as DynamicControlsPanel; FilterField filterControl = containerControl.FirstParentControlOfType <FilterField>(); var entityFields = GetWorkflowAttributes(workflowTypePicker.SelectedValueAsId()); // Create the field selection dropdown string propertyControlId = string.Format("{0}_ddlProperty", containerControl.ID); RockDropDownList ddlProperty = containerControl.Controls.OfType <RockDropDownList>().FirstOrDefault(a => a.ID == propertyControlId); if (ddlProperty == null) { ddlProperty = new RockDropDownList(); ddlProperty.ID = propertyControlId; ddlProperty.AutoPostBack = true; ddlProperty.SelectedIndexChanged += ddlProperty_SelectedIndexChanged; ddlProperty.AddCssClass("js-property-dropdown"); ddlProperty.Attributes["EntityTypeId"] = EntityTypeCache.GetId <Rock.Model.Workflow>().ToString(); containerControl.Controls.Add(ddlProperty); } // update the list of items just in case the WorkflowType changed ddlProperty.Items.Clear(); // add Empty option first ddlProperty.Items.Add(new ListItem()); foreach (var entityField in entityFields) { // Add the field to the dropdown of available fields ddlProperty.Items.Add(new ListItem(entityField.TitleWithoutQualifier, entityField.UniqueName)); } if (workflowTypePicker.Page.IsPostBack) { ddlProperty.SetValue(workflowTypePicker.Page.Request.Params[ddlProperty.UniqueID]); } foreach (var entityField in entityFields) { string controlId = string.Format("{0}_{1}", containerControl.ID, entityField.UniqueName); if (!containerControl.Controls.OfType <Control>().Any(a => a.ID == controlId)) { var control = entityField.FieldType.Field.FilterControl(entityField.FieldConfig, controlId, true, filterControl.FilterMode); if (control != null) { containerControl.Controls.Add(control); } } } }
/// <summary> /// Renders the controls. /// </summary> /// <param name="entityType">Type of the entity.</param> /// <param name="filterControl">The filter control.</param> /// <param name="writer">The writer.</param> /// <param name="controls">The controls.</param> /// <param name="filterMode"></param> public override void RenderControls(Type entityType, FilterField filterControl, HtmlTextWriter writer, Control[] controls, FilterMode filterMode) { if (controls.Length > 0) { var containerControl = controls[0] as DynamicControlsPanel; if (containerControl.Controls.Count >= 2) { WorkflowTypePicker workflowTypePicker = containerControl.Controls[0] as WorkflowTypePicker; workflowTypePicker.RenderControl(writer); DropDownList ddlProperty = containerControl.Controls[1] as DropDownList; var entityFields = GetWorkflowAttributes(workflowTypePicker.SelectedValueAsId()); var panelControls = new List <Control>(); panelControls.AddRange(containerControl.Controls.OfType <Control>()); RenderEntityFieldsControls(entityType, filterControl, writer, entityFields, ddlProperty, panelControls, containerControl.ID, filterMode); } } }
/// <summary> /// Gets the selection. /// </summary> /// <param name="entityType">Type of the entity.</param> /// <param name="controls">The controls.</param> /// <param name="filterMode"></param> /// <returns></returns> public override string GetSelection(Type entityType, Control[] controls, FilterMode filterMode) { var settings = new SelectionConfig(); if (controls.Length > 0) { var containerControl = controls[0] as DynamicControlsPanel; if (containerControl.Controls.Count >= 1) { // note: since this datafilter creates additional controls outside of CreateChildControls(), we'll use our _controlsToRender instead of the controls parameter WorkflowTypePicker workflowTypePicker = containerControl.Controls[0] as WorkflowTypePicker; var workflowTypeId = workflowTypePicker.SelectedValueAsId(); if (containerControl.Controls.Count > 1) { DropDownList ddlProperty = containerControl.Controls[1] as DropDownList; settings.AttributeKey = ddlProperty.SelectedValue; settings.WorkflowTypeId = workflowTypeId; var entityFields = GetWorkflowAttributes(workflowTypeId); var entityField = entityFields.FirstOrDefault(f => f.UniqueName == ddlProperty.SelectedValue); if (entityField != null) { var panelControls = new List <Control>(); panelControls.AddRange(containerControl.Controls.OfType <Control>()); var control = panelControls.FirstOrDefault(c => c.ID.EndsWith(entityField.UniqueName)); if (control != null) { entityField.FieldType.Field.GetFilterValues(control, entityField.FieldConfig, filterMode).ForEach(v => settings.AttributeFilterSettings.Add(v)); } } } } } return(settings.ToJson()); }