Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 2
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();
                }
            }
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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);
            }
        }
Ejemplo n.º 6
0
        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;
        }
Ejemplo n.º 7
0
        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);
        }
Ejemplo n.º 8
0
        /// <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;
        }