public void Load(K2.WorklistCriteria criteria, ArchiveX ax) { criteria.Platform = ax.GetString(); criteria.ManagedUser = ax.GetString(); criteria.StartIndex = ax.GetInt32(); criteria.Count = ax.GetInt32(); int temp = ax.GetInt32(); if (ax.Version >= 5) { criteria.NoData = ax.GetBool(); } if (temp > 0 && 0 < temp) { int num = temp; do { criteria.AddFilterField((K2.WCLogical)ax.GetByte(), (K2.WCField)ax.GetByte(), ax.GetString(), (K2.WCCompare)ax.GetByte(), ax.GetObject()); num--; }while (num != 0); } int int2 = ax.GetInt32(); if (int2 > 0 && 0 < int2) { int num2 = int2; do { criteria.AddSortField((K2.WCField)ax.GetByte(), ax.GetString(), (K2.WCSortOrder)ax.GetByte()); num2--; }while (num2 != 0); } }
/// <summary> /// 获取当前审批者列表(包括委托) /// </summary> /// <param name="ApproverUser"></param> public static List <ApprovalWorklistItem> GetCurrentUserWorkListItem(string ApproverUser) { Connection connection = GetK2Connection(); try { ImpersonateUser(connection, ApproverUser); List <ApprovalWorklistItem> ApprovalWorklistItemList = new List <ApprovalWorklistItem>(); //获取审批列表添加条件 SourceCode.Workflow.Client.WorklistCriteria criteria = new SourceCode.Workflow.Client.WorklistCriteria(); criteria.Platform = "ASP"; //添加流程文件类别条件 criteria.AddFilterField(SourceCode.Workflow.Client.WCLogical.And, SourceCode.Workflow.Client.WCField.ProcessFolder, SourceCode.Workflow.Client.WCCompare.Equal, GetK2ProcessFolder()); //添加审批者的列表 criteria.AddFilterField(SourceCode.Workflow.Client.WCLogical.And, SourceCode.Workflow.Client.WCField.WorklistItemOwner, "Me", SourceCode.Workflow.Client.WCCompare.Equal, SourceCode.Workflow.Client.WCWorklistItemOwner.Me); //添加审批者委托的列表 //criteria.AddFilterField(SourceCode.Workflow.Client.WCLogical.Or, SourceCode.Workflow.Client.WCField.WorklistItemOwner, "Other", SourceCode.Workflow.Client.WCCompare.Equal, SourceCode.Workflow.Client.WCWorklistItemOwner.Other); Worklist worklist = connection.OpenWorklist(criteria); if (worklist != null && worklist.Count > 0) { foreach (SourceCode.Workflow.Client.WorklistItem item in worklist) { var work = new ApprovalWorklistItem(); work.SN = item.SerialNumber; work.ProcInstID = item.ProcessInstance.ID.ToString(); work.ProcessName = item.ProcessInstance.Name.Substring(4, item.ProcessInstance.Name.Length - 4); work.Folio = item.ProcessInstance.Folio; work.StartDate = item.ActivityInstanceDestination.StartDate.ToString("yyyy-MM-dd HH:mm:ss"); work.CurActivityName = item.ActivityInstanceDestination.Name; work.URL = item.Data; ApprovalWorklistItemList.Add(work); } ApprovalWorklistItemList.OrderByDescending(a => a.StartDate); } return(ApprovalWorklistItemList); } catch (Exception ex) { throw new K2Exception(ex.ToString()); } finally { // 关闭连接 if (connection != null) { connection.Close(); } } }
private WorklistCriteriaDto GetWorklistCriteriaDto(K2.WorklistCriteria worklistCriteria) { var dto = new WorklistCriteriaDto() { Filters = GetFiltersDto(worklistCriteria.Filters), Count = worklistCriteria.Count, ManagedUser = worklistCriteria.ManagedUser, NoData = worklistCriteria.NoData, Platform = worklistCriteria.Platform, StartIndex = worklistCriteria.StartIndex }; return(dto); }
private string BuildCriteria(K2.WorklistCriteria criteria, bool reverse) { if (criteria == null && criteria.Filters.Count() > 0) { return(string.Empty); } string filter = ""; foreach (K2.WCFilter f in criteria.Filters) { filter += string.Format("{0}{1}{2}", f.Field, f.Logical, f.Value); } return(string.Empty); }
public WorklistDto GetTaskByProcInstId(int procInstId) { try { using (var workflowClient = _client.GetWorkflowClient()) { K2.WorklistCriteria wlc = new K2.WorklistCriteria(); wlc.AddFilterField(K2.WCField.ProcessID, K2.WCCompare.Equal, procInstId); var results = workflowClient.OpenWorklist(wlc); if (results.TotalCount > 0) { var workListItem = results[0]; if (workListItem.Status == K2.WorklistStatus.Allocated) { IK2Server blackpearServer = new K2Server(); bool isDone = blackpearServer.ReleaseWorklistItem(workListItem.SerialNumber); if (isDone) { results = workflowClient.OpenWorklist(wlc); workListItem = results[0]; } } var workListItemDto = new WorklistDto() { Serial = workListItem.SerialNumber, AllocatedUser = workListItem.AllocatedUser, Data = workListItem.Data, Folio = workListItem.ProcessInstance.Folio, ActivityName = workListItem.ActivityInstanceDestination.Name, Status = ((K2.WorklistStatus)workListItem.Status).ToString() }; return(workListItemDto); } } return(null); } catch (Exception e) { throw new Exception(e.Message); } }
public List<TasksItem> GetTasksItems(string k2User, int? page, int? pageSize, out int totalCount, string procInstID = null, string folio = null, DateTime? startDate = null, DateTime? endDate = null, string[] processNames = null, Dictionary<string, string> sorting = null) { k2User = K2User.ApplySecurityLabel(k2User); totalCount = 0; Client.WorklistCriteria filter = new Client.WorklistCriteria(); filter.Platform = "ASP"; filter.Count = (pageSize == null || pageSize <= 0) ? -1 : pageSize.Value; filter.StartIndex = (page == null || page <= 0) ? 0 : (page.Value - 1) * filter.Count; filter.AddFilterField(Client.WCField.WorklistItemStatus, Client.WCCompare.Equal, Client.WorklistStatus.Available); filter.AddFilterField(Client.WCLogical.Or, Client.WCField.WorklistItemStatus, Client.WCCompare.Equal, Client.WorklistStatus.Open); filter.AddFilterField(Client.WCLogical.And, Client.WCField.WorklistItemOwner, "Me", Client.WCCompare.Equal, Client.WCWorklistItemOwner.Me); //This will return all the user’s items filter.AddFilterField(Client.WCLogical.Or, Client.WCField.WorklistItemOwner, "Other", Client.WCCompare.Equal, Client.WCWorklistItemOwner.Other); //This will return all the user’s shared items if (startDate != null) filter.AddFilterField(Client.WCLogical.And, Client.WCField.ProcessStartDate, Client.WCCompare.GreaterOrEqual, startDate); if (endDate != null) filter.AddFilterField(Client.WCLogical.And, Client.WCField.ProcessStartDate, Client.WCCompare.LessOrEqual, endDate); if (!string.IsNullOrEmpty(folio)) filter.AddFilterField(Client.WCLogical.And, Client.WCField.ProcessFolio, Client.WCCompare.Like, string.Format("%{0}%", folio)); if (!string.IsNullOrEmpty(procInstID)) filter.AddFilterField(Client.WCLogical.And, Client.WCField.ProcessID, Client.WCCompare.Equal, procInstID); if (processNames != null && processNames.Any()) { int index = 0; foreach (var processName in processNames) { index++; if (index == 1) filter.AddFilterField(Client.WCLogical.And, Client.WCField.ProcessFullName, Client.WCCompare.Equal, processName); else filter.AddFilterField(Client.WCLogical.Or, Client.WCField.ProcessFullName, Client.WCCompare.Equal, processName); } } if (sorting == null || !sorting.Any()) filter.AddSortField(Client.WCField.EventStartDate, Client.WCSortOrder.Descending); else { foreach (var field in sorting.Keys) { filter.AddSortField((Client.WCField)Enum.Parse(typeof(Client.WCField), field), (Client.WCSortOrder)Enum.Parse(typeof(Client.WCSortOrder), sorting[field])); } } var worklit = Runtime.Worklist.OpenWorklist(_k2ConnectionString, k2User, new ArrayList(), filter, false, false, 0, null); List<TasksItem> tasks = new List<TasksItem>(); foreach (Client.WorklistItem item in worklit) { Actions actions = new Actions(); foreach (Client.Action act in item.Actions) { var action = new ApproveAction(); action.Name = act.Name; action.MetaData = act.MetaData; actions.Add(action); } TasksItem task = new TasksItem() { ProcInstID = item.ProcessInstance.ID, ActivityName = item.ActivityInstanceDestination.Name, Destination = K2User.DelApplySecurityLabel(k2User), Folio = item.ProcessInstance.Folio, Originator = item.ProcessInstance.Originator.FQN, //OriginatorDisName = item.ProcessInstance.Originator.DisplayName, SN = item.SerialNumber, StartDate = item.ProcessInstance.StartDate.ToString("yyyy-MM-dd HH:mm"), SharedUser = item.AllocatedUser.Equals(k2User, StringComparison.OrdinalIgnoreCase) ? null : K2User.DelApplySecurityLabel(item.AllocatedUser), //判断是否SharedUser Actions = actions }; tasks.Add(task); } return tasks; }
public List<WorklistItem> GetWorklistItems(string k2User, int? page, int? pageSize, out int totalCount, string sn = null, string folio = null, DateTime? startDate = null, DateTime? endDate = null, string[] processNames = null, Dictionary<string, string> sorting = null) { totalCount = 0; Client.WorklistCriteria filter = new Client.WorklistCriteria(); filter.Platform = "ASP"; filter.Count = (pageSize == null || pageSize <= 0) ? -1 : pageSize.Value; filter.StartIndex = (page == null || page <= 0) ? 0 : (page.Value - 1) * filter.Count; filter.AddFilterField(Client.WCField.WorklistItemStatus, Client.WCCompare.Equal, Client.WorklistStatus.Available); filter.AddFilterField(Client.WCLogical.Or, Client.WCField.WorklistItemStatus, Client.WCCompare.Equal, Client.WorklistStatus.Open); filter.AddFilterField(Client.WCLogical.And, Client.WCField.WorklistItemOwner, "Me", Client.WCCompare.Equal, Client.WCWorklistItemOwner.Me); //This will return all the user’s items filter.AddFilterField(Client.WCLogical.Or, Client.WCField.WorklistItemOwner, "Other", Client.WCCompare.Equal, Client.WCWorklistItemOwner.Other); //This will return all the user’s shared items if (startDate != null) filter.AddFilterField(Client.WCLogical.And, Client.WCField.ProcessStartDate, Client.WCCompare.GreaterOrEqual, startDate); if (endDate != null) filter.AddFilterField(Client.WCLogical.And, Client.WCField.ProcessStartDate, Client.WCCompare.LessOrEqual, endDate); if (!string.IsNullOrEmpty(folio)) filter.AddFilterField(Client.WCLogical.And, Client.WCField.ProcessFolio, Client.WCCompare.Like, string.Format("%{0}%", folio)); if (!string.IsNullOrEmpty(sn)) filter.AddFilterField(Client.WCLogical.And, Client.WCField.SerialNumber, Client.WCCompare.Equal, sn); if (processNames != null && processNames.Any()) { int index = 0; foreach (var processName in processNames) { index++; if (index == 1) filter.AddFilterField(Client.WCLogical.And, Client.WCField.ProcessFullName, Client.WCCompare.Equal, processName); else filter.AddFilterField(Client.WCLogical.Or, Client.WCField.ProcessFullName, Client.WCCompare.Equal, processName); } } if (sorting == null || !sorting.Any()) filter.AddSortField(Client.WCField.EventStartDate, Client.WCSortOrder.Descending); else { foreach (var field in sorting.Keys) { filter.AddSortField((Client.WCField)Enum.Parse(typeof(Client.WCField), field), (Client.WCSortOrder)Enum.Parse(typeof(Client.WCSortOrder), sorting[field])); } } var worklit = Runtime.Worklist.OpenWorklist(_k2ConnectionString, k2User, new ArrayList(), filter, false, false, 0, null); totalCount = worklit.TotalCount; return this.ToWorklistItems(k2User, worklit, true, false, true); }
/// <summary> /// 办理流程 /// </summary> /// <param name="instance">流程实例</param> /// <param name="result">处理结果</param> /// <param name="listNextUsers">分配办理人员列表</param> /// <param name="tobeReadUsers">待阅人员</param> /// <remarks></remarks> /// <returns></returns> public override bool RunWorkflow(WorkflowInstance instance, ApproveResult result, IList<IUser> listNextUsers, IList<IUser> tobeReadUsers) { var loginUser = SecurityContext.User; var k2ProcInstId = int.Parse(instance.DataLocator); var actionName = result.Choice; using (Connection conn = ConnectHostServer()) { conn.ImpersonateUser(loginUser.LoginId); var filter = new WorklistCriteria(); filter.AddFilterField(WCField.ProcessID, WCCompare.Equal, k2ProcInstId); var k2Worklist = conn.OpenWorklist(filter); if (k2Worklist.Count == 0) throw new K2WorklistNotFoundException(k2ProcInstId, loginUser.LoginId); var worklist = conn.OpenWorklistItem(k2Worklist.Cast<WorklistItem>().First().SerialNumber); // 增加下一环节多个负责人 var doc = new System.Xml.XmlDocument(); var root = doc.CreateElement("UserAccounts"); doc.AppendChild(root); foreach (var approver in listNextUsers) { var userNode = doc.CreateElement("Account"); userNode.InnerText = approver.LoginId; root.AppendChild(userNode); } worklist.ProcessInstance.XmlFields["处理人"].Value = doc.OuterXml; if (!worklist.Actions.Contains(actionName)) throw new ActionNotFoundException(k2ProcInstId, actionName); worklist.Actions[actionName].Execute(true); if (worklist.Status == WorklistStatus.Completed) { return true; } } return false; }