Пример #1
0
        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);
            }
        }
Пример #2
0
        /// <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);
        }