示例#1
0
 /// <summary>
 /// بعد از اتمام ورك فلو
 /// </summary>
 /// <param name="WorkflowEventArg"></param>
 protected virtual void OnAfterFinishWorkflowInstance(FinishWorkflowEventArgs WorkflowEventArg)
 {
     if (AfterFinishWorkflow != null)
     {
         AfterFinishWorkflow(this, WorkflowEventArg);
     }
 }
示例#2
0
        /// <summary>
        /// قبل از اتمام ورك فلو
        /// </summary>
        /// <param name="WorkflowEventArg"></param>
        protected virtual void OnBeforeFinishWorkflowInstance(FinishWorkflowEventArgs e)
        {
            if (e.WfInstance != null && e.WfInstance.ParentTaskInstanceID.HasValue) // اگر اين ورك فلو يك ساب فلو بود
            {
                TaskInstance    ti         = wfs.GetTaskInstanceByID(e.WfInstance.ParentTaskInstanceID.Value);
                SubflowTaskBase sfBase     = (SubflowTaskBase)GetTaskClassByTaskCode(ti.TaskCode);
                string          actionCode = sfBase.GetResultActionCode(e);
                TaskAction      ta         = wfs.GetTaskActionByCode(ti.WorkflowInstance.WorkflowID, actionCode);
                FinishTask(ti, ta, e.UserName, e.CurrentTask.PerformerID, e.CurrentTask.Comment, e.CurrentTask.TaskDueDate);
            }

            if (BeforeFinishWorkflow != null)
            {
                BeforeFinishWorkflow(this, e);
            }

            if (e.Cancel == true)
            {
                throw new WFUserException(e.CancelMessage);
            }
        }
示例#3
0
 public abstract string GetResultActionCode(FinishWorkflowEventArgs e);
示例#4
0
        /// <summary>
        /// يك فعاليت را به اتمام ميرساند
        /// </summary>
        /// <param name="WorkflowHistoryID">شناسه نمونه فعاليت</param>
        /// <param name="ActionID">شناسه اكشني كه بايد روي فعاليت انجام گيردر</param>
        /// <param name="Description">توضيحات</param>
        /// <param name="UserName">نام كاربري</param>
        /// <param name="NewPerformer">اقدام كننده بعدي</param>
        /// <param name="ds">ديتاست</param>
        /// <param name="dueDate"></param>
        public TaskInstance FinishTask(TaskInstance taskInstance, TaskAction Action, string UserName, string NewPerformer, string Description, DateTime?dueDate)
        {
            try
            {
                if (taskInstance.UpdateDate.HasValue)
                {
                    throw new WFUserException("اين كار قبلا به اتمام رسيده است");
                }

                Task toTask = Action.Task1;

                TaskInstance ti = new TaskInstance();
                ti.TaskInstanceID         = Guid.NewGuid();
                ti.WorkflowInstanceID     = taskInstance.WorkflowInstanceID;
                ti.TaskID                 = toTask.TaskID;
                ti.TaskCode               = toTask.TaskCode;
                ti.TaskTitle              = toTask.TaskTitle;
                ti.PerformerID            = NewPerformer;
                ti.EntityName             = taskInstance.EntityName;
                ti.EntityID               = taskInstance.EntityID;
                ti.EntityTitle            = taskInstance.EntityTitle;
                ti.EntityUrl              = taskInstance.EntityUrl;
                ti.EntityDateTime         = taskInstance.EntityDateTime;
                ti.PreviousTaskInstanceID = taskInstance.TaskInstanceID;
                ti.InsertUser             = UserName;
                ti.InsertDate             = DateTime.Now;
                ti.TaskInstanceStatusID   = (int)TaskInstanceStatusEnum.Waiting; // در حال انتظار
                ti.TaskDueDate            = dueDate;
                ti.PriorityID             = taskInstance.PriorityID;
                ti.NotificationStatusID   = (int)NotificationStatusEnum.Waiting;
                ti.ExtraInt               = taskInstance.ExtraInt;
                ti.ExtraInt2              = taskInstance.ExtraInt2;
                ti.ExtraDateTime          = taskInstance.ExtraDateTime;
                ti.ExtraVarchar           = taskInstance.ExtraVarchar;
                ti.ExtraDouble            = taskInstance.ExtraDouble;

                // calling events
                FinishWorkflowEventArgs ewfi         = null; // براي اتمام ورك فلو
                FinishTaskEventArgs     taskEventArg = new FinishTaskEventArgs()
                {
                    TaskInstance = taskInstance, TaskAction = Action, UserName = UserName, NewPerformer = NewPerformer, IsBefore = true, Description = Description, ToTask = ti
                };
                OnBeforeFinishTask(taskEventArg);

                // setting previous task changes
                TaskInstance prevTask = wfs.GetTaskInstanceByID(taskInstance.TaskInstanceID);
                prevTask.UpdateUser           = UserName;
                prevTask.UpdateDate           = DateTime.Now;
                prevTask.CompletedActionID    = Action.TaskActionID;
                prevTask.CompletedActionCode  = Action.TaskActionCode;
                prevTask.TaskInstanceStatusID = (int)TaskInstanceStatusEnum.Complete; // تمام شده
                prevTask.Comment = Description;

                // stoping the timesheet if started before
                wfs.StopTimeSheet(prevTask.TaskInstanceID, Convert.ToInt32(UserName));

                // Saving Parameters
                wfs.WorkflowInstanceParameterSave(taskInstance.WorkflowInstanceID, "LastPerformerID", ti.PerformerID);
                wfs.WorkflowInstanceParameterSave(taskInstance.WorkflowInstanceID, "LastComment", prevTask.Comment);
                string lastDueDateString = null;
                if (ti.TaskDueDate.HasValue)
                {
                    lastDueDateString = ti.TaskDueDate.ToString();
                }
                wfs.WorkflowInstanceParameterSave(taskInstance.WorkflowInstanceID, "LastDueDate", lastDueDateString);

                // check end tasks
                if (toTask.TaskTypeID == (int)TaskTypeEnum.End) // اگر فعاليت بعدي پاياني بود
                {
                    ti.UpdateDate           = DateTime.Now;
                    ti.UpdateUser           = ti.InsertUser;
                    ti.TaskInstanceStatusID = (int)TaskInstanceStatusEnum.Complete; // تمام شده

                    var wfi = wfs.GetWorkflowInstanceByID(ti.WorkflowInstanceID);
                    wfi.UpdateUser = prevTask.UpdateUser;
                    wfi.UpdateDate = prevTask.UpdateDate;
                    wfi.WorkflowInstanceStatusID = (int)WorkflowInstanceStatusEnum.Complete; // تكميل شده

                    ewfi = new FinishWorkflowEventArgs(wfi, prevTask, UserName);
                    OnBeforeFinishWorkflowInstance(ewfi);
                }
                wfs.ObjectContext.TaskInstance.AddObject(ti);


                taskEventArg.IsBefore = false;
                OnAfterFinishTask(taskEventArg);

                if (ewfi != null) // اگر ورك فلو هم اتمام شده بود
                {
                    OnAfterFinishWorkflowInstance(ewfi);
                }

                wfs.ObjectContext.SaveChanges();
                return(ti);
                //TaskInstanceService service = (TaskInstanceService)EntityFactory.GetServiceByEntityName("TaskInstance", "");
                //service.FinishTask(WorkflowHistory.WorkflowHistoryID, Action.ActionID, Description, UserName, NewPerformer, ds);
            }
            catch (Exception)
            {
                throw;
            }
        }