public static void CopyWorkflowToStepHis(WorkflowDbContext wfContext, WF_WORKFLOW_INST workflowRow, WF_STEP_INST_HIS stepRow, FlowAction flowAction) { // stepRow.SI_INDEX = workflowRow.WI_INDEX; stepRow.SI_INDEX = workflowRow.WI_INDEX; //步骤标识 0 -- 有效初始值 1 -- 无效的 stepRow.SI_VALID_FLAG = 0; stepRow.SI_VALID_FLAG = 0; //流转方式 stepRow.SI_FLOW_TYPE = (int?)flowAction; ////步骤基本信息 stepRow.SI_ID = wfContext.GetUniId(); stepRow.SI_WI_ID = workflowRow.WI_ID; ////上一步骤信息 stepRow.SI_LAST_STEP = workflowRow.WI_LAST_STEP; stepRow.SI_LAST_STEP_NAME = workflowRow.WI_LAST_STEP_NAME; stepRow.SI_LAST_MANUAL = workflowRow.WI_LAST_MANUAL; stepRow.SI_LAST_MANUAL_NAME = workflowRow.WI_LAST_MANUAL_NAME; ////当前步骤 stepRow.SI_CURRENT_STEP = workflowRow.WI_CURRENT_STEP; stepRow.SI_CURRENT_STEP_NAME = workflowRow.WI_CURRENT_STEP_NAME; stepRow.SI_STEP_TYPE = workflowRow.WI_STEP_TYPE; stepRow.SI_PRIORITY = workflowRow.WI_PRIORITY; stepRow.SI_STATUS = workflowRow.WI_STATUS ?? 0; ////当前步骤 时间信息:开始时间 结束时间 步骤用时 stepRow.SI_START_DATE = workflowRow.WI_CURRENT_CREATE_DATE; stepRow.SI_END_DATE = wfContext.Now; stepRow.SI_TIME_SPAN = (double)((wfContext.Now - stepRow.SI_START_DATE.Value <DateTime>()).Ticks) / TimeSpan.TicksPerDay; ////发送时间 stepRow.SI_SEND_DATE = workflowRow.WI_SEND_DATE; }
public static void SendStep(Workflow workflow, StepConfig nextStep, IUnitOfData source) { DateTime now = DateTime.Now; // = AtawIocContext.Current.FetchInstance<IUnitOfData>(); WorkflowDbContext dbContext = source as WorkflowDbContext; WF_WORKFLOW_INST workflowRow = workflow.WorkflowRow; WorkflowContent content = WorkflowInstUtil.CreateContent(workflowRow); using (dbContext) { //拷贝新步骤 WF_STEP_INST stepRow = new WF_STEP_INST(); (source as WorkflowDbContext).WF_STEP_INST.Add(stepRow); CopyWorkflowToStep(dbContext, workflowRow, stepRow, FlowAction.Flow); //人工步骤的处理 bool isManual = workflow.CurrentStep.Config.StepType == StepType.Manual; if (isManual) { CopyManualInfo(workflow.WorkflowRow, stepRow); } //更新工作流实例 workflowRow.WI_INDEX = workflowRow.WI_INDEX.Value <int>() + 1; if (isManual) { workflowRow.WI_LAST_MANUAL = workflowRow.WI_CURRENT_STEP; workflowRow.WI_LAST_MANUAL_NAME = workflowRow.WI_CURRENT_STEP_NAME; //更新参与人列表 string refIds = workflowRow.WI_REF_LIST; QuoteIdList ulRef = QuoteIdList.LoadFromString(refIds); string receiveId = workflowRow.WI_RECEIVE_ID; string sendId = workflowRow.WI_SEND_ID; string processId = workflowRow.WI_PROCESS_ID; ulRef.Add(receiveId); ulRef.Add(sendId); ulRef.Add(processId); int outInt; workflowRow.WI_REF_LIST = ulRef.ToString(out outInt); //接收人 处理人 重新置为空 workflowRow.WI_RECEIVE_ID = ""; workflowRow.WI_LAST_PROCESS_ID = workflowRow.WI_PROCESS_ID; workflowRow.WI_PROCESS_ID = ""; workflowRow.WI_RECEIVE_LIST = ""; //清空超时和提醒标识 if (workflowRow.WI_IS_TIMEOUT.Value <bool>() == true) { workflowRow.WI_IS_TIMEOUT = false; } //清空错误处理信息 WI_ERROR_TYPE WI_MAX_RETRY_TIMES WI_RETRY_TIMES WI_NEXT_EXE_DATE WorkflowInstUtil.ClearError(workflowRow); } //更新主表信息 SetWorkflowByStep(source, workflowRow, nextStep); content.SetMainRowStatus(source, nextStep); dbContext.Submit(); } // IUnitOfData dbContext = AtawIocContext.Current.FetchInstance<IUnitOfData>(); //ATAW_WORKFLOWContext context = dbContext as ATAW_WORKFLOWContext; //拷贝新步骤 //WF_STEP_INST stepRow = new WF_STEP_INST(); }
private void SendNotifys(WF_WORKFLOW_INST mainRow, IUnitOfData source) { try { INotifyAction notifyAction; if (!NotifyActions.IsNotEmpty()) { NotifyActions.Add("DefaultNotifyAction"); } //if (NotifyActions.IndexOf("NotifyAction") < 0 ) //{ // NotifyActions.Add("NotifyAction"); //} foreach (var notify in NotifyActions) { notifyAction = notify.CodePlugIn <INotifyAction>(); notifyAction.DoPush(QuoteIdList.LoadFromString(mainRow.WI_RECEIVE_LIST), null, mainRow, source); //DoActionDelegate doActionDelegate = new DoActionDelegate(notifyAction.DoAction); foreach (var userID in QuoteIdList.LoadFromString(mainRow.WI_RECEIVE_LIST)) { notifyAction.DoAction(userID, mainRow, null, source); //doActionDelegate.BeginInvoke(userID, mainRow, WorkflowInstUtil.CreateContent(mainRow), source, null, null); } } //---------- } catch (Exception ex) { string str = "工作流触发异常:" + ex.Message; AtawAppContext.Current.Logger.Debug(str); AtawTrace.WriteFile(LogType.Error, str); } }
public void BeginStepExecute(StepConfig stepConfig, int priority, string workflowName, WorkflowContent content, IUnitOfData context) { StringBuilder sb = new StringBuilder(); content.SaveStringBuilder(sb); // throw new System.NotImplementedException(); WorkflowDbContext wfContent = context as WorkflowDbContext; //ATAW_WORKFLOWContext wfContent = context as ATAW_WORKFLOWContext; WF_WORKFLOW_INST inst = new WF_WORKFLOW_INST(); inst.WI_ID = wfContent.GetUniId(); inst.WI_CONTENT_XML = sb.ToString(); inst.WI_NAME = workflowName; wfContent.WF_WORKFLOW_INST.Add(inst); //步骤基本信息 StepUtil.SetWorkflowByStep(inst, stepConfig.Name, stepConfig.DisplayName, wfContent.Now, (int)stepConfig.StepType, (int)StepState.ProcessNotSend); inst.WI_INDEX = 1; inst.WI_PRIORITY = priority; //扩展信息 //父子流程 //主表控制 content.SetAllMainRow(wfContent, stepConfig, inst.WI_ID); }
public static void SetWorkflowByStep(WF_WORKFLOW_INST row, StepConfig stepConfig) { DateTime now = DateTime.Now; SetWorkflowByStep(row, stepConfig.Name, stepConfig.DisplayName, now, (int)stepConfig.StepType, (int)StepState.NotReceive, now); }
public static void ClearError(WF_WORKFLOW_INST workflowRow) { //清空错误处理信息 WI_ERROR_TYPE WI_MAX_RETRY_TIMES WI_RETRY_TIMES WI_NEXT_EXE_DATE workflowRow.WI_ERROR_TYPE = null; workflowRow.WI_MAX_RETRY_TIMES = null; workflowRow.WI_RETRY_TIMES = null; workflowRow.WI_NEXT_EXE_DATE = null; }
public override void Prepare(WF_WORKFLOW_INST workflowRow, IUnitOfData source) { if (string.IsNullOrEmpty(workflowRow.WI_RECEIVE_LIST)) { SetReceiveUserList(workflowRow, source); } //-----消息触发 SendNotifys(workflowRow, source); }
//public static void SetWorkflowByStep(IWorkflowSource source, WF_WORKFLOW_INST workflowRow, // StepConfig nextStep) //{ // workflowRow.WI_LAST_STEP = workflowRow.WI_CURRENT_STEP; // workflowRow.WI_LAST_STEP_NAME = workflowRow.WI_CURRENT_STEP_NAME; // WorkflowInstResolver.SetWorkflowByStep(workflowRow, nextStep); // nextStep.Prepare(workflowRow, source); //} public static void SetWorkflowByStep(WF_WORKFLOW_INST row, string currName, string currDisplayName, DateTime createDateTime, int stepType, int stepStatus) { row.WI_CURRENT_STEP = currName; row.WI_CURRENT_STEP_NAME = currDisplayName; row.WI_CURRENT_CREATE_DATE = createDateTime; row.WI_STEP_TYPE = stepType; row.WI_STATUS = stepStatus; }
public static void ManualSendWorkflow(WF_WORKFLOW_INST row, object userId, BaseProcessor processor) { // 处理人,处理时间,状态改为PNS row.WI_PROCESS_ID = userId.ToString(); row.WI_PROCESS_DATE = DateTime.Now; row.WI_STATUS = (int)StepState.ProcessNotSend; processor.SaveContent(row); }
//public static void FinishStep(Workflow workflow, WorkflowContent content, EndStepConfig config, // IUnitOfData source, BaseProcessor processor) //{ // FinishType finishType = FinishType.Normal; // if (config.EnableModify) // { // finishType = FinishType.ModifiedNormal; // } // FinishData result = FinishStep(workflow, finishType, // workflow.WorkflowRow["WI_PROCESS_ID"], content); // source.Submit(); //} public static void SetWorkflowByStep(IUnitOfData source, WF_WORKFLOW_INST workflowRow, StepConfig nextStep) { workflowRow.WI_LAST_STEP = workflowRow.WI_CURRENT_STEP; workflowRow.WI_LAST_STEP_NAME = workflowRow.WI_CURRENT_STEP_NAME; WorkflowInstUtil.SetWorkflowByStep(workflowRow, nextStep); nextStep.Prepare(workflowRow, source); }
//public abstract string SourceModuleID { get; } public void DoAction(string userId, WF_WORKFLOW_INST mainRow, WorkflowContent content, IUnitOfData source) { IMessagesBuilder messagesBuilder = GlobalVariable.AppContext.AtawMessagesBuilder.Value; //Thread th = new Thread(); string messageBody = string.Format("{0}-{1}-需要你处理", mainRow.WI_NAME, mainRow.WI_CURRENT_STEP_NAME); string url = string.Format("{0}{1}", BaseUrl, mainRow.WI_ID); messagesBuilder.InsertMessage(Title, messageBody, url, 0, userId, MessageTypeEnum.WorkFlow, "", GlobalVariable.FControlUnitID, GlobalVariable.UserId.ToString()); }
public static WorkflowContent CreateContent(WF_WORKFLOW_INST row) { string contentXml = row.WI_CONTENT_XML; AtawDebug.AssertNotNullOrEmpty(contentXml, string.Format(ObjectUtil.SysCulture, "ID为{0},模式为{1}的工作流没有设置ContentXml", row.WI_ID, row.WI_WD_NAME), null); WorkflowContent content = XmlUtil.ReadFromString <WorkflowContent>(contentXml); return(content); }
public bool SaveContent(WF_WORKFLOW_INST workflowRow) { if (AddContent()) { StringBuilder sb = new StringBuilder(); Content.SaveStringBuilder(sb); workflowRow.WI_CONTENT_XML = sb.ToString(); return(true); } return(false); }
public WF_WORKFLOW_INST GetWorkFlowInst(string id) { WF_WORKFLOW_INST workFlowInst = null; if (!string.IsNullOrEmpty(id)) { workFlowInst = context.WF_WORKFLOW_INST.FirstOrDefault <WF_WORKFLOW_INST>(m => m.WI_ID == id); workFlowInst.WI_CREATE_USER = string.IsNullOrEmpty(workFlowInst.WI_CREATE_USER) ? "" : Ataw_Users.Get(workFlowInst.WI_CREATE_USER).NickName; } return(workFlowInst); }
public virtual bool Match(WF_WORKFLOW_INST mainRow, WorkflowContent content, IUnitOfData source) { //throw new NotImplementedException(); if (mainRow.WI_CUSTOM_DATA == "0" || mainRow.WI_CUSTOM_DATA == "1") { return(mainRow.WI_CUSTOM_DATA.Value <int>() == 1); } else { return(mainRow.WI_APPROVE == 1); } }
//public static void SetInstInfo(DataRow row, DataRow mainRow, DbContext context, string infoFieldName, string columnName) //{ // int sharpP = columnName.IndexOf("#", StringComparison.CurrentCulture); // if (sharpP > -1) // { // string fieldName = columnName.Substring(0, sharpP); // string easySearchName = columnName.Substring(sharpP + 1); // EasySearch search = PlugInFactoryManager.CreateInstance<EasySearch>("EasySearch", easySearchName); // string infoValue = search.Decode(context, mainRow[fieldName].ToString()); // row[infoFieldName] = infoValue; // } // else // { // row[infoFieldName] = mainRow[columnName]; // } //} public static void SaveError(WF_WORKFLOW_INST workflowRow, WorkflowException wfException) { ErrorConfig error = wfException.ErrorConfig; if (workflowRow.WI_STATUS.Value <StepState>() != StepState.Mistake) { workflowRow.WI_STATUS = StepState.Mistake.Value <int>(); workflowRow.WI_ERROR_TYPE = (int)wfException.Reason; workflowRow.WI_MAX_RETRY_TIMES = error.RetryTimes; } workflowRow.WI_RETRY_TIMES = workflowRow.WI_RETRY_TIMES.Value <int>() + 1; workflowRow.WI_NEXT_EXE_DATE = DateTime.Now.Add(error.Interval); }
public override void Execute(WF_WORKFLOW_INST workflowRow) { // throw new NotImplementedException(); if (UIData != null && UIData.Tables["WF_APPROVE_HISTORY"] != null) { var approveRow = UIData.Tables["WF_APPROVE_HISTORY"].Rows[0]; var yes = approveRow["AH_APPROVE"].ToString(); var note = approveRow["AH_NOTE"].ToString(); WorkflowDbContext db = Source as WorkflowDbContext; SetApproveYes(yes.Value <bool>(), db); string sql = "INSERT INTO [WF_APPROVE_HISTORY] " + "([AH_ID] " + ",[AH_WORKFLOW_ID] " + ",[AH_STEP_NAME] " + ",[AH_STEP_DISPLAY_NAME] " + ",[AH_OPERATOR] " + " ,[AH_APPROVE] " + " ,[AH_NOTE] " + " ,[AH_CREATE_ID] " + " ,[AH_CREATE_DATE]) " + "VALUES(@AH_ID,@AH_WORKFLOW_ID,@AH_STEP_NAME,@AH_STEP_DISPLAY_NAME,@AH_OPERATOR,@AH_APPROVE,@AH_NOTE,@AH_CREATE_ID,@AH_CREATE_DATE) "; // "('" + db.GetUniId() + "' " + // ",'" + workflowRow.WI_ID + "' " + //" ,'" + workflowRow.WI_CURRENT_STEP + "' " + // ",'" + workflowRow.WI_CURRENT_STEP_NAME + "' " + //" ,'" + GlobalVariable.UserId.ToString() + "' " + //" ," + yes + //" ,'" + note + "' " + // " ,'" + GlobalVariable.UserId.ToString() + "' " + //" ,'" + db.Now.ToString() + "') "; List <SqlParameter> dblist = new List <SqlParameter>(); dblist.Add(new SqlParameter("@AH_ID", db.GetUniId())); dblist.Add(new SqlParameter("@AH_WORKFLOW_ID", workflowRow.WI_ID)); dblist.Add(new SqlParameter("@AH_STEP_NAME", workflowRow.WI_CURRENT_STEP)); dblist.Add(new SqlParameter("@AH_STEP_DISPLAY_NAME", workflowRow.WI_CURRENT_STEP_NAME)); dblist.Add(new SqlParameter("@AH_OPERATOR", GlobalVariable.UserId.ToString())); dblist.Add(new SqlParameter("@AH_APPROVE", yes)); dblist.Add(new SqlParameter("@AH_NOTE", note)); dblist.Add(new SqlParameter("@AH_CREATE_ID", GlobalVariable.UserId.ToString())); dblist.Add(new SqlParameter("@AH_CREATE_DATE", db.Now.ToString())); db.RegisterSqlCommand(sql, dblist.ToArray()); workflowRow.WI_CUSTOM_DATA = yes; } }
public static void CopyManualInfo(WF_WORKFLOW_INST workflowRow, WF_STEP_INST stepRow) { //当前步骤是否超时 超时时间 (超时信息) stepRow.SI_IS_TIMEOUT = workflowRow.WI_IS_TIMEOUT; stepRow.SI_TIMEOUT_DATE = workflowRow.WI_TIMEOUT_DATE; //接收 发送 处理人和时间(操作信息) stepRow.SI_RECEIVE_ID = workflowRow.WI_RECEIVE_ID; stepRow.SI_RECEIVE_DATE = workflowRow.WI_RECEIVE_DATE; stepRow.SI_SEND_ID = workflowRow.WI_SEND_ID; stepRow.SI_SEND_DATE = workflowRow.WI_SEND_DATE; stepRow.SI_PROCESS_ID = workflowRow.WI_PROCESS_ID; stepRow.SI_PROCESS_DATE = workflowRow.WI_PROCESS_DATE; }
public override void Prepare(WF_WORKFLOW_INST workflowRow, IUnitOfData source) { try { INotifyAction notifyAction; foreach (var notify in NotifyActions) { notifyAction = AtawIocContext.Current.FetchInstance <INotifyAction>(notify); notifyAction.DoAction(workflowRow.WI_CREATE_USER, workflowRow, null, source); } } catch (Exception ex) { string str = "工作流触发异常:" + ex.Message; AtawAppContext.Current.Logger.Debug(str); AtawTrace.WriteFile(LogType.Error, str); } }
public void DoPush(IEnumerable <string> userIds, NodeRequest nodeRequest, WF_WORKFLOW_INST mainRow, IUnitOfData source) { if (userIds == null || userIds.Count() == 0) { return; } var workflowSource = source as WorkflowDbContext; if (workflowSource == null) { return; } var workflowDefName = workflowSource.WF_WORKFLOW_DEF.FirstOrDefault(m => m.WD_SHORT_NAME == mainRow.WI_WD_NAME).WD_NAME; foreach (var userId in userIds) { var selectsql = string.Format("SELECT NickName FROM Ataw_Users WHERE UserID=@USERID"); var param = new SqlParameter("@USERID", userId); string nickName = source.QueryObject(selectsql, param).ToString(); SnsActiveService sns = new SnsActiveService(); sns.SetUnitOfData(source); string title = string.Format(ObjectUtil.SysCulture, "待处理流程到达:" + "<a class='ACT-A-HREF' href='$$module/workflow/workflowDef$Detail${0}'>{1}</a>" + "<br/>" + "<a class='ACT-A-HREF' href='$workflow$inst$${2}'>{3}-{4}</a>", Convert.ToBase64String(Encoding.Default.GetBytes("{\"keys\":\"" + mainRow.WI_WD_NAME + "\"}")), workflowDefName, mainRow.WI_ID, mainRow.WI_NAME, mainRow.WI_CURRENT_STEP_NAME); sns.InsertActive(new ActiveModel() { ItemType = ActivityItemType.MyWork.ToString(), PrivacyStatus = PrivacyType.ToMyself.ToString(), SourceId = mainRow.WI_ID, SubContent = title, UserId = userId, UserName = nickName }); } source.ApplyFun.Add((tran) => { NodeServerPusher.Notify(userIds, null); return(0); }); }
private void SetReceiveUserList(WF_WORKFLOW_INST workflowRow, IUnitOfData source) { try { QuoteIdList list = new QuoteIdList(); int count; IActor actorPlug = AtawIocContext.Current.FetchInstance <IActor>(ActorRegName); IEnumerable <string> actors = actorPlug.GetActors(workflowRow, source); list.Add(actors); workflowRow.WI_RECEIVE_LIST = list.ToString(out count); workflowRow.WI_RECEIVE_COUNT = count; if (count == 0) { throw new NoActorException(this, Error, new Exception("找不到一个人")); } } catch (Exception ex) { throw new NoActorException(this, Error, ex); } }
private Workflow(string workflowId, IUnitOfData workflowSource) : this(workflowSource) { //Source = workflowSource; WorkflowDbContext dbContext = workflowSource as WorkflowDbContext; WF_WORKFLOW_INST row = dbContext.WF_WORKFLOW_INST.FirstOrDefault(a => a.WI_ID == workflowId); AtawDebug.AssertNotNull(row, "该流程已处理或异常,请进历史页面查看", this); WorkflowId = row.WI_ID; WorkflowRow = row; Config = WorkflowConfig.GetByName(row.WI_WD_NAME, workflowSource); //WorkflowConfig.ConnString = StepConfig stepConfig = Config.Steps[row.WI_CURRENT_STEP]; if (stepConfig != null) { CurrentStep = stepConfig.CreateStep(this); CurrentState = CurrentStep.GetState(row.WI_STATUS.Value <StepState>()); } else { throw new AtawException("不存在的步骤" + row.WI_CURRENT_STEP, this); } }
public Workflow(IUnitOfData source, string name, RegNameList <KeyValueItem> parameter, string createUser, int?parentId) : this(source) { // Source = source; WorkflowDbContext dbContext = source as WorkflowDbContext; Config = WorkflowConfig.GetByName(name, source); WorkflowRow = new WF_WORKFLOW_INST(); //WorkflowRow.BeginEdit(); WorkflowRow.WI_ID = dbContext.GetUniId(); //WorkflowRow["WI_ID"] = id; WorkflowId = WorkflowRow.WI_ID; WorkflowRow.WI_WD_NAME = name; WorkflowRow.WI_CREATE_USER = createUser; // WorkflowRow["WI_RETRIEVABLE"] = Config.Retrievable; ////初始化参与人列表 WorkflowRow.WI_REF_LIST = QuoteIdList.GetQuoteId(createUser); WorkflowRow.WI_CREATE_DATE = dbContext.Now; BeginStep step = Config.Steps.BeginStep.CreateStep(this) as BeginStep; step.Parameter = parameter; CurrentStep = step; CurrentState = BeginNRState.Instance; }
public override bool Match(WF_WORKFLOW_INST mainRow, WorkflowContent content, IUnitOfData source) { return(!base.Match(mainRow, content, source)); }
public static void Abort(IUnitOfData source, WF_WORKFLOW_INST WorkflowRow, FinishType finishType = FinishType.Abort) { WorkflowDbContext dbContext = source as WorkflowDbContext; WorkflowContent content = WorkflowInstUtil.CreateContent(WorkflowRow); WF_WORKFLOW_INST_HIS wfi_His = new WF_WORKFLOW_INST_HIS(); //copy wfi_His.WI_ID = WorkflowRow.WI_ID; wfi_His.WI_WD_NAME = WorkflowRow.WI_WD_NAME; wfi_His.WI_CONTENT_XML = WorkflowRow.WI_CONTENT_XML; wfi_His.WI_NAME = WorkflowRow.WI_NAME; wfi_His.WI_CREATE_DATE = WorkflowRow.WI_CREATE_DATE; wfi_His.WI_CREATE_USER = WorkflowRow.WI_CREATE_USER; wfi_His.WI_REF_LIST = WorkflowRow.WI_REF_LIST; wfi_His.WI_IS_TIMEOUT = WorkflowRow.WI_IS_TIMEOUT; wfi_His.WI_TIMEOUT_DATE = WorkflowRow.WI_TIMEOUT_DATE; wfi_His.WI_NEXT_EXE_DATE = WorkflowRow.WI_NEXT_EXE_DATE; wfi_His.WI_PRIORITY = WorkflowRow.WI_PRIORITY; wfi_His.WI_STATUS = WorkflowRow.WI_STATUS; wfi_His.WI_ERROR_TYPE = WorkflowRow.WI_ERROR_TYPE; wfi_His.WI_RETRY_TIMES = WorkflowRow.WI_RETRY_TIMES; wfi_His.WI_MAX_RETRY_TIMES = WorkflowRow.WI_MAX_RETRY_TIMES; wfi_His.WI_WE_ID = WorkflowRow.WI_WE_ID; wfi_His.WI_PARENT_ID = WorkflowRow.WI_PARENT_ID; wfi_His.WI_PC_FLAG = WorkflowRow.WI_PC_FLAG; //赋值 wfi_His.WI_END_DATE = dbContext.Now; wfi_His.WI_END_STATE = (int)finishType; if (!string.IsNullOrEmpty(WorkflowRow.WI_PROCESS_ID)) { wfi_His.WI_END_USER = WorkflowRow.WI_PROCESS_ID; } else { wfi_His.WI_END_USER = GlobalVariable.UserId.ToString(); } //附加 dbContext.WF_WORKFLOW_INST_HIS.Add(wfi_His); ////copy步骤历史 string wiId = WorkflowRow.WI_ID; List <WF_STEP_INST> stepList = dbContext.WF_STEP_INST.Where(a => a.SI_WI_ID == wiId).ToList(); List <WF_STEP_INST_HIS> stepListHis = new List <WF_STEP_INST_HIS>(); foreach (var step in stepList) { //------------ WF_STEP_INST_HIS his = new WF_STEP_INST_HIS(); his.SI_WI_ID = step.SI_WI_ID; his.SI_CURRENT_STEP = step.SI_CURRENT_STEP; his.SI_CURRENT_STEP_NAME = step.SI_CURRENT_STEP_NAME; his.SI_END_DATE = step.SI_END_DATE; his.SI_FLOW_TYPE = step.SI_FLOW_TYPE; his.SI_ID = step.SI_ID; his.SI_INDEX = step.SI_INDEX; his.SI_IS_TIMEOUT = step.SI_IS_TIMEOUT; his.SI_LAST_MANUAL = step.SI_LAST_MANUAL; his.SI_LAST_MANUAL_NAME = step.SI_LAST_MANUAL_NAME; his.SI_LAST_STEP = step.SI_LAST_STEP; his.SI_LAST_STEP_NAME = step.SI_LAST_STEP_NAME; his.SI_NOTE = step.SI_NOTE; his.SI_PRIORITY = step.SI_PRIORITY; his.SI_PROCESS_DATE = step.SI_PROCESS_DATE; his.SI_PROCESS_ID = step.SI_PROCESS_ID; his.SI_RECEIVE_DATE = step.SI_RECEIVE_DATE; his.SI_RECEIVE_ID = step.SI_RECEIVE_ID; his.SI_SEND_DATE = step.SI_SEND_DATE; his.SI_SEND_ID = step.SI_SEND_ID; his.SI_START_DATE = step.SI_START_DATE; his.SI_STATUS = step.SI_STATUS; his.SI_STEP_TYPE = step.SI_STEP_TYPE; his.SI_TIME_SPAN = step.SI_TIME_SPAN; his.SI_TIMEOUT_DATE = step.SI_TIMEOUT_DATE; dbContext.WF_STEP_INST.Remove(step); dbContext.WF_STEP_INST_HIS.Add(his); } //新增最后一个步骤到历史 WF_STEP_INST_HIS his_step = new WF_STEP_INST_HIS(); // dbContext.WF_STEP_INST_HIS.Add(his_step); StepUtil.CopyWorkflowToStepHis(dbContext, WorkflowRow, his_step, FlowAction.Flow); dbContext.WF_STEP_INST_HIS.Add(his_step); ////更新主表信息 //删除视力表 content.EndMainRowStatus(dbContext, finishType); ////主表转移先不做 ////--提交 dbContext.WF_WORKFLOW_INST.Remove(WorkflowRow); dbContext.Submit(); }
public static void OverTryTimesAbort(IUnitOfData source, WF_WORKFLOW_INST WorkflowRow) { Abort(source, WorkflowRow, FinishType.OverTryTimes); }
public static void ErrorAbort(IUnitOfData source, WF_WORKFLOW_INST WorkflowRow) { Abort(source, WorkflowRow, FinishType.Error); }
public static void SetWorkflowByStep(WF_WORKFLOW_INST row, string currName, string currDisplayName, DateTime createDateTime, int stepType, int stepStatus, DateTime sendTime) { row.WI_SEND_DATE = sendTime; SetWorkflowByStep(row, currName, currDisplayName, createDateTime, stepType, stepStatus); }
public bool ProcessManualWorkflow(WF_WORKFLOW_INST workflowRow, string userId) { WorkflowDbContext dbContext = Source as WorkflowDbContext; StepState state = (StepState)workflowRow.WI_STATUS; switch (state) { case StepState.NotReceive: // NR: // 检查userId是否在接受人列表中,是接收并打开,返回true,否则返回false //如果接受人有多个,你只是其中的一个,并且你是上个流程的处理者,不能接收 这一点可以根据配置来..... string receiveIds = workflowRow.WI_RECEIVE_LIST; QuoteIdList ulReceive = QuoteIdList.LoadFromString(receiveIds); if (ulReceive.Contains(userId)) { bool _isAppAutoStep = "WrokflowAutoStep".AppKv <bool>(false); string _ManualAskUser = AtawAppContext.Current.GetItem("ManualAskUser").Value <string>(); if (ulReceive.Count > 0 && (_ManualAskUser == userId) && !_isAppAutoStep) { //............. return(false); } else { workflowRow.WI_RECEIVE_ID = userId; workflowRow.WI_STATUS = (int)StepState.OpenNotProcess; workflowRow.WI_RECEIVE_DATE = dbContext.Now; Source.Submit(); } return(true); } else { return(false); } case StepState.ReceiveNotOpen: // RNO: // 检查接收人是否是userId,是打开,返回true,否则返回false if (userId == workflowRow.WI_RECEIVE_ID) { workflowRow.WI_STATUS = (int)StepState.OpenNotProcess; Source.Submit(); return(true); } else { return(false); } case StepState.OpenNotProcess: // ONP: // 检查接收人是否是userId,是返回true,否则返回false return(userId == workflowRow.WI_RECEIVE_ID); default: AtawDebug.ThrowImpossibleCode(this); break; } return(false); }
public virtual void Prepare(WF_WORKFLOW_INST workflowRow, IUnitOfData source) { }