コード例 #1
0
        /// <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);
                    }
                }
            }
        }
コード例 #2
0
        /// <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);
                }
            }
        }
コード例 #3
0
        /// <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());
        }