/// <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); }
private void DeleteProcesses(Action <WhereSqlClauseBuilder> action) { action.NullCheck("action"); ORMappingItemCollection mapping = ORMapping.GetMappingInfo <WfProcessInstanceData>(); WhereSqlClauseBuilder whereBuilder = new WhereSqlClauseBuilder(); action(whereBuilder); string sql = string.Format("DELETE {0} WHERE {1}", mapping.TableName, whereBuilder.ToSqlString(TSqlBuilder.Instance)); WfProcessCurrentInfoCollection processesInfo = WfProcessCurrentInfoAdapter.Instance.Load(false, action); Dictionary <object, object> context = new Dictionary <object, object>(); using (TransactionScope scope = TransactionScopeFactory.Create()) { DbHelper.RunSql(sql, GetConnectionName()); WfProcessCurrentActivityAdapter.Instance.DeleteProcessActivities(processesInfo); WfRelativeProcessAdapter.Instance.Delete(processesInfo); WfExtraPersistenceSettings.GetConfig().GetPersisters().DeleteData(processesInfo, context); scope.Complete(); } }
/// <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); }
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> /// 得到某个活动的子流程的状态信息,没有流程实例,只是状态信息 /// </summary> /// <param name="activityID"></param> /// <param name="templateKey"></param> /// <param name="includeAborted">是否包含已经作废的流程</param> /// <returns></returns> public static WfProcessCurrentInfoCollection GetProcessStatusByOwnerActivityID(string activityID, string templateKey, bool includeAborted) { activityID.CheckStringIsNullOrEmpty("activityID"); WfProcessCurrentInfoCollection queryResult = null; PerformanceMonitorHelper.GetDefaultMonitor().WriteExecutionDuration(string.Format("LoadProcessByOwnerActivityID({0}-{1})", activityID, templateKey), () => queryResult = WorkflowSettings.GetConfig().GetPersistManager().LoadProcessInfoOwnerActivityID(activityID, templateKey, includeAborted) ); return(queryResult); }
/// <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()); } }
/// <summary> /// 删除流程运行时活动节点的Assignees /// </summary> /// <param name="activityID"></param> public void Delete(WfProcessCurrentInfoCollection processesInfo) { InSqlClauseBuilder builder = new InSqlClauseBuilder("PROCESS_ID"); processesInfo.ForEach(p => builder.AppendItem(p.CurrentActivityID)); if (builder.Count > 0) { string sql = string.Format("DELETE {0} WHERE {1}", GetMappingInfo(new Dictionary <string, object>()).TableName, builder.AppendTenantCodeSqlClause().ToSqlString(TSqlBuilder.Instance)); DbHelper.RunSql(sql, GetConnectionName()); } }
/// <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()); } }
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 Delete(WfProcessCurrentInfoCollection processesInfo) { ORMappingItemCollection mapping = ORMapping.GetMappingInfo <WfRelativeProcess>(); InSqlClauseBuilder items = new InSqlClauseBuilder("PROCESS_ID"); foreach (var process in processesInfo) { items.AppendItem(process.InstanceID); } if (items.Count > 0) { string sql = string.Format("DELETE {0} WHERE {1}", mapping.TableName, items.AppendTenantCodeSqlClause(typeof(WfRelativeProcess)).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); }
public void DeleteData(WfProcessCurrentInfoCollection processesInfo, Dictionary <object, object> context) { this.ForEach(p => p.DeleteData(processesInfo, context)); }
public void DeleteData(WfProcessCurrentInfoCollection processesInfo, Dictionary <object, object> context) { WfRelativeProcessAdapter.Instance.Delete(processesInfo); }