/// <summary> /// بعد از اتمام ورك فلو /// </summary> /// <param name="WorkflowEventArg"></param> protected virtual void OnAfterFinishWorkflowInstance(FinishWorkflowEventArgs WorkflowEventArg) { if (AfterFinishWorkflow != null) { AfterFinishWorkflow(this, WorkflowEventArg); } }
/// <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); } }
public abstract string GetResultActionCode(FinishWorkflowEventArgs e);
/// <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; } }