private static int LoadByGuid2(Guid guid, RockContext rockContext) { var workflowActivityTypeService = new WorkflowActivityTypeService(rockContext); return(workflowActivityTypeService .Queryable().AsNoTracking() .Where(c => c.Guid.Equals(guid)) .Select(c => c.Id) .FirstOrDefault()); }
private static WorkflowActivityTypeCache LoadById2(int id, RockContext rockContext) { var workflowActivityTypeService = new WorkflowActivityTypeService(rockContext); var workflowActivityTypeModel = workflowActivityTypeService .Queryable() .Where(t => t.Id == id) .FirstOrDefault(); if (workflowActivityTypeModel != null) { return(new WorkflowActivityTypeCache(workflowActivityTypeModel)); } return(null); }
/// <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) { WorkflowType workflowType; WorkflowTypeService service = new WorkflowTypeService(); int workflowTypeId = int.Parse(hfWorkflowTypeId.Value); if (workflowTypeId == 0) { workflowType = new WorkflowType(); workflowType.IsSystem = false; workflowType.Name = string.Empty; } else { workflowType = service.Get(workflowTypeId); } workflowType.Name = tbName.Text; workflowType.Description = tbDescription.Text; workflowType.CategoryId = cpCategory.SelectedValueAsInt(); workflowType.Order = int.Parse(tbOrder.Text); workflowType.WorkTerm = tbWorkTerm.Text; if (!string.IsNullOrWhiteSpace(tbProcessingInterval.Text)) { workflowType.ProcessingIntervalSeconds = int.Parse(tbProcessingInterval.Text); } workflowType.IsPersisted = cbIsPersisted.Checked; workflowType.LoggingLevel = ddlLoggingLevel.SelectedValueAsEnum <WorkflowLoggingLevel>(); workflowType.IsActive = cbIsActive.Checked; if (!Page.IsValid) { return; } if (!workflowType.IsValid) { // Controls will render the error messages return; } RockTransactionScope.WrapTransaction(() => { List <WorkflowActivityTypeEditor> workflowActivityTypeEditorList = phActivities.Controls.OfType <WorkflowActivityTypeEditor>().ToList(); // delete WorkflowActionTypes that aren't assigned in the UI anymore WorkflowActionTypeService workflowActionTypeService = new WorkflowActionTypeService(); List <WorkflowActionType> actionTypesInDB = workflowActionTypeService.Queryable().Where(a => a.ActivityType.WorkflowTypeId.Equals(workflowType.Id)).ToList(); List <WorkflowActionType> actionTypesInUI = new List <WorkflowActionType>(); foreach (WorkflowActivityTypeEditor workflowActivityTypeEditor in workflowActivityTypeEditorList) { foreach (WorkflowActionTypeEditor editor in workflowActivityTypeEditor.Controls.OfType <WorkflowActionTypeEditor>()) { actionTypesInUI.Add(editor.WorkflowActionType); } } var deletedActionTypes = from actionType in actionTypesInDB where !actionTypesInUI.Select(u => u.Guid).Contains(actionType.Guid) select actionType; deletedActionTypes.ToList().ForEach(actionType => { workflowActionTypeService.Delete(actionType, CurrentPersonId); workflowActionTypeService.Save(actionType, CurrentPersonId); }); // delete WorkflowActivityTypes that aren't assigned in the UI anymore WorkflowActivityTypeService workflowActivityTypeService = new WorkflowActivityTypeService(); List <WorkflowActivityType> activityTypesInDB = workflowActivityTypeService.Queryable().Where(a => a.WorkflowTypeId.Equals(workflowType.Id)).ToList(); List <WorkflowActivityType> activityTypesInUI = workflowActivityTypeEditorList.Select(a => a.GetWorkflowActivityType()).ToList(); var deletedActivityTypes = from activityType in activityTypesInDB where !activityTypesInUI.Select(u => u.Guid).Contains(activityType.Guid) select activityType; deletedActivityTypes.ToList().ForEach(activityType => { workflowActivityTypeService.Delete(activityType, CurrentPersonId); workflowActivityTypeService.Save(activityType, CurrentPersonId); }); // add or update WorkflowActivityTypes(and Actions) that are assigned in the UI int workflowActivityTypeOrder = 0; foreach (WorkflowActivityTypeEditor workflowActivityTypeEditor in workflowActivityTypeEditorList) { WorkflowActivityType editorWorkflowActivityType = workflowActivityTypeEditor.GetWorkflowActivityType(); WorkflowActivityType workflowActivityType = workflowType.ActivityTypes.FirstOrDefault(a => a.Guid.Equals(editorWorkflowActivityType.Guid)); if (workflowActivityType == null) { workflowActivityType = editorWorkflowActivityType; workflowType.ActivityTypes.Add(workflowActivityType); } else { workflowActivityType.Name = editorWorkflowActivityType.Name; workflowActivityType.Description = editorWorkflowActivityType.Description; workflowActivityType.IsActive = editorWorkflowActivityType.IsActive; workflowActivityType.IsActivatedWithWorkflow = editorWorkflowActivityType.IsActivatedWithWorkflow; } workflowActivityType.Order = workflowActivityTypeOrder++; int workflowActionTypeOrder = 0; foreach (WorkflowActionTypeEditor workflowActionTypeEditor in workflowActivityTypeEditor.Controls.OfType <WorkflowActionTypeEditor>()) { WorkflowActionType editorWorkflowActionType = workflowActionTypeEditor.WorkflowActionType; WorkflowActionType workflowActionType = workflowActivityType.ActionTypes.FirstOrDefault(a => a.Guid.Equals(editorWorkflowActionType.Guid)); if (workflowActionType == null) { workflowActionType = editorWorkflowActionType; workflowActivityType.ActionTypes.Add(workflowActionType); } else { workflowActionType.Name = editorWorkflowActionType.Name; workflowActionType.EntityTypeId = editorWorkflowActionType.EntityTypeId; workflowActionType.IsActionCompletedOnSuccess = editorWorkflowActionType.IsActionCompletedOnSuccess; workflowActionType.IsActivityCompletedOnSuccess = editorWorkflowActionType.IsActivityCompletedOnSuccess; workflowActionType.Attributes = editorWorkflowActionType.Attributes; workflowActionType.AttributeValues = editorWorkflowActionType.AttributeValues; } workflowActionType.Order = workflowActionTypeOrder++; } } if (workflowType.Id.Equals(0)) { service.Add(workflowType, CurrentPersonId); } service.Save(workflowType, CurrentPersonId); foreach (var activityType in workflowType.ActivityTypes) { foreach (var workflowActionType in activityType.ActionTypes) { Rock.Attribute.Helper.SaveAttributeValues(workflowActionType, CurrentPersonId); } } }); var qryParams = new Dictionary <string, string>(); qryParams["workflowTypeId"] = workflowType.Id.ToString(); NavigateToPage(RockPage.Guid, qryParams); }
/// <summary> /// Executes the specified workflow. /// </summary> /// <param name="rockContext">The rock context.</param> /// <param name="action">The action.</param> /// <param name="entity">The entity.</param> /// <param name="errorMessages">The error messages.</param> /// <returns></returns> public override bool Execute(RockContext rockContext, WorkflowAction action, Object entity, out List <string> errorMessages) { errorMessages = new List <string>(); double hoursElapsed = HoursElapsed(action); string emailStatus = EmailStatus(action); if (hoursElapsed <= 0) { SendEmail(rockContext, action); } else { var timedOut = false; var activityTypeService = new WorkflowActivityTypeService(rockContext); WorkflowActivityType unopenedActivityType = null; int? unopenedTimeout = null; Guid?guid = GetAttributeValue(action, "UnopenedTimeoutActivity").AsGuidOrNull(); if (guid.HasValue) { unopenedActivityType = activityTypeService.Queryable().Where(a => a.Guid.Equals(guid.Value)).FirstOrDefault(); unopenedTimeout = GetAttributeValue(action, "UnopenedTimeoutLength").AsIntegerOrNull(); if (emailStatus != OPENED_STATUS && emailStatus != CLICKED_STATUS && unopenedActivityType != null && unopenedTimeout.HasValue && unopenedTimeout.Value < hoursElapsed) { action.AddLogEntry("Unopened Timeout Occurred", true); WorkflowActivity.Activate(unopenedActivityType, action.Activity.Workflow, rockContext); timedOut = true; } } WorkflowActivityType noActionActivityType = null; int?noActionTimeout = null; guid = GetAttributeValue(action, "NoActionTimeoutActivity").AsGuidOrNull(); if (guid.HasValue) { noActionActivityType = activityTypeService.Queryable().Where(a => a.Guid.Equals(guid.Value)).FirstOrDefault(); noActionTimeout = GetAttributeValue(action, "NoActionTimeoutLength").AsIntegerOrNull(); if (emailStatus != CLICKED_STATUS && noActionActivityType != null && noActionTimeout.HasValue && noActionTimeout.Value < hoursElapsed) { action.AddLogEntry("No Action Timeout Occurred", true); WorkflowActivity.Activate(noActionActivityType, action.Activity.Workflow, rockContext); timedOut = true; } } if (timedOut) { UpdateEmailStatus(action.Guid, TIMEOUT_STATUS, string.Empty, rockContext, false); return(true); } } return(false); }