public ActionResult Add(WF_Instance wfInstance, int id, int flowTo) { var currentUserId = 1; // 1. Add the new data into workflow-instance wfInstance.DelFlag = (short)DelFlagEnum.Normal; wfInstance.StartTime = DateTime.Now; wfInstance.FilePath = string.Empty; wfInstance.SenderId = currentUserId; wfInstance.Level = 0; wfInstance.Status = (short)WF_InstanceEnum.Processing; wfInstance.WFInstanceId = Guid.Empty; wfInstance.WF_TempId = id; WF_InstanceService.Add(wfInstance); // 2. Start the workflow var wfApp = WorkflowApplicationHelper.CreateWorkflowApp(new FinanceActivity(), null); wfInstance.WFInstanceId = wfApp.Id; // save the workflow id WF_InstanceService.Update(wfInstance); // 3. Add two new procedures to the workflow procedure // The first produce handler is self WF_Procedure startProcedure = new WF_Procedure(); startProcedure.WF_InstanceId = wfInstance.Id; startProcedure.SubTime = DateTime.Now; startProcedure.ProcedureName = "Submit the approval table"; startProcedure.IsEndProcedure = false; startProcedure.IsStartProcedure = true; startProcedure.HandleBy = currentUserId; startProcedure.ProcessComment = "submit approval"; startProcedure.ProcessResult = "pass"; startProcedure.ProcessStatus = (short)WF_InstanceEnum.Processing; WF_ProcedureService.Add(startProcedure); // Initial the next procedure handler WF_Procedure nextProcedure = new WF_Procedure(); nextProcedure.WF_InstanceId = wfInstance.Id; nextProcedure.SubTime = DateTime.Now; nextProcedure.ProcessTime = DateTime.Now; nextProcedure.ProcessComment = string.Empty; nextProcedure.IsEndProcedure = false; nextProcedure.IsStartProcedure = false; nextProcedure.HandleBy = flowTo; nextProcedure.ProcessResult = ""; nextProcedure.ProcessStatus = (short)WF_InstanceEnum.Unprocess; WF_ProcedureService.Add(nextProcedure); return(RedirectToAction("showMyCheck")); }
//审批当前流程 /// <summary> /// 审批 /// </summary> /// <param name="stepId">当前审批步骤id</param> /// <param name="isPass">是否通过</param> /// <param name="Comment">审批意见</param> /// <param name="flowTo">流转到谁</param> /// <returns></returns> public ActionResult DoCheck(int stepId, bool isPass, string Comment, int flowTo) { //1.更新当前步骤 var step = WF_StepBLL.GetEntities(u => u.ID == stepId).FirstOrDefault(); step.ProcessResult = isPass ? "通过" : "不通过"; step.StepStaus = (short)WFStepEnum.Processed; step.ProcessContent = Comment; step.ProcessTime = DateTime.Now; WF_StepBLL.Update(step); //初始化下一个步骤 WF_Step nextStep = new WF_Step(); nextStep.IsEndStep = false; nextStep.IsStartStep = false; nextStep.ProcessBy = flowTo; nextStep.SubTime = DateTime.Now; nextStep.ProcessResult = string.Empty; nextStep.StepStaus = (short)WFStepEnum.UnProecess; nextStep.StepName = string.Empty; nextStep.WF_InstanceID = step.WF_InstanceID; nextStep.ProcessTime = DateTime.Now; nextStep.ProcessContent = string.Empty; WF_StepBLL.Add(nextStep); //根据流程类型 来初始化对应流程 反射 实现 var wfinstance = WF_InstanceBLL.GetEntities(u => u.ID == step.WF_InstanceID).FirstOrDefault(); var wftemp = WF_TempBLL.GetEntities(u => u.ID == wfinstance.WF_TempID).FirstOrDefault(); //让书签继续往下执行 var Value = isPass ? 1 : 0; WorkflowApplicationHelper.ResumeBookMark( //new FincallActivity(), Assembly.Load("HeiMa8.OA.WorkFlow").CreateInstance(wftemp.ActityType) as Activity, step.WF_Instance.WFInstanceId, step.StepName, Value); return(Content("ok")); }
public ActionResult Add(FormCollection fm) { //int setupValue = Convert.ToInt32(fm["SetUpValue"]); //CommonWFInstance wfInstance = new CommonWFInstance(); //wfInstance.WFInstanceId = Guid.Empty; //wfInstance.MaxValue = Convert.ToInt32(fm["MaxValue"]); //wfInstance.SubTime = DateTime.Now; //wfInstance.status = (short)Enum.WF_InstanceEnum.Processing; //wfInstance.TempId = Convert.ToInt32(fm["FID"]); //wfInstance.UserId = Convert.ToInt32(fm["ID"]); //commonWFInstanceBll.Add(wfInstance); var wfApp = WorkflowApplicationHelper.CreateWorkflowApp(new ActivityLibraryFinancial.Activity1(), new Dictionary <string, object> { { "SetUpValue", Convert.ToInt32(fm["SetUpValue"]) }, { "InputValue", Convert.ToInt32(fm["MaxValue"]) }, { "StartBy", Convert.ToInt32(fm["ID"]) }, { "ManagerId", 8 }, //暂时写成固定的 userId=8 test2 { "SupervisorId", 1 }, //暂时写成固定的 userId=1 admin { "TempId", Convert.ToInt32(fm["FID"]) }, { "FinacialId", 9 }, //暂时写成固定的 userId=9 test3 }); //创建wf实例 //wfInstance.WFInstanceId = wfApp.Id; //commonWFInstanceBll.Update(wfInstance); ////申请人的步骤 //CommonWFStep wfStep = new CommonWFStep(); //wfStep.IsStartStep = true; //wfStep.IsEndStep = false; //wfStep.StepName = "提交审批"; //wfStep.CommonWFInstanceId = wfInstance.Id; //wfStep.ProcessBy = Convert.ToInt32(fm["Process"]); //wfStep.SubTime = DateTime.Now; //wfStep.ProcessBy = Convert.ToInt32(fm["ID"]); //wfStep.StepStatus = (short)Enum.WFStepEnum.Processed; //wfStep.ProcessResult = "通过"; //commonWFStepBll.Add(wfStep); return(RedirectToAction("/index")); }
public ActionResult PassCheck(FormCollection fm) { //stepId:id, isPass: pass, Comment: $("#Comment").val() } //1、更新当前步骤 int id = Convert.ToInt32(fm["stepId"]); CommonWFStep step = commonWFStepBll.GetEntities(s => s.Id == id).FirstOrDefault(); //step.StepStatus = fm["Result"].ToLower() == "true" ? (short)SimpleOA.Enum.WFStepEnum.Processed: (short)SimpleOA.Enum.WFStepEnum.UnProecess; //step.SubTime = DateTime.Now; //commonWFStepBll.Update(step); ////让书签继续往下执行。 var Value = fm["Result"].ToLower() == "true" ? 1 : 0; WorkflowApplicationHelper.ResumeBookMark( new ActivityLibraryFinancial.Activity1(), step.CommonWFInstance.WFInstanceId, step.StepName, Value); return(RedirectToAction("/index")); }
public ActionResult PMDecision(int insId, bool isPass, string Comment, int FlowTo) { var instance = wF_InstanceService.LoadEntities(i => i.ID == insId).FirstOrDefault(); var step = (from s in instance.WF_StepInfo where s.IsProcessed == false select s).FirstOrDefault(); step.IsProcessed = true; step.Comment = Comment; step.FlowTo = FlowTo; wF_StepInfoService.DeteachEntities(step); ActivityResult activityResult = new ActivityResult(); activityResult.Data = step; activityResult.NextStepBookMarkName = step.StepName; activityResult.Result = isPass ? (short)WorkFlow.WFEnum.WFEnum.IsPass : (short)WorkFlow.WFEnum.WFEnum.IsReject; WorkflowApplicationHelper.LoadWorkflowApplication(new ClaimExpenseActivity(), instance.ApplicationId, new Bookmark(step.StepName), activityResult); return(Content("ok")); }
public ActionResult Add(WF_Instance instance, int id, int flowTo) { var CurrentUserId = LoginUser.ID; //1->在工作流实例表中添加一条数据 instance.DelFlag = DelFlag; instance.StartTime = DateTime.Now; instance.FilePath = string.Empty; instance.StartBy = CurrentUserId; //当前用户 也就是发起人 instance.Level = 0; //紧急程度 instance.Status = (short)WF_InstanceEnum.Processing; instance.WF_TempID = id; //WF_TempBLL.Add(instance); WF_InstanceBLL.Add(instance); //2->在步骤表里面添加两条步骤 //2->1 一个当前已处理的步骤 WF_Step startStep = new WF_Step(); startStep.WF_InstanceID = instance.ID; startStep.SubTime = DateTime.Now; startStep.StepName = "提交申请表单"; startStep.IsEndStep = false; startStep.IsStartStep = true; startStep.ProcessBy = CurrentUserId; startStep.ProcessContent = "提交申请"; startStep.ProcessResult = "通过"; startStep.ProcessTime = DateTime.Now; startStep.StepStaus = (short)WFStepEnum.Processed; WF_StepBLL.Add(startStep); //2->2 下一步谁审批的步骤 。项目经理审批 WF_Step nextStep = new WF_Step(); nextStep.WF_InstanceID = instance.ID; nextStep.SubTime = DateTime.Now; nextStep.ProcessTime = DateTime.Now; nextStep.ProcessContent = string.Empty; nextStep.IsStartStep = false; nextStep.IsEndStep = false; nextStep.ProcessBy = flowTo; nextStep.ProcessResult = ""; nextStep.StepName = ""; nextStep.StepStaus = (short)WFStepEnum.UnProecess; WF_StepBLL.Add(nextStep); //3->启动工作流 //根据流程类型 来初始化对应流程 spring 实现 //通过容器创建一个对象 依赖注入只能在子类中实现 // IApplicationContext ctx = ContextRegistry.GetContext(); var wftemp = WF_TempBLL.GetEntities(u => u.ID == id).FirstOrDefault(); //Activity activityType = ctx.GetObject(wftemp.ActityType.Split('.')[3]) as Activity; var wfApp = WorkflowApplicationHelper.CreateWorkflowApp( //new FincallActivity(), Assembly.Load("HeiMa8.OA.WorkFlow").CreateInstance(wftemp.ActityType) as Activity, null); instance.WFInstanceId = wfApp.Id; WF_InstanceBLL.Update(instance); return(Content("ok")); }
public ActionResult StartWorkflow(WF_Instance wF_Instance) { //将流程列表中添加数据 wF_Instance.ApplicationId = Convert.ToInt32(Guid.Empty); wF_Instance.Result = 0 + ""; wF_Instance.StartedBy = loginUser.id.ToString(); wF_Instance.Status = 0 + ""; wF_Instance.SubTime = DateTime.Now; wF_Instance.WF_TempID = int.Parse(Request["hiddenTempId"]); WF_InstanceService.AddEntity(wF_Instance); //然后启动流程 var dict = new Dictionary <string, object> { { "TempBookMarkName", "总监审批" } }; Guid guid = Guid.Empty; WorkflowApplicationHelper.CreateWorkflow(new FincalActivity(), dict, out guid); wF_Instance.ApplicationId = Convert.ToInt32(guid); //保存步骤 WF_StepInfo stepInfo = new WF_StepInfo(); stepInfo.ChildStepID = 0; stepInfo.Comment = "开始进行财务审批"; stepInfo.DelFlag = 0; stepInfo.IsProcessed = true; stepInfo.IsStartStep = true; stepInfo.IsEndStep = false; stepInfo.ProcessBy = loginUser.id; stepInfo.ParentStepID = 0; stepInfo.ParentStepID = 0; stepInfo.ProcessTime = DateTime.Now; stepInfo.Remark = "开始财务审批"; stepInfo.StepName = "第一步"; stepInfo.StepResult = 1 + ""; stepInfo.SubTime = DateTime.Now; stepInfo.Title = "开始财务审批"; stepInfo.WF_InstanceID = wF_Instance.ID; WF_StepInfoService.AddEntity(stepInfo); //保存步骤 WF_StepInfo masterStepInfo = new WF_StepInfo(); masterStepInfo.ChildStepID = 0; masterStepInfo.Comment = "总监开始进行财务审批"; masterStepInfo.DelFlag = 0; masterStepInfo.IsProcessed = false; masterStepInfo.IsStartStep = false; masterStepInfo.IsEndStep = false; masterStepInfo.ProcessBy = int.Parse(Request["FlowTo"]); masterStepInfo.ParentStepID = 0; masterStepInfo.ParentStepID = 0; masterStepInfo.ProcessTime = DateTime.Now; masterStepInfo.Remark = "总监开始财务审批"; masterStepInfo.StepName = "总监审批"; masterStepInfo.StepResult = 1 + ""; masterStepInfo.SubTime = DateTime.Now; masterStepInfo.Title = "开始财务审批"; masterStepInfo.WF_InstanceID = wF_Instance.ID; WF_StepInfoService.AddEntity(masterStepInfo); return(Content("ok")); }
public ActionResult StartFinancial(QA.Model.WF_Instance wFInstance) { //Step1: Keep an instance data in the DB. wFInstance.ApplicationId = Guid.Empty; //The id of an instance wFInstance.Result = 0; wFInstance.WF_TempID = int.Parse(Request["hiddenTempId"]); wFInstance.Status = 0; wFInstance.SubTime = DateTime.Now; wFInstance.StartedBy = LoginUserInfo.ID; wF_InstanceService.AddEntity(wFInstance); // Start workflow IDictionary <string, object> data = new Dictionary <string, object>(); //data.Add("TempBookMarkName", "Project Manager"); data.Add("FlowTo", int.Parse(Request["flowto"])); data.Add("Money", decimal.Parse(Request["Amount"])); data.Add("ProcessBy", wFInstance.StartedBy); data.Add("WFInstanceId", wFInstance.ID); //Start the worklfow //var app = Common.WorkFlowHelper.CreateApplicationAndRun(new FinancialActivity(), data); //var app = Common.WorkFlowHelper.CreateApplicationAndRun(new FinancialActivity(), data); #region Workflow var application = WorkflowApplicationHelper.CreateWorkflowApplication(new ClaimExpenseActivity(), data); wFInstance.ApplicationId = application.Id; wF_InstanceService.EditEntity(wFInstance); //Update the worflow instance id. //Start the first step, apply for expense claim //QA.Model.WF_StepInfo initStepInfo = new QA.Model.WF_StepInfo(); //initStepInfo.ChildStepID = 0; //initStepInfo.Comment = "Start a expense claim"; //initStepInfo.DelFlag = 0; //initStepInfo.IsEndStep = false; //initStepInfo.IsProcessed = true; //initStepInfo.IsStartStep = true; //initStepInfo.ParentStepID = -1; ////initStepInfo.ProcessBy = LoginUser.ID; //initStepInfo.ProcessBy = 2; //initStepInfo.ProcessTime = DateTime.Now; //initStepInfo.Remark = "Start an expense claim"; //initStepInfo.StepName = "The begining initiate step"; //initStepInfo.StepResult = 0; //initStepInfo.SubTime = DateTime.Now; //initStepInfo.Title = "Initiate an expense claim"; //initStepInfo.WF_InstanceID = wFInstance.ID; //wF_StepInfoService.AddEntity(initStepInfo); ////Create project manager validating step and waiting for approving //QA.Model.WF_StepInfo pmStepInfo = new QA.Model.WF_StepInfo(); //pmStepInfo.ChildStepID = 0; //pmStepInfo.Comment = string.Empty; //pmStepInfo.DelFlag = 0; //pmStepInfo.IsEndStep = false; //pmStepInfo.IsProcessed = false; //pmStepInfo.IsStartStep = false; //pmStepInfo.ParentStepID = initStepInfo.ID; ////pmStepInfo.ProcessBy = LoginUser.ID; //pmStepInfo.ProcessBy = 38; //pmStepInfo.ProcessTime = DateTime.Now; //pmStepInfo.Remark = string.Empty; //pmStepInfo.StepName = "Project manager validation"; //pmStepInfo.StepResult = 0; //pmStepInfo.SubTime = DateTime.Now; //pmStepInfo.Title = string.Empty; //pmStepInfo.WF_InstanceID = wFInstance.ID; //wF_StepInfoService.AddEntity(pmStepInfo); #endregion //return Redirect("/WFInstance/StartFinancial?id=" + id); return(Content("ok")); }
public ActionResult Add(WF_Instance instance, int id, int flowTo) { var currentUserId = LoginUser.ID; //在工作流实例表添加一条数据: instance.DelFlag = delflagNormal; instance.StartTime = DateTime.Now; instance.FilePath = string.Empty; instance.StartBy = currentUserId; instance.Level = 0; instance.Status = (short)Heima8.OA.Model.Enum.WF_InstanceEnum.Processing; instance.WFInstanceId = Guid.Empty; instance.WF_TempID = id; WF_InstanceService.Add(instance); //第二点:启动工作流 //1、获得工作流类型 var temp = GetWfTemp(instance); var activity = WorkflowFactory.GetActivity(temp.ActityType); WorkflowApplication wfApp = null; //2、家具产品对应的逻辑 if (activity is ProductFlow) { //家具逻辑中,设计之后数控和小锯是二选一 var designRole = RoleInfoService.GetEntities(r => r.DelFlag == delflagNormal && r.RoleName.Contains("设计")) .FirstOrDefault(); string flowToKeyWord = GetRoleHelper.GetFlowToRoleKeyWord(designRole, id); wfApp = WorkflowApplicationHelper.CreateWorkflowApp(activity, new Dictionary <string, object>() { { "AfterDesignFlowTo", flowToKeyWord } }); }//else if{ 其他工作流的逻辑} else {//没有对应的工作流提前结束 return(RedirectToAction("ShowMyCheck")); } instance.WFInstanceId = wfApp.Id; WF_InstanceService.Update(instance); //第三点:在步骤表里面添加两条步骤。一个当前已经处理的完成步骤。 WF_Step startStep = new WF_Step(); startStep.WF_InstanceID = instance.ID; startStep.SubTime = DateTime.Now; startStep.StepName = "提交审批表单"; startStep.IsEndStep = false; startStep.IsStartStep = true; startStep.ProcessBy = currentUserId; startStep.PorcessComment = "提交申请"; startStep.ProcessResult = "通过"; startStep.ProcessTime = DateTime.Now; // startStep.StepName = "提交审批表单"; startStep.StepStatus = (short)Heima8.OA.Model.Enum.WFStepEnum.Processed; WF_StepService.Add(startStep); //二个步骤:下一步谁审批的步骤。 项目经理审批 WF_Step nextStep = new WF_Step(); nextStep.WF_InstanceID = instance.ID; nextStep.SubTime = DateTime.Now; nextStep.ProcessTime = DateTime.Now; nextStep.PorcessComment = string.Empty; nextStep.IsEndStep = false; nextStep.IsStartStep = false; nextStep.ProcessBy = flowTo; nextStep.ProcessResult = ""; nextStep.StepName = ""; nextStep.StepStatus = (short)Heima8.OA.Model.Enum.WFStepEnum.UnProecess; WF_StepService.Add(nextStep); return(RedirectToAction("ShowMyCheck")); }