protected void SaveButton_Click(object sender, EventArgs e) { Workflow.BrandId = WorkflowBrandDropDownList.SelectedId; Workflow.Name = WorkflowNameTextBox.Text; Workflow.WorkflowUserList.Clear(); int position = 0; foreach (ListItem li in SelectedUsersListBox.Items) { position++; int userId = Convert.ToInt32(li.Value); WorkflowUser wfu = WorkflowUser.New(); wfu.UserId = userId; wfu.Position = position; wfu.DateAdded = DateTime.Now; Workflow.WorkflowUserList.Add(wfu); } try { WorkflowManager.SaveWorkflow(Workflow); MessageLabel1.SetSuccessMessage("Workflow saved successfully"); CancelButton.Text = "Back to workflow list"; CancelButton.Prompt = string.Empty; DeselectAllUsers(); } catch (ValidationException vex) { MessageLabel1.SetErrorMessage("Error saving workflow", vex.Errors); } }
/// <summary> /// Submits an asset to a workflow, and starts the approval process /// </summary> public static void SubmitAssetToWorkflow(Asset asset, User submittedByUser) { m_Logger.DebugFormat("Asset: {0} submitted to workflow", asset.AssetId); // First ensure we have a workflow if (asset.WorkflowId.GetValueOrDefault() == 0) { throw new SystemException("Asset submitted to workflow, but workflow is not specified"); } // First get all of the users in the workflow WorkflowUserFinder finder = new WorkflowUserFinder { WorkflowId = asset.WorkflowId.GetValueOrDefault() }; finder.SortExpressions.Add(new AscendingSort(WorkflowUser.Columns.Position)); List <WorkflowUser> workflowUserList = WorkflowUser.FindMany(finder); // Ensure workflow has users if (workflowUserList.Count == 0) { throw new SystemException("Asset submitted to workflow, but workflow does not have any users"); } // Create a new asset workflow AssetWorkflow aw = AssetWorkflow.New(); aw.AssetId = asset.AssetId.GetValueOrDefault(); aw.IsComplete = false; aw.SubmittedByUserId = submittedByUser.UserId.GetValueOrDefault(); aw.CreateDate = DateTime.Now; AssetWorkflow.Update(aw); // Now add all the users to it for (int position = 0; position < workflowUserList.Count; position++) { // Get the current workflow user WorkflowUser wfu = workflowUserList[position]; // Ensure it's not a duplicate if (aw.AssetWorkflowUserList.Any(awfu => awfu.UserId == wfu.UserId)) { continue; } // Set-up the asset workflow user AssetWorkflowUser awu = AssetWorkflowUser.New(); awu.AssetWorkflowId = aw.AssetWorkflowId.GetValueOrDefault(); awu.UserId = wfu.UserId; awu.Position = position + 1; awu.AssetWorkflowUserStatus = AssetWorkflowUserStatus.Waiting; awu.CreateDate = DateTime.Now; awu.LastUpdate = DateTime.Now; // Save the workflow user to the DB AssetWorkflowUser.Update(awu); // Add the user to the workflow aw.AssetWorkflowUserList.Add(awu); } if (AssetSubmittedToWorkflow != null) { AssetSubmittedToWorkflow(null, new AssetEventArgs(asset)); } // Now notify the next user. First get them AssetWorkflowUser nextUserInWorkflow = aw.AssetWorkflowUserList[0]; // The send notification NotifyUser(nextUserInWorkflow); }