protected void Page_Load(object sender, EventArgs e) { string resourceID = Request.QueryString["resourceID"]; WfProcessCurrentInfoCollection infos = WfProcessCurrentInfoAdapter.Instance.Load(false, builder => builder.AppendItem("RESOURCE_ID", resourceID)); string newUrl = ""; string signStr = ""; string keyName = ""; if (infos.Count > 0) { keyName = "appTrace"; } else { keyName = "oldAppTrace"; } if (ResourceUriSettings.GetConfig().Paths[keyName].Uri.ToString().IndexOf('?') != -1) { signStr = "{0}&{1}"; } else { signStr = "{0}?{1}"; } newUrl = string.Format(signStr , ResourceUriSettings.GetConfig().Paths[keyName].Uri.ToString() , Request.QueryString.ToString()); Response.Redirect(newUrl); }
/// <summary> /// /// </summary> /// <param name="fillAssignees"></param> /// <param name="action"></param> /// <returns></returns> public WfProcessCurrentInfoCollection Load(bool fillAssignees, Action<WhereSqlClauseBuilder> action) { action.NullCheck("action"); WfProcessCurrentInfoCollection result = new WfProcessCurrentInfoCollection(); WhereSqlClauseBuilder whereBuilder = new WhereSqlClauseBuilder(); action(whereBuilder); string fieldNames = ORMapping.GetSelectFieldsNameSql<WfProcessInstanceData>("Data"); string sql = string.Format("SELECT {0} FROM WF.PROCESS_INSTANCES WHERE {1}", fieldNames, whereBuilder.ToSqlString(TSqlBuilder.Instance)); DataTable table = DbHelper.RunSqlReturnDS(sql, GetConnectionName()).Tables[0]; result.LoadFromDataView(table.DefaultView); if (fillAssignees) FillAssignees(result); return result; }
protected override void AfterCreateProcessInstance(SysTaskProcess sysTaskProcess) { sysTaskProcess.Name = string.Format("作废ID为{0}的流程", this.ProcessID); int index = 0; sysTaskProcess.OwnerActivityID = this.OwnerSysActivityID; IWfProcess process = WfRuntime.GetProcessByProcessID(this.ProcessID); WfProcessCurrentInfoCollection branchProcessesStatus = WfRuntime.GetProcessStatusByOwnerActivityID(process.CurrentActivity.ID, string.Empty, false); if (branchProcessesStatus.Count > 0 && this.CancelAllBranchProcesses) { //作废子流程 sysTaskProcess.Activities.Add(sysTaskProcess.CreateDispatchCancelBranchesProcessActivity(process.CurrentActivity.ID, this.CancelAllBranchProcesses, index++)); } if (this.CancelSelf) { sysTaskProcess.Activities.Add(sysTaskProcess.CreateCancelProcessActivity(this.ProcessID, index++)); } sysTaskProcess.Activities.Add(sysTaskProcess.CreateExitMaintainingActivity(this.ProcessID, index++)); }
/// <summary> /// 加载流程运行时的信息 /// </summary> /// <param name="processIDs"></param> /// <returns></returns> public WfProcessCurrentInfoCollection Load(bool fillAssignees, params string[] processIDs) { processIDs.NullCheck("processIDs"); WfProcessCurrentInfoCollection result = new WfProcessCurrentInfoCollection(); InSqlClauseBuilder builder = new InSqlClauseBuilder(); builder.AppendItem(processIDs); if (builder.Count > 0) { string fieldNames = ORMapping.GetSelectFieldsNameSql<WfProcessInstanceData>("Data"); string sql = string.Format("SELECT {0} FROM WF.PROCESS_INSTANCES WHERE INSTANCE_ID {1}", fieldNames, builder.ToSqlStringWithInOperator(TSqlBuilder.Instance)); DataTable table = DbHelper.RunSqlReturnDS(sql, GetConnectionName()).Tables[0]; result.LoadFromDataView(table.DefaultView); if (fillAssignees) FillAssignees(result); } return result; }
protected override void OnAfterQuery(System.Data.DataView result) { base.OnAfterQuery(result); List <string> resourceIDList = new List <string>(); List <string> processIDList = new List <string>(); foreach (DataRowView rowView in result) { if (!resourceIDList.Contains(rowView["RESOURCE_ID"].ToString())) { resourceIDList.Add(rowView["RESOURCE_ID"].ToString()); } if (!processIDList.Contains(rowView["PROCESS_ID"].ToString())) { processIDList.Add(rowView["PROCESS_ID"].ToString()); } } var atpc = new WfProcessCurrentInfoCollection(); WfProcessCurrentInfoCollection resourceAtpc = WfProcessCurrentInfoAdapter.Instance.Load(resourceIDList.ToArray()); WfProcessCurrentInfoCollection processAtpc = WfProcessCurrentInfoAdapter.Instance.LoadByProcessID(processIDList.ToArray()); resourceAtpc.ForEach(atp => { if (atpc.Exists(p => p.InstanceID == atp.InstanceID) == false) { atpc.Add(atp); } }); processAtpc.ForEach(atp => { if (atpc.Exists(p => p.InstanceID == atp.InstanceID) == false) { atpc.Add(atp); } }); result.Table.Columns.Add("Status"); foreach (DataRowView rowView in result) { var processInfo = atpc.Find(p => p.InstanceID == rowView["PROCESS_ID"].ToString() || p.ResourceID == rowView["RESOURCE_ID"].ToString()); rowView["Status"] = processInfo != null ? (int)processInfo.Status : 0; } }
public void ServerToClient(WfProcessCurrentInfoCollection server, WfClientProcessCurrentInfoCollection client) { server.NullCheck("server"); client.NullCheck("client"); client.Clear(); foreach (WfProcessCurrentInfo processInfo in server) { WfClientProcessCurrentInfo clientInfo = null; this.ServerToClient(processInfo, ref clientInfo); client.Add(clientInfo); } }
private static WfClientProcessCurrentInfoPageQueryResult QueryProcessInfo(QueryCondition qc, int totalCount) { TSqlCommonAdapter adapter = new TSqlCommonAdapter(WfProcessCurrentInfoAdapter.Instance.ConnectionName); WfProcessCurrentInfoCollection processInfo = adapter.SplitPageQuery <WfProcessCurrentInfo, WfProcessCurrentInfoCollection>(qc, ref totalCount); WfClientProcessCurrentInfoCollection clientInfo = new WfClientProcessCurrentInfoCollection(); WfClientProcessCurrentInfoConverter.Instance.ServerToClient(processInfo, clientInfo); WfClientProcessCurrentInfoPageQueryResult result = new WfClientProcessCurrentInfoPageQueryResult(); result.TotalCount = totalCount; result.QueryResult.CopyFrom(clientInfo); return(result); }
public int DispatchCancelBranchProcessesTasks(string ownerSysActivityID, string ownerActivityID, bool cancelAllBranchProcesses) { int result = 0; WfProcessCurrentInfoCollection branchProcessesStatus = WfRuntime.GetProcessStatusByOwnerActivityID(ownerActivityID, string.Empty, false); foreach (WfProcessCurrentInfo processInfo in branchProcessesStatus) { DispatchCancelProcessSysTaskProcessBuilder builder = new DispatchCancelProcessSysTaskProcessBuilder(ownerSysActivityID, processInfo.InstanceID, true, cancelAllBranchProcesses); SysTaskProcess sysTaskProcess = builder.Build(); SysTaskProcessRuntime.StartProcess(sysTaskProcess); result += sysTaskProcess.Activities.Count; } return(result); }
private static UserIMAddressCollection GetAllAssigneesExtendInfo(WfProcessCurrentInfoCollection atpc) { UserIMAddressCollection result = (UserIMAddressCollection)HttpContext.Current.Items[atpc]; if (result == null) { List <string> userIDs = new List <string>(); foreach (WfProcessCurrentInfo atp in atpc) { atp.Assignees.ForEach(u => userIDs.Add(u.User.ID)); } result = UserOUControlSettings.GetConfig().UserOUControlQuery.QueryUsersIMAddress(userIDs.ToArray()); HttpContext.Current.Items[atpc] = result; } return(result); }
private void RenderStatus(WfProcessCurrentInfoCollection atpc, UserIMAddressCollection extendInfo, HtmlTextWriter writer) { WfProcessCurrentInfo atp = null; if (this.ProcessID.IsNotEmpty()) { atp = atpc.Find(a => string.Compare(a.InstanceID, this.ProcessID, true) == 0); } else { if (this.ResourceID.IsNotEmpty()) { atp = atpc.Find(a => string.Compare(a.ResourceID, this.ResourceID, true) == 0); } } if (atp != null) { writer.Write(WebControlUtility.GetControlHtml(CreateStatusDisplayControl(atp, extendInfo))); } }
public void DeleteData(WfProcessCurrentInfoCollection processesInfo, Dictionary<object, object> context) { WfPersistQueueAdapter.Instance.DeletePersistQueue(processesInfo); }
public void DeleteData(WfProcessCurrentInfoCollection processesInfo, Dictionary<object, object> context) { WfProcessCurrentInfoAdapter.Instance.DeleteProcessCurrentAssignees(processesInfo); }
private static UserIMAddressCollection GetAllAssigneesExtendInfo(WfProcessCurrentInfoCollection atpc) { UserIMAddressCollection result = (UserIMAddressCollection)HttpContext.Current.Items[atpc]; if (result == null) { List<string> userIDs = new List<string>(); foreach (WfProcessCurrentInfo atp in atpc) { atp.Assignees.ForEach(u => userIDs.Add(u.User.ID)); } result = UserOUControlSettings.GetConfig().UserOUControlQuery.QueryUsersIMAddress(userIDs.ToArray()); HttpContext.Current.Items[atpc] = result; } return result; }
public void DeleteData(WfProcessCurrentInfoCollection processesInfo, Dictionary <object, object> context) { WfPersistQueueAdapter.Instance.DeletePersistQueue(processesInfo); }
public void DeleteData(WfProcessCurrentInfoCollection processesInfo, Dictionary<object, object> context) { WfProcessDimensionAdapter.Instance.Delete(processesInfo); }
private void RenderStatus(WfProcessCurrentInfoCollection atpc, UserIMAddressCollection extendInfo, HtmlTextWriter writer) { WfProcessCurrentInfo atp = null; if (this.ProcessID.IsNotEmpty()) { atp = atpc.Find(a => string.Compare(a.InstanceID, this.ProcessID, true) == 0); } else { if (this.ResourceID.IsNotEmpty()) atp = atpc.Find(a => string.Compare(a.ResourceID, this.ResourceID, true) == 0); } if (atp != null) writer.Write(WebControlUtility.GetControlHtml(CreateStatusDisplayControl(atp, extendInfo))); }
public void DeletePersistQueue(WfProcessCurrentInfoCollection processesInfo) { processesInfo.NullCheck("processesInfo"); InSqlClauseBuilder builder = new InSqlClauseBuilder("PROCESS_ID"); processesInfo.ForEach(pi => builder.AppendItem(pi.InstanceID)); if (builder.IsEmpty == false) { ORMappingItemCollection mappingInfo = ORMapping.GetMappingInfo(typeof(WfPersistQueue)); string sql = string.Format("DELETE {0} WHERE {0}", mappingInfo.TableName, builder.ToSqlStringWithInOperator(TSqlBuilder.Instance)); DbHelper.RunSql(sql, GetConnectionName()); } }
public void DeleteData(WfProcessCurrentInfoCollection processesInfo, Dictionary <object, object> context) { WfProcessCurrentInfoAdapter.Instance.DeleteProcessCurrentAssignees(processesInfo); }
protected override void OnAfterQuery(System.Data.DataView result) { base.OnAfterQuery(result); List<string> resourceIDList = new List<string>(); List<string> processIDList = new List<string>(); foreach (DataRowView rowView in result) { if (!resourceIDList.Contains(rowView["RESOURCE_ID"].ToString())) resourceIDList.Add(rowView["RESOURCE_ID"].ToString()); if (!processIDList.Contains(rowView["PROCESS_ID"].ToString())) processIDList.Add(rowView["PROCESS_ID"].ToString()); } var atpc = new WfProcessCurrentInfoCollection(); WfProcessCurrentInfoCollection resourceAtpc = WfProcessCurrentInfoAdapter.Instance.Load(resourceIDList.ToArray()); WfProcessCurrentInfoCollection processAtpc = WfProcessCurrentInfoAdapter.Instance.LoadByProcessID(processIDList.ToArray()); resourceAtpc.ForEach(atp => { if (atpc.Exists(p => p.InstanceID == atp.InstanceID) == false) atpc.Add(atp); }); processAtpc.ForEach(atp => { if (atpc.Exists(p => p.InstanceID == atp.InstanceID) == false) atpc.Add(atp); }); result.Table.Columns.Add("Status"); foreach (DataRowView rowView in result) { var processInfo = atpc.Find(p => p.InstanceID == rowView["PROCESS_ID"].ToString() || p.ResourceID == rowView["RESOURCE_ID"].ToString()); rowView["Status"] = processInfo != null ? (int)processInfo.Status : 0; } }
public void DeleteData(WfProcessCurrentInfoCollection processesInfo, Dictionary <object, object> context) { WfProcessDimensionAdapter.Instance.Delete(processesInfo); }
/// <summary> /// 删除流程已活动过的所有的节点 /// </summary> /// <param name="process"></param> public void DeleteProcessActivities(WfProcessCurrentInfoCollection processes) { processes.NullCheck("processes"); InSqlClauseBuilder builder = new InSqlClauseBuilder("PROCESS_ID"); processes.ForEach(p => builder.AppendItem(p.InstanceID)); if (builder.Count > 0) { string sql = string.Format("DELETE WF.PROCESS_CURRENT_ACTIVITIES WHERE PROCESS_ID {0}", builder.AppendTenantCodeSqlClause(typeof(WfProcessCurrentActivity)).ToSqlString(TSqlBuilder.Instance)); DbHelper.RunSql(sql, GetConnectionName()); } }
/// <summary> /// 加载分支流程信息 /// </summary> /// <param name="fillAssignees"></param> /// <param name="activityID"></param> /// <param name="templateKey"></param> /// <param name="includeAborted">是否包含已经作废的流程</param> /// <returns></returns> public WfProcessCurrentInfoCollection LoadByOwnerActivityID(bool fillAssignees, string activityID, string templateKey, bool includeAborted) { activityID.NullCheck("activityID"); WfProcessCurrentInfoCollection result = new WfProcessCurrentInfoCollection(); WhereSqlClauseBuilder builder = new WhereSqlClauseBuilder(); builder.AppendItem("OWNER_ACTIVITY_ID", activityID); if (templateKey.IsNotEmpty()) builder.AppendItem("OWNER_TEMPLATE_KEY", templateKey); if (includeAborted == false) builder.AppendItem("Status", WfProcessStatus.Aborted.ToString(), "<>"); string fieldNames = ORMapping.GetSelectFieldsNameSql<WfProcessCurrentInfo>(); string sql = string.Format("SELECT {0} FROM WF.PROCESS_INSTANCES WHERE {1}", fieldNames, builder.ToSqlString(TSqlBuilder.Instance)); DataTable table = DbHelper.RunSqlReturnDS(sql, GetConnectionName()).Tables[0]; result.LoadFromDataView(table.DefaultView); if (fillAssignees) FillAssignees(result); return result; }
private static void FillAssignees(WfProcessCurrentInfoCollection result) { InSqlClauseBuilder inBuilder = new InSqlClauseBuilder(); result.ForEach(currentInfo => inBuilder.AppendItem(currentInfo.CurrentActivityID)); if (inBuilder.Count > 0) { string sql = string.Format("SELECT * FROM WF.PROCESS_CURRENT_ASSIGNEES WHERE ACTIVITY_ID {0} ORDER BY ID", inBuilder.ToSqlStringWithInOperator(TSqlBuilder.Instance)); DataTable table = DbHelper.RunSqlReturnDS(sql, GetConnectionName()).Tables[0]; DataView assigneeView = new DataView(table); assigneeView.Sort = "ACTIVITY_ID"; foreach (var currentInfo in result) { DataRowView[] rows = assigneeView.FindRows(currentInfo.CurrentActivityID); Array.ForEach(rows, drv => { currentInfo.Assignees.Add(DataRowToAssignee(drv.Row)); }); } } }
/// <summary> /// 删除流程运行时活动节点的Assignees /// </summary> /// <param name="activityID"></param> public void DeleteProcessCurrentAssignees(WfProcessCurrentInfoCollection processesInfo) { InSqlClauseBuilder builder = new InSqlClauseBuilder("ACTIVITY_ID"); processesInfo.ForEach(p => builder.AppendItem(p.CurrentActivityID)); if (builder.Count > 0) { string sql = string.Format("DELETE WF.PROCESS_CURRENT_ASSIGNEES WHERE {0}", builder.ToSqlStringWithInOperator(TSqlBuilder.Instance)); DbHelper.RunSql(sql, GetConnectionName()); } }