Esempio n. 1
0
        /// <summary>
        /// انجام كار به صورت پيش فرض
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void DoAction(object sender, FinishTaskEventArgs e)
        {
            string taskCode   = e.TaskInstance.TaskCode;
            string actionCode = e.TaskAction.TaskActionCode;

            if (e.TaskAction.HasProgramming)
            {
                TaskBase act = GetTaskClassByTaskCode(taskCode);
                if (act == null)
                {
                    throw new Exception("ActivityCode " + taskCode.ToString() + ".HasProgarmming = true, but class not found in the application.");
                }
                act.DoAction(actionCode, e);
            }
        }
Esempio n. 2
0
        /// <summary>
        /// قبل از اينكه تسك به اتمام برسد
        /// </summary>
        /// <param name="taskEventArg"></param>
        protected virtual void OnBeforeFinishTask(FinishTaskEventArgs taskEventArg)
        {
            if (BeforeFinishTask != null)
            {
                BeforeFinishTask(this, taskEventArg);
            }
            else
            {
                DoAction(this, taskEventArg);
            }

            if (taskEventArg.Cancel == true)
            {
                throw new WFUserException(taskEventArg.CancelMessage);
            }
        }
Esempio n. 3
0
        /// <summary>
        /// بعد از اينكه تسك به اتمام رسيد
        /// </summary>
        /// <param name="taskEventArg"></param>
        protected virtual void OnAfterFinishTask(FinishTaskEventArgs taskEventArg)
        {
            if (taskEventArg.TaskAction.Task1.TaskTypeID == (int)TaskTypeEnum.Subflow)
            {
                SubflowTaskBase act = (SubflowTaskBase)GetTaskClassByTaskCode(taskEventArg.TaskAction.Task1.TaskCode);
                act.CreateSubflowInstance(taskEventArg);
            }

            if (AfterFinishTask != null)
            {
                AfterFinishTask(this, taskEventArg);
            }
            else
            {
                DoAction(this, taskEventArg);
            }
        }
Esempio n. 4
0
        public void CreateSubflowInstance(FinishTaskEventArgs e)
        {
            if (e.IsBefore)
            {
                WorkflowService wfs = new WorkflowService();

                WorkflowInstance wfInstance = new WorkflowInstance();
                wfInstance.WorkflowInstanceID   = Guid.NewGuid();
                wfInstance.EntityID             = e.TaskInstance.EntityID;
                wfInstance.EntityUrl            = e.TaskInstance.EntityName;
                wfInstance.ParentTaskInstanceID = e.TaskInstance.TaskInstanceID;
                wfInstance.ExtraInfo            = e.TaskInstance.WorkflowInstance.ExtraInfo;
                OnBeforeCreateSubflowInstance(wfInstance, e);

                WorkflowBase wf = wfs.GetWorkflowBaseByWorkflowCode(e.TaskInstance.Task.SubflowWorkflowCode);
                wf.CreateWorkflowInstance(wfInstance, e.UserName, null, null, 0);

                e.ToTask.SubflowWorkflowInstanceID = wfInstance.WorkflowInstanceID;
            }
        }
Esempio n. 5
0
        /// <summary>
        /// فاكنكشن كاربر را براي قبل و بعد پيدا ميكند و اجرا ميكند
        /// </summary>
        /// <param name="actionCode">كد اكشن</param>
        /// <param name="e"></param>
        public override sealed void DoAction(string actionCode, FinishTaskEventArgs e)
        {
            if (e.TaskAction.HasProgramming)
            {
                if (string.IsNullOrEmpty(actionCode))
                {
                    throw new Exception("actionCode should not be null or empty");
                }

                string methodName = actionCode + "Before";
                if (e.IsBefore == false)
                {
                    methodName = actionCode + "After";
                }

                var m = this.GetType().GetMethod(methodName);
                if (m == null)
                {
                    throw new Exception("Method " + methodName + " is not implemented in the class " + this.GetType().FullName);
                }

                m.Invoke(this, new object[] { e });
            }
        }
Esempio n. 6
0
 public virtual void OnBeforeCreateSubflowInstance(WorkflowInstance wfInstance, FinishTaskEventArgs prevFinishEventArgs)
 {
 }
Esempio n. 7
0
 public override void DoAction(string actionCode, FinishTaskEventArgs e)
 {
 }
Esempio n. 8
0
 public abstract void DoAction(string actionCode, FinishTaskEventArgs e);
Esempio n. 9
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;
            }
        }