/// <summary> /// Binds the grid. /// </summary> private void BindGrid() { var triggers = new WorkflowTriggerService().Queryable(); string includeInactive = gfWorkflowTrigger.GetUserPreference("Include Inactive"); if (String.IsNullOrEmpty(includeInactive) || !includeInactive.Contains("Yes")) { triggers = triggers.Where(a => a.IsActive == true); } gWorkflowTrigger.DataSource = triggers .OrderBy(w => w.EntityType.Name) .ThenBy(w => w.EntityTypeQualifierColumn) .ThenBy(w => w.EntityTypeQualifierValue).Select(a => new { a.Id, EntityTypeFriendlyName = a.EntityType.FriendlyName, a.WorkflowTriggerType, a.EntityTypeQualifierColumn, a.EntityTypeQualifierValue, WorkflowTypeName = a.WorkflowType.Name, a.IsSystem, a.IsActive }).ToList(); gWorkflowTrigger.DataBind(); }
/// <summary> /// Refreshes this instance. /// </summary> public void Refresh() { EntityTriggers = new Dictionary <string, List <WorkflowTriggerDto> >(); var service = new WorkflowTriggerService(); foreach (var trigger in service.Queryable()) { if (!EntityTriggers.ContainsKey(trigger.EntityType.Name)) { EntityTriggers.Add(trigger.EntityType.Name, new List <WorkflowTriggerDto>()); } EntityTriggers[trigger.EntityType.Name].Add(trigger.ToDto()); } }
/// <summary> /// Handles the Click event of the btnSave control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="EventArgs" /> instance containing the event data.</param> protected void btnSave_Click(object sender, EventArgs e) { WorkflowTrigger WorkflowTrigger; var rockContext = new RockContext(); WorkflowTriggerService WorkflowTriggerService = new WorkflowTriggerService(rockContext); AttributeService attributeService = new AttributeService(rockContext); int WorkflowTriggerId = int.Parse(hfWorkflowTriggerId.Value); if (WorkflowTriggerId == 0) { WorkflowTrigger = new WorkflowTrigger(); WorkflowTriggerService.Add(WorkflowTrigger); } else { WorkflowTrigger = WorkflowTriggerService.Get(WorkflowTriggerId); } WorkflowTrigger.EntityTypeId = ddlEntityType.SelectedValueAsInt().Value; WorkflowTrigger.EntityTypeQualifierColumn = ddlQualifierColumn.SelectedValue; WorkflowTrigger.EntityTypeQualifierValue = tbQualifierValue.Text; WorkflowTrigger.WorkflowTypeId = ddlWorkflowType.SelectedValueAsInt().Value; WorkflowTrigger.WorkflowTriggerType = (WorkflowTriggerType)System.Enum.Parse(typeof(WorkflowTriggerType), rblTriggerType.SelectedValue); WorkflowTrigger.IsActive = cbIsActive.Checked; if (string.IsNullOrWhiteSpace(tbWorkflowName.Text)) { WorkflowTrigger.WorkflowName = null; } else { WorkflowTrigger.WorkflowName = tbWorkflowName.Text; } if (!WorkflowTrigger.IsValid) { // Controls will render the error messages return; } rockContext.SaveChanges(); Rock.Workflow.TriggerCache.Refresh(); NavigateToParentPage(); }
/// <summary> /// Refreshes this instance. /// </summary> public static void Refresh() { lock ( obj ) { EntityTriggers = new Dictionary <string, List <WorkflowTrigger> >(); var service = new WorkflowTriggerService(); foreach (var trigger in service.Queryable()) { if (!EntityTriggers.ContainsKey(trigger.EntityType.Name)) { EntityTriggers.Add(trigger.EntityType.Name, new List <WorkflowTrigger>()); } EntityTriggers[trigger.EntityType.Name].Add(trigger.Clone() as WorkflowTrigger); } } }
private static WorkflowTriggersCache QueryDbWithContext(RockContext rockContext) { var workflowTriggers = new WorkflowTriggerService(rockContext) .Queryable().AsNoTracking() .ToList() .GroupBy(t => t.EntityType.Name) .Select(i => new { EntityTypeId = i.Key, Triggers = i.Select(v => v.Clone(false)).ToList() }) .ToDictionary(k => k.EntityTypeId, v => v.Triggers); var value = new WorkflowTriggersCache { EntityTriggers = workflowTriggers }; return(value); }
/// <summary> /// Handles the Delete event of the gWorkflowTrigger control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="RowEventArgs" /> instance containing the event data.</param> protected void gWorkflowTrigger_Delete(object sender, RowEventArgs e) { var rockContext = new RockContext(); WorkflowTriggerService WorkflowTriggerService = new WorkflowTriggerService(rockContext); WorkflowTrigger WorkflowTrigger = WorkflowTriggerService.Get(e.RowKeyId); if (WorkflowTrigger != null) { string errorMessage; if (!WorkflowTriggerService.CanDelete(WorkflowTrigger, out errorMessage)) { mdGridWarning.Show(errorMessage, ModalAlertType.Information); return; } WorkflowTriggerService.Delete(WorkflowTrigger); rockContext.SaveChanges(); } BindGrid(); }
/// <summary> /// Executes this instance. /// </summary> /// <param name="message"></param> public override void Execute(Message message) { if (message.WorkflowTriggerGuid.HasValue) { using (var rockContext = new RockContext()) { var trigger = new WorkflowTriggerService(rockContext).Get(message.WorkflowTriggerGuid.Value); if (trigger != null) { var workflowType = WorkflowTypeCache.Get(trigger.WorkflowTypeId); if (workflowType != null && (trigger.IsActive ?? true)) { var workflow = Rock.Model.Workflow.Activate(workflowType, trigger.WorkflowName); var entity = GetEntity(rockContext, message); new Rock.Model.WorkflowService(rockContext).Process(workflow, entity, out var _); } } } } }
/// <summary> /// Handles the Delete event of the gWorkflowTrigger control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="RowEventArgs" /> instance containing the event data.</param> protected void gWorkflowTrigger_Delete(object sender, RowEventArgs e) { RockTransactionScope.WrapTransaction(() => { WorkflowTriggerService WorkflowTriggerService = new WorkflowTriggerService(); WorkflowTrigger WorkflowTrigger = WorkflowTriggerService.Get((int)e.RowKeyValue); if (WorkflowTrigger != null) { string errorMessage; if (!WorkflowTriggerService.CanDelete(WorkflowTrigger, out errorMessage)) { mdGridWarning.Show(errorMessage, ModalAlertType.Information); return; } WorkflowTriggerService.Delete(WorkflowTrigger, CurrentPersonId); WorkflowTriggerService.Save(WorkflowTrigger, CurrentPersonId); } }); BindGrid(); }
/// <summary> /// Shows the edit. /// </summary> /// <param name="workflowTriggerId">The workflow trigger identifier.</param> public void ShowDetail(int workflowTriggerId) { pnlDetails.Visible = true; WorkflowTrigger workflowTrigger = null; if (!workflowTriggerId.Equals(0)) { workflowTrigger = new WorkflowTriggerService(new RockContext()).Get(workflowTriggerId); lActionTitle.Text = ActionTitle.Edit(WorkflowTrigger.FriendlyTypeName).FormatAsHtmlTitle(); } if (workflowTrigger == null) { workflowTrigger = new WorkflowTrigger { Id = 0, WorkflowTriggerType = WorkflowTriggerType.PostSave, IsActive = true }; lActionTitle.Text = ActionTitle.Add(WorkflowTrigger.FriendlyTypeName).FormatAsHtmlTitle(); } LoadDropDowns(); hfWorkflowTriggerId.Value = workflowTrigger.Id.ToString(); ddlEntityType.SetValue(workflowTrigger.EntityTypeId); LoadColumnNames(); ddlQualifierColumn.SetValue(workflowTrigger.EntityTypeQualifierColumn); ShowQualifierValues(workflowTrigger); ddlWorkflowType.SetValue(workflowTrigger.WorkflowTypeId); rblTriggerType.SelectedValue = workflowTrigger.WorkflowTriggerType.ConvertToInt().ToString(); tbWorkflowName.Text = workflowTrigger.WorkflowName ?? string.Empty; cbIsActive.Checked = workflowTrigger.IsActive ?? false; // render UI based on Authorized and IsSystem bool readOnly = false; nbEditModeMessage.Text = string.Empty; if (!IsUserAuthorized(Authorization.EDIT)) { readOnly = true; nbEditModeMessage.Text = EditModeMessage.ReadOnlyEditActionNotAllowed(WorkflowTrigger.FriendlyTypeName); } if (workflowTrigger.IsSystem) { readOnly = true; nbEditModeMessage.Text = EditModeMessage.ReadOnlySystem(WorkflowTrigger.FriendlyTypeName); } if (readOnly) { lActionTitle.Text = ActionTitle.View(WorkflowTrigger.FriendlyTypeName); btnCancel.Text = "Close"; } ddlEntityType.Enabled = !readOnly; ddlQualifierColumn.Enabled = !readOnly; tbQualifierValue.ReadOnly = readOnly; ddlWorkflowType.Enabled = !readOnly; rblTriggerType.Enabled = !readOnly; tbWorkflowName.ReadOnly = readOnly; cbIsActive.Enabled = !readOnly; btnSave.Visible = !readOnly; }
/// <summary> /// Handles the Click event of the btnSave control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="EventArgs" /> instance containing the event data.</param> protected void btnSave_Click(object sender, EventArgs e) { WorkflowTrigger workflowTrigger; var rockContext = new RockContext(); WorkflowTriggerService WorkflowTriggerService = new WorkflowTriggerService(rockContext); AttributeService attributeService = new AttributeService(rockContext); bool usePreviousValue = false; int WorkflowTriggerId = int.Parse(hfWorkflowTriggerId.Value); if (WorkflowTriggerId == 0) { workflowTrigger = new WorkflowTrigger(); WorkflowTriggerService.Add(workflowTrigger); } else { workflowTrigger = WorkflowTriggerService.Get(WorkflowTriggerId); } workflowTrigger.WorkflowTypeId = ddlWorkflowType.SelectedValueAsInt().Value; workflowTrigger.WorkflowTriggerType = (WorkflowTriggerType)System.Enum.Parse(typeof(WorkflowTriggerType), rblTriggerType.SelectedValue); workflowTrigger.EntityTypeId = ddlEntityType.SelectedValueAsInt().Value; workflowTrigger.EntityTypeQualifierColumn = ddlQualifierColumn.SelectedValue; // // If the trigger type is PreSave, PostSave or ImmediatePostSave then we have // a previous value option. // if (workflowTrigger.WorkflowTriggerType == WorkflowTriggerType.PreSave || workflowTrigger.WorkflowTriggerType == WorkflowTriggerType.PostSave || workflowTrigger.WorkflowTriggerType == WorkflowTriggerType.ImmediatePostSave) { usePreviousValue = true; } // If the trigger type is PreSave and the tbQualifierValue does not exist, // use the previous and alt qualifier value if (usePreviousValue) { if (!string.IsNullOrEmpty(tbQualifierValue.Text)) { // in this case, use the same value as the previous and current qualifier value workflowTrigger.EntityTypeQualifierValue = tbQualifierValue.Text; workflowTrigger.EntityTypeQualifierValuePrevious = tbQualifierValue.Text; } else { workflowTrigger.EntityTypeQualifierValue = tbQualifierValueAlt.Text; workflowTrigger.EntityTypeQualifierValuePrevious = tbPreviousQualifierValue.Text; } } else { // use the regular qualifier and clear the previous value qualifier since it does not apply. workflowTrigger.EntityTypeQualifierValue = tbQualifierValue.Text; workflowTrigger.EntityTypeQualifierValuePrevious = string.Empty; } workflowTrigger.IsActive = cbIsActive.Checked; if (string.IsNullOrWhiteSpace(tbWorkflowName.Text)) { workflowTrigger.WorkflowName = null; } else { workflowTrigger.WorkflowName = tbWorkflowName.Text; } if (!workflowTrigger.IsValid) { // Controls will render the error messages return; } rockContext.SaveChanges(); WorkflowTriggersCache.Remove(); NavigateToParentPage(); }
/// <summary> /// Shows the edit. /// </summary> /// <param name="itemKey">The item key.</param> /// <param name="itemKeyValue">The item key value.</param> public void ShowDetail(string itemKey, int itemKeyValue) { if (!itemKey.Equals("WorkflowTriggerId")) { return; } pnlDetails.Visible = true; WorkflowTrigger WorkflowTrigger = null; if (!itemKeyValue.Equals(0)) { WorkflowTrigger = new WorkflowTriggerService().Get(itemKeyValue); lActionTitle.Text = ActionTitle.Edit(WorkflowTrigger.FriendlyTypeName); } else { WorkflowTrigger = new WorkflowTrigger { Id = 0, WorkflowTriggerType = WorkflowTriggerType.PostSave }; lActionTitle.Text = ActionTitle.Add(WorkflowTrigger.FriendlyTypeName); } LoadDropDowns(); hfWorkflowTriggerId.Value = WorkflowTrigger.Id.ToString(); ddlEntityType.SetValue(WorkflowTrigger.EntityTypeId); LoadColumnNames(); tbQualifierValue.Text = WorkflowTrigger.EntityTypeQualifierValue; ddlWorkflowType.SetValue(WorkflowTrigger.WorkflowTypeId); rblTriggerType.SelectedValue = WorkflowTrigger.WorkflowTriggerType.ConvertToInt().ToString(); tbWorkflowName.Text = WorkflowTrigger.WorkflowName ?? string.Empty; // render UI based on Authorized and IsSystem bool readOnly = false; nbEditModeMessage.Text = string.Empty; if (!IsUserAuthorized("Edit")) { readOnly = true; nbEditModeMessage.Text = EditModeMessage.ReadOnlyEditActionNotAllowed(WorkflowTrigger.FriendlyTypeName); } if (WorkflowTrigger.IsSystem) { readOnly = true; nbEditModeMessage.Text = EditModeMessage.ReadOnlySystem(WorkflowTrigger.FriendlyTypeName); } if (readOnly) { lActionTitle.Text = ActionTitle.View(WorkflowTrigger.FriendlyTypeName); btnCancel.Text = "Close"; } ddlEntityType.Enabled = !readOnly; ddlQualifierColumn.Enabled = !readOnly; tbQualifierValue.ReadOnly = readOnly; ddlWorkflowType.Enabled = !readOnly; rblTriggerType.Enabled = !readOnly; tbWorkflowName.ReadOnly = readOnly; btnSave.Visible = !readOnly; }