Ejemplo n.º 1
0
        private void GetWorklist()
        {
            ServiceObject serviceObject = base.ServiceBroker.Service.ServiceObjects[0];

            serviceObject.Properties.InitResultTable();
            DataTable results = base.ServiceBroker.ServicePackage.ResultTable;

            using (Connection k2Con = base.ServiceBroker.K2Connection.GetWorkflowClientConnection())
            {
                WorklistCriteria wc = new WorklistCriteria();
                wc.Platform = base.Platform;
                AddFieldFilters(wc);
                if (base.GetBoolProperty(Constants.SOProperties.ClientWorklist.IncludeShared) == true)
                {
                    wc.AddFilterField(WCLogical.Or, WCField.WorklistItemOwner, "Me", WCCompare.Equal, WCWorklistItemOwner.Me);
                    wc.AddFilterField(WCLogical.Or, WCField.WorklistItemOwner, "Other", WCCompare.Equal, WCWorklistItemOwner.Other);
                }
                if (base.GetBoolProperty(Constants.SOProperties.ClientWorklist.ExcludeAllocated) == true)
                {
                    wc.AddFilterField(WCLogical.And, WCField.WorklistItemStatus, WCCompare.NotEqual, WorklistStatus.Allocated);
                }
                Worklist wl = k2Con.OpenWorklist(wc);

                foreach (WorklistItem wli in wl)
                {
                    AddRowToDataTable(results, wli);
                }

                k2Con.Close();
            }
        }
Ejemplo n.º 2
0
        public WorklistCriteria ToApi()
        {
            WorklistCriteria worklistCriteria = new WorklistCriteria();

            worklistCriteria.Count      = (int)this.Count;
            worklistCriteria.StartIndex = (int)this.StartIndex;
            if (worklistCriteria.Count == 0)
            {
                worklistCriteria.Count = -1;
            }
            worklistCriteria.ManagedUser = this.ManagedUser;
            worklistCriteria.NoData      = true;
            worklistCriteria.Platform    = this.Platform;
            foreach (CriteriaFilter current in this.Filters)
            {
                object obj = current.Value;
                obj = K2Convert.FromString(current.Value, (DataType)current.ValueType);
                if (obj is string && (current.Comparison == CriteriaComparison.Like || current.Comparison == CriteriaComparison.NotLike))
                {
                    obj = "*" + (string)obj + "*";
                }
                worklistCriteria.AddFilterField((WCLogical)current.Logical, (WCField)current.Field, current.SubField, (WCCompare)current.Comparison, obj);
            }
            foreach (CriteriaSort current2 in this.Sorts)
            {
                worklistCriteria.AddSortField((WCField)current2.Field, current2.SubField, (WCSortOrder)current2.SortOrder);
            }
            return(worklistCriteria);
        }
Ejemplo n.º 3
0
 private void AddFieldFilters(WorklistCriteria wc)
 {
     foreach (KeyValuePair <WCField, string> filterField in PropertiesToWCFields)
     {
         Property p = base.ServiceBroker.Service.ServiceObjects[0].Properties[filterField.Value];
         if (p != null && p.Value != null)
         {
             wc.AddFilterField(filterField.Key, WCCompare.Equal, p.Value);
         }
     }
 }
Ejemplo n.º 4
0
        public WorklistCriteriaDto GetWorklistCriteriaDto(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.º 5
0
        /// <summary>
        /// Configure worklist criteria for specific process name and activity name
        /// </summary>
        /// <param name="fullProcessName">The full path of workflow</param>
        /// <param name="activityName">The activity name of workflow</param>
        /// <returns>The worklist criteria</returns>
        public WorklistCriteria configureWorklistCriteria(string fullProcessName, string activityName)
        {
            WorklistCriteria worklistCriteria = new WorklistCriteria();
            WCField          field            = (WCField)Enum.Parse(typeof(WCField), "ProcessFullName");
            WCCompare        compare          = (WCCompare)Enum.Parse(typeof(WCCompare), "Equal");

            worklistCriteria.AddFilterField(field, compare, fullProcessName);
            WCField   field2   = (WCField)Enum.Parse(typeof(WCField), "ActivityName");
            WCCompare compare2 = (WCCompare)Enum.Parse(typeof(WCCompare), "Equal");
            WCLogical logical  = (WCLogical)Enum.Parse(typeof(WCLogical), "And");

            worklistCriteria.AddFilterField(logical, field2, compare2, activityName);
            return(worklistCriteria);
        }
Ejemplo n.º 6
0
        public WorkflowItem GetWorkflowItemBySN(string serialNumber, String impersonateUser)
        {
            // if the serial number is null or empty we do not want to do any of this
            if (!string.IsNullOrEmpty(serialNumber))
            {
                using (var k2Connection = new Connection())
                {
                    ConnectionSetup k2Setup = new ConnectionSetup();
                    k2Setup.ConnectionString = Properties.Settings.Default.WorkflowServerConnectionString;

                    k2Connection.Open(k2Setup);

                    if (!String.IsNullOrEmpty(impersonateUser))
                    {
                        k2Connection.ImpersonateUser(impersonateUser);
                    }

                    var workCriteria = new WorklistCriteria {
                        NoData = false, Platform = "ASP"
                    };

                    if (!string.IsNullOrEmpty(serialNumber))
                    {
                        workCriteria.AddFilterField(WCField.SerialNumber, WCCompare.Equal, serialNumber);
                    }

                    Worklist k2Worklist = k2Connection.OpenWorklist(workCriteria);

                    WorkflowItem retItem = null;

                    foreach (WorklistItem item in k2Worklist)
                    {
                        retItem = new WorkflowItem(item);
                    }

                    // now that we have the workflow item get the count of the related documents
                    if ((retItem != null) && (!string.IsNullOrEmpty(retItem.PolicyID)))
                    {
                        using (DocumentService.DocumentServiceClient client = new DocumentService.DocumentServiceClient())
                        {
                            retItem.RelatedDocumentCount = client.GetDocumentsCountForPolicy(retItem.PolicyID);
                        }
                    }

                    return(retItem);
                }
            }
            return(null);
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Get worklist items by worklist filter criterias
        /// </summary>
        /// <param name="wlc">The worklist criteria</param>
        /// <returns>The collection of worklist items</returns>
        public WorklistItemCollection OpenWorklist(WorklistCriteria wlc)
        {
            WorklistItemCollection result;

            try {
                using (Connection workflowClient = this.GetWorkflowClient()) {
                    result = WorklistItemCollection.FromApi(workflowClient.OpenWorklist(wlc));
                }
            } catch (UnauthorizedAccessException) {
                throw;
            } catch (SmartException ex) {
                throw ex;
            }
            return(result);
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Get worklist item by worklist filter criterias
        /// </summary>
        /// <param name="filter">The worklist filter criterias</param>
        /// <param name="actDataField">The activity data field</param>
        /// <param name="actXmlField">The activity xml field</param>
        /// <param name="piDataField">The pi data field</param>
        /// <param name="piXmlField">The pi xml field</param>
        /// <returns></returns>
        public WorklistItemCollection OpenWorklistFiltered(Criteria filter, bool actDataField, bool actXmlField, bool piDataField, bool piXmlField)
        {
            WorklistItemCollection result;

            try {
                using (Connection workflowClient = this.GetWorkflowClient()) {
                    WorklistCriteria criteria = filter.ToApi();
                    result = WorklistItemCollection.FromApi(workflowClient.OpenWorklist(criteria));
                }
            } catch (System.UnauthorizedAccessException ex) {
                throw ex;
            } catch (System.Exception ex) {
                throw ex;
            }
            return(result);
        }
Ejemplo n.º 9
0
        private WorklistItem GetProcInst(int proctInstId, int actDestInstId = 0)
        {
            string serialNumber = string.Format("{0}_{1}", proctInstId.ToString(), actDestInstId.ToString());

            var K2Crit = new WorklistCriteria();

            K2Crit.NoData   = true;  //faster, does not return the data for each item
            K2Crit.Platform = "ASP"; //helps when multiple platform are used

            K2Crit.AddFilterField(
                WCLogical.Or, WCField.WorklistItemOwner, "Me",
                WCCompare.Equal, WCWorklistItemOwner.Me
                );

            K2Crit.AddFilterField(
                WCLogical.Or, WCField.WorklistItemOwner, "Other",
                WCCompare.Equal, WCWorklistItemOwner.Other
                );

            K2Crit.AddFilterField(
                WCLogical.And, WCField.SerialNumber,
                WCCompare.Equal, string.Format("{0}_{1}", proctInstId.ToString(), actDestInstId.ToString())
                );

            var K2WList = _connection.OpenWorklist(K2Crit);

            foreach (WorklistItem K2WLItem in K2WList)
            {
                if (actDestInstId > 0)
                {
                    if (K2WLItem.ProcessInstance.ID == proctInstId)
                    {
                        return(K2WLItem);
                    }
                }
                else
                {
                    if (K2WLItem.ProcessInstance.ID == proctInstId && K2WLItem.AllocatedUser == ManagedUser)
                    {
                        return(K2WLItem);
                    }
                }
            }
            return(null);
        }
Ejemplo n.º 10
0
        public Worklist GetWorklistItems(String searchTerm, Int32 skip, Int32 take, Dictionary <WCField, WCSortOrder> sorts, String impersonateUser)
        {
            using (var k2Connection = new Connection())
            {
                ConnectionSetup k2Setup = new ConnectionSetup();
                k2Setup.ConnectionString = Properties.Settings.Default.WorkflowServerConnectionString;

                k2Connection.Open(k2Setup);

                if (!String.IsNullOrEmpty(impersonateUser))
                {
                    k2Connection.ImpersonateUser("K2:" + impersonateUser);
                }

                var workCriteria = new WorklistCriteria {
                    NoData = true, Platform = "ASP"
                };

                if (!string.IsNullOrEmpty(searchTerm))
                {
                    String searchTermFormat = String.Format("%{0}%", searchTerm);
                    workCriteria.AddFilterField(WCLogical.StartBracket, WCField.None, WCCompare.Equal, null);           //  (
                    workCriteria.AddFilterField(WCField.ActivityName, WCCompare.Like, searchTermFormat);                //  ...
                    workCriteria.AddFilterField(WCLogical.Or, WCField.EventName, WCCompare.Like, searchTermFormat);     //  OR ...
                    workCriteria.AddFilterField(WCLogical.Or, WCField.ProcessFolio, WCCompare.Like, searchTermFormat);  //  OR ...
                    workCriteria.AddFilterField(WCLogical.EndBracket, WCField.None, WCCompare.Equal, null);             //  )
                }

                //  No AND required - seems like bug - this bit gets put in a different bit of the query K2 creates.
                //  Hide allocated items like the SharePoint K2 worlist does by default.
                workCriteria.AddFilterField(WCField.WorklistItemStatus, WCCompare.NotEqual, WorklistStatus.Allocated);

                workCriteria.StartIndex = skip;
                workCriteria.Count      = take;

                foreach (KeyValuePair <WCField, WCSortOrder> sort in sorts)
                {
                    workCriteria.AddSortField(sort.Key, sort.Value);
                }

                Worklist k2Worklist = k2Connection.OpenWorklist(workCriteria);

                return(k2Worklist);
            }
        }
        internal DataTable GetWorklistItems(Dictionary <string, object> properties, Dictionary <string, object> parameters)
        {
            try
            {
                DataTable        dt       = GetResultTable();
                WorklistCriteria criteria = GetWorklistCriteria(properties);

                ConnectionSetup cnnSetup = new ConnectionSetup();
                cnnSetup.ConnectionString = this._execSettings.ConnectionString;

                using (Connection cnn = new Connection())
                {
                    cnn.Open(cnnSetup);

                    if (this._execSettings.UseImpersonation)
                    {
                        cnn.ImpersonateUser(this._execSettings.ImpersonateUser);
                    }

                    Worklist worklist;
                    if ((criteria != null) && (criteria.Filters.GetLength(0) > 0))
                    {
                        worklist = cnn.OpenWorklist(criteria);
                    }
                    else
                    {
                        worklist = cnn.OpenWorklist();
                    }

                    foreach (WorklistItem item in worklist)
                    {
                        DataRow row = dt.NewRow();
                        PopulateDataRow(item, row);
                        dt.Rows.Add(row);
                    }
                    cnn.Close();
                }
                return(dt);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        private WorklistCriteria GetWorklistCriteria(Dictionary <string, object> properties)
        {
            WorklistCriteria criteria = new WorklistCriteria();

            criteria.AddFilterField(WCLogical.Or, WCField.WorklistItemOwner, "Me", WCCompare.Equal, WCWorklistItemOwner.Me);
            criteria.AddFilterField(WCLogical.Or, WCField.WorklistItemOwner, "Other", WCCompare.Equal, WCWorklistItemOwner.Other);

            foreach (KeyValuePair <string, object> property in properties)
            {
                switch (property.Key)
                {
                case "Status":
                    criteria.AddFilterField(WCLogical.And, WCField.WorklistItemStatus, WCCompare.Equal, property.Value);
                    break;

                case "ActivityName":
                    criteria.AddFilterField(WCLogical.And, WCField.ActivityName, WCCompare.Equal, property.Value);
                    break;

                case "ProcessName":
                    criteria.AddFilterField(WCLogical.And, WCField.ProcessName, WCCompare.Equal, property.Value);
                    break;

                case "ProcessFullName":
                    criteria.AddFilterField(WCLogical.And, WCField.ProcessFullName, WCCompare.Equal, property.Value);
                    break;

                case "Folio":
                    criteria.AddFilterField(WCLogical.And, WCField.ProcessFolio, WCCompare.Equal, property.Value);
                    break;

                case "EventInstanceName":
                    criteria.AddFilterField(WCLogical.And, WCField.EventName, WCCompare.Equal, property.Value);
                    break;

                case "Priority":
                    criteria.AddFilterField(WCLogical.And, WCField.ActivityPriority, WCCompare.Equal, property.Value);
                    break;
                }
            }

            return(criteria);
        }
Ejemplo n.º 13
0
        public Worklist GetWorklistItems(String searchTerm, Int32 skip, Int32 take, Dictionary<WCField, WCSortOrder> sorts, String impersonateUser)
        {
            using (var k2Connection = new Connection())
            {
                ConnectionSetup k2Setup = new ConnectionSetup();
                k2Setup.ConnectionString = Properties.Settings.Default.WorkflowServerConnectionString;

                k2Connection.Open(k2Setup);

                if (!String.IsNullOrEmpty(impersonateUser))
                    k2Connection.ImpersonateUser("K2:" + impersonateUser);

                var workCriteria = new WorklistCriteria { NoData = true, Platform = "ASP" };                                                
                                
                if (!string.IsNullOrEmpty(searchTerm))
                {
                    String searchTermFormat = String.Format("%{0}%", searchTerm);
                    //String searchTermFormat = String.Format("% / % / % / % / %{0}%", searchTerm);
                    workCriteria.AddFilterField(WCLogical.StartBracket, WCField.None, WCCompare.Equal, null);           //  (
                    workCriteria.AddFilterField(WCField.ActivityName, WCCompare.Like, searchTermFormat);                //  ...
                    workCriteria.AddFilterField(WCLogical.Or, WCField.EventName, WCCompare.Like, searchTermFormat);     //  OR ...
                    workCriteria.AddFilterField(WCLogical.Or, WCField.ProcessFolio, WCCompare.Like, searchTermFormat);  //  OR ...
                    workCriteria.AddFilterField(WCLogical.EndBracket, WCField.None, WCCompare.Equal, null);             //  )
                    //workCriteria.AddFilterField(WCField.ProcessFolio, WCCompare.Like, searchTermFormat);
                }

                //  No AND required - seems like bug - this bit gets put in a different bit of the query K2 creates.
                //  Hide allocated items like the SharePoint K2 worlist does by default.
                workCriteria.AddFilterField(WCField.WorklistItemStatus, WCCompare.NotEqual, WorklistStatus.Allocated);                 

                workCriteria.StartIndex = skip;
                workCriteria.Count = take;                
                
                foreach (KeyValuePair<WCField,WCSortOrder> sort in sorts)
                {
                    workCriteria.AddSortField(sort.Key, sort.Value);                                        
                }

                Worklist k2Worklist = k2Connection.OpenWorklist(workCriteria);      

                return k2Worklist;
            }
        }
Ejemplo n.º 14
0
        private void ActionWorklistitem()
        {
            string processInstanceId = base.GetStringProperty(Constants.SOProperties.ClientWorklist.ProcessId, true);
            string activityName      = base.GetStringProperty(Constants.SOProperties.ClientWorklist.ActivityName, true);
            string actionName        = base.GetStringProperty(Constants.SOProperties.ClientWorklist.ActionName, true);


            using (Connection k2Con = new Connection())
            {
                k2Con.Open(base.K2ClientConnectionSetup);

                WorklistCriteria wc = new WorklistCriteria();
                wc.Platform = base.Platform;
                wc.AddFilterField(WCField.ProcessID, WCCompare.Equal, processInstanceId);
                wc.AddFilterField(WCLogical.And, WCField.ActivityName, WCCompare.Equal, activityName);
                Worklist wl = k2Con.OpenWorklist(wc);

                if (wl.TotalCount == 0)
                {
                    throw new ApplicationException("No worklist item found with those criteria.");
                }

                if (wl.TotalCount > 1)
                {
                    throw new ApplicationException("More than one worklist item found with those criteria.");
                }


                foreach (SourceCode.Workflow.Client.Action a in wl[0].Actions)
                {
                    if (string.Compare(a.Name, actionName, true) == 0)
                    {
                        a.Execute();
                        k2Con.Close();
                        return;
                    }
                }
                k2Con.Close();

                throw new ApplicationException("Failed to find the action specified. Worklist item was found.");
            }
        }
Ejemplo n.º 15
0
        /// <summary>
        /// Get work list item from k2.
        /// </summary>
        /// <param name="fromUser">The allocated user.</param>
        /// <returns></returns>
        public List <TaskViewModel> GetWorkList(string fromUser, int retry = 0)
        {
            List <TaskViewModel> result = new List <TaskViewModel>();
            var processFolder           = ConfigurationManager.AppSettings[ConstantValueService.K2_PROCESSFODLER];

            try
            {
                Worklist taskList;

                WorklistCriteria worklistCriteria = new WorklistCriteria();
                worklistCriteria.AddFilterField(0, WCCompare.NotEqual, 2);
                worklistCriteria.AddFilterField(WCField.ProcessFolder, WCCompare.Equal, processFolder);

                //For Share Worklist Items
                worklistCriteria.AddFilterField(WCLogical.AndBracket, WCField.WorklistItemOwner,
                                                WCWorklistItemOwner.Me.ToString(), WCCompare.Equal, 0);
                worklistCriteria.AddFilterField(WCLogical.Or, WCField.WorklistItemOwner,
                                                WCWorklistItemOwner.Other.ToString(), WCCompare.Equal, 0);

                taskList = _connection.OpenWorklist(worklistCriteria);
                result   = this.ConvertTaskList(taskList);

                if (!string.IsNullOrEmpty(fromUser))
                {
                    var formUserK2Format = ConstantValueService.K2_PREFIX + fromUser;
                    result = result.Where(m => string.Equals(m.AllocatedUser, formUserK2Format, StringComparison.OrdinalIgnoreCase)).ToList();
                }
            }
            catch (Exception ex)
            {
                if (retry >= 2)
                {
                    throw ex;
                }
                System.Threading.Thread.Sleep(50);
                this.ReConnection();
                result = this.GetWorkList(fromUser, ++retry);
            }

            return(result);
        }
Ejemplo n.º 16
0
        private void ActionWorklistitem()
        {
            string processInstanceId = base.GetStringProperty(Constants.SOProperties.ClientWorklist.ProcessId, true);
            string activityName      = base.GetStringProperty(Constants.SOProperties.ClientWorklist.ActivityName, true);
            string actionName        = base.GetStringProperty(Constants.SOProperties.ClientWorklist.ActionName, true);



            using (Connection k2Con = this.ServiceBroker.K2Connection.GetWorkflowClientConnection())
            {
                WorklistCriteria wc = new WorklistCriteria();
                wc.Platform = base.Platform;
                wc.AddFilterField(WCField.ProcessID, WCCompare.Equal, processInstanceId);
                wc.AddFilterField(WCLogical.And, WCField.ActivityName, WCCompare.Equal, activityName);
                Worklist wl = k2Con.OpenWorklist(wc);

                if (wl.TotalCount == 0)
                {
                    throw new ApplicationException(Resources.NoWorklistItemFound);
                }

                if (wl.TotalCount > 1)
                {
                    throw new ApplicationException(Resources.MoreThanOneWorklistItemFound);
                }


                foreach (SourceCode.Workflow.Client.Action a in wl[0].Actions)
                {
                    if (string.Compare(a.Name, actionName, true) == 0)
                    {
                        a.Execute();
                        k2Con.Close();
                        return;
                    }
                }
                k2Con.Close();

                throw new ApplicationException(Resources.FailedToFindTheAction);
            }
        }
Ejemplo n.º 17
0
        /// <summary>
        /// Get worklist items by worklist filter criterias
        /// </summary>
        /// <returns>The collection of worklist items</returns>
        public WorklistItemCollection OpenWorklist()
        {
            WorklistItemCollection result;

            try {
                using (Connection workflowClient = this.GetWorkflowClient()) {
                    WorklistCriteria criteria = new WorklistCriteria();
                    criteria.Platform = "ASP";
                    criteria.NoData   = true;
                    criteria.AddFilterField(WCLogical.Or, WCField.WorklistItemOwner, "Me", WCCompare.Equal, WCWorklistItemOwner.Me);
                    criteria.AddFilterField(WCLogical.Or, WCField.WorklistItemOwner, "Other", WCCompare.Equal, WCWorklistItemOwner.Other);
                    criteria.AddSortField(WCField.EventStartDate, WCSortOrder.Descending);
                    result = OpenWorklist(criteria);
                }
            } catch (UnauthorizedAccessException) {
                throw;
            } catch (SmartException ex) {
                throw ex;
            }
            return(result);
        }
Ejemplo n.º 18
0
        public string GetSharedUsersBySerialNumber(string serialNumber)
        {
            WorklistItemCollection result;

            try {
                using (Connection workflowClient = this.GetWorkflowClient()) {
                    WorklistCriteria criteria = new WorklistCriteria();
                    criteria.Platform = "ASP";
                    criteria.NoData   = true;
                    criteria.AddFilterField(WCLogical.Or, WCField.WorklistItemOwner, "Me", WCCompare.Equal, WCWorklistItemOwner.Me);
                    criteria.AddFilterField(WCLogical.Or, WCField.WorklistItemOwner, "Other", WCCompare.Equal, WCWorklistItemOwner.Other);
                    criteria.AddFilterField(WCLogical.And, WCField.SerialNumber, WCCompare.Equal, serialNumber);
                    result = OpenWorklist(criteria);
                }
            } catch (UnauthorizedAccessException) {
                throw;
            } catch (SmartException ex) {
                throw ex;
            }
            return(result.Count > 0 ? result[0].AllocatedUser: null);
        }
        //opening worklist sample
        public static void OpenWorklistSamples()
        {
            //you must open a K2 connection first. We will wrap the K2 connection into a using statement to ensure that it is closed
            using (Connection K2Conn = new Connection())
            {
                K2Conn.Open("[servername]");
                //retrieve the entire worklist for the current user
                Worklist K2WList = K2Conn.OpenWorklist();

                //or retrieve the worklist for a specific platform ("platform" not really used that often anymore). The default platform for worklist items is ASP
                Worklist K2WList1 = K2Conn.OpenWorklist("ASP");

                //or retrieve the worklist for a specific platform and a user managed by the current user.
                //This requires that the reporting structure is set up correctly in the underlying user provider (Active Directory or custom user manager)
                Worklist K2WList2 = K2Conn.OpenWorklist("ASP", @"[domain\username]");

                //you can also retrieve the worklist with a criteria filter. OpenWorklist can be an expensive operation, so use criteria to perform server-side filtering of the worklist
                //for large worklists you should always use criteria to reduce the size of the worklist that is returned to the client
                WorklistCriteria K2Crit = new WorklistCriteria();
                //you can set up various combinations of filters and sorts in the criteria object. Refer to the product documentation for more samples
                //here, we are filtering for all workflows for the project K2Learning where the priority equals 1. We want to sort the task list by workflow start date
                K2Crit.AddFilterField(WCField.ProcessFolder, WCCompare.Equal, "[FolderName]");
                K2Crit.AddFilterField(WCLogical.And, WCField.ProcessPriority, WCCompare.Equal, 1);
                K2Crit.AddSortField(WCField.ProcessStartDate, WCSortOrder.Descending);
                Worklist K2WList3 = K2Conn.OpenWorklist(K2Crit);

                int numberOfTasks = K2WList.TotalCount;

                //once you have retrieved the worklist, you can iterate over the worklist items in the worklist
                foreach (WorklistItem K2WLItem in K2WList)
                {
                    string serialNumber = K2WLItem.SerialNumber;
                    string status       = K2WLItem.Status.ToString();
                    //to access more information, drill down into the relevant object contained in the worklist item
                    string Folio = K2WLItem.ProcessInstance.Folio;
                }
            }
        }
        /// <summary>
        /// Get work list item from k2.
        /// </summary>
        /// <param name="fromUser">The allocated user.</param>
        /// <returns></returns>
        public List <TaskViewModel> GetWorkList(string fromUser, int retry = 0)
        {
            List <TaskViewModel> result = new List <TaskViewModel>();

            Policy.Handle <Exception>()
            .WaitAndRetry(2,
                          retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)),
                          (exception, timeSpan, retryCount, context) =>
            {
                this.ReConnection();
            }).Execute(() =>
            {
                var processFolder = ConfigurationManager.AppSettings[ConstantValueService.K2_PROCESSFODLER];

                Worklist taskList;

                WorklistCriteria worklistCriteria = new WorklistCriteria();
                worklistCriteria.AddFilterField(0, WCCompare.NotEqual, 2);
                worklistCriteria.AddFilterField(WCField.ProcessFolder, WCCompare.Equal, processFolder);

                //For Share Worklist Items
                worklistCriteria.AddFilterField(WCLogical.AndBracket, WCField.WorklistItemOwner,
                                                WCWorklistItemOwner.Me.ToString(), WCCompare.Equal, 0);
                worklistCriteria.AddFilterField(WCLogical.Or, WCField.WorklistItemOwner,
                                                WCWorklistItemOwner.Other.ToString(), WCCompare.Equal, 0);

                taskList = _connection.OpenWorklist(worklistCriteria);
                result   = this.ConvertTaskList(taskList);

                if (!string.IsNullOrEmpty(fromUser))
                {
                    var formUserK2Format = ConstantValueService.K2_PREFIX + fromUser;
                    result = result.Where(m => string.Equals(m.AllocatedUser, formUserK2Format, StringComparison.OrdinalIgnoreCase)).ToList();
                }
            });
            return(result);
        }
        //internal DataTable LoadWorklistItem(string serialNumber)
        //{
        //    ConnectionSetup connectSetup = new ConnectionSetup();
        //    connectSetup.ConnectionString = _connectionString;
        //    Connection cnn = new Connection();
        //    DataTable dt = GetResultTable();
        //    try
        //    {
        //        cnn.Open(connectSetup);
        //        WorklistItem item = cnn.OpenWorklistItem(serialNumber);
        //        DataRow row = dt.NewRow();
        //        row["AllocatedUser"] = item.AllocatedUser;
        //        row["Data"] = item.Data;
        //        row["ID"] = item.ID;
        //        //row["Link"] = "<hyperlink><link>" + item.Data + "</link><display>Open</display></hyperlink>";
        //        row["SerialNumber"] = item.SerialNumber;
        //        row["Status"] = item.Status;
        //        row["ActivityID"] = item.ActivityInstanceDestination.ActID;
        //        row["ActivityInstanceID"] = item.ActivityInstanceDestination.ActInstID;
        //        row["ActivityInstanceDestinationID"] = item.ActivityInstanceDestination.ID;
        //        row["ActivityName"] = item.ActivityInstanceDestination.Name;
        //        row["Priority"] = item.ActivityInstanceDestination.Priority;
        //        row["StartDate"] = item.EventInstance.StartDate;
        //        row["ActivityDescription"] = item.ActivityInstanceDestination.Description;
        //        row["ActivityMetaData"] = item.ActivityInstanceDestination.MetaData;
        //        row["ActivityExpectedDuration"] = item.ActivityInstanceDestination.ExpectedDuration;
        //        row["ProcessInstanceID"] = item.ProcessInstance.ID;
        //        row["ProcessFullName"] = item.ProcessInstance.FullName;
        //        row["ProcessName"] = item.ProcessInstance.Name;
        //        row["Folio"] = item.ProcessInstance.Folio;
        //        row["ProcessDescription"] = item.ProcessInstance.Description;
        //        row["ProcessMetaData"] = item.ProcessInstance.MetaData;
        //        row["ProcessPriority"] = item.ProcessInstance.Priority;
        //        row["ProcessInstanceStartDate"] = item.ProcessInstance.StartDate;
        //        row["EventInstanceName"] = item.EventInstance.Name;
        //        dt.Rows.Add(row);
        //        return dt;
        //    }
        //    catch (Exception ex)
        //    {
        //        throw ex;
        //    }
        //    finally
        //    {
        //        cnn.Close();
        //        cnn.Dispose();
        //    }
        //}
        //public DataTable GetWorklistItems(Dictionary<string, object> properties, Dictionary<string, object> parameters)
        //{
        //    bool impersonate = false;
        //    string impersonateUser = "";
        //    ConnectionSetup connectSetup = new ConnectionSetup();
        //    connectSetup.ConnectionString = _connectionString;
        //    if (properties.ContainsKey("UserName"))
        //    {
        //        if (!(string.IsNullOrEmpty(properties["UserName"].ToString())))
        //        {
        //            connectSetup.ConnectionString = _connectionstringImpersonate;
        //            impersonateUser = properties["UserName"].ToString();
        //            impersonate = true;
        //        }
        //        else
        //            connectSetup.ConnectionString = _connectionString;
        //    }
        //    WorklistCriteria criteria = null;
        //    if (properties.Count > 0)
        //        criteria = GetWorklistCriteria(properties);
        //    Connection cnn = new Connection();
        //    try
        //    {
        //        cnn.Open(connectSetup);
        //        if (impersonate)
        //            cnn.ImpersonateUser(impersonateUser);
        //        DataTable dt = GetResultTable();
        //        Worklist worklist;
        //        if ((criteria != null) && (criteria.Filters.GetLength(0) > 0))
        //            worklist = cnn.OpenWorklist(criteria);
        //        else
        //            worklist = cnn.OpenWorklist();
        //        foreach (WorklistItem item in worklist)
        //        {
        //            DataRow row = dt.NewRow();
        //            row["AllocatedUser"] = item.AllocatedUser;
        //            row["Data"] = item.Data;
        //            row["ID"] = item.ID;
        //            //row["Link"] = "<hyperlink><link>" + item.Data + "</link><display>Open</display></hyperlink>";
        //            row["SerialNumber"] = item.SerialNumber;
        //            row["Status"] = item.Status;
        //            row["ActivityID"] = item.ActivityInstanceDestination.ActID;
        //            row["ActivityInstanceID"] = item.ActivityInstanceDestination.ActInstID;
        //            row["ActivityInstanceDestinationID"] = item.ActivityInstanceDestination.ID;
        //            row["ActivityName"] = item.ActivityInstanceDestination.Name;
        //            row["Priority"] = item.ActivityInstanceDestination.Priority;
        //            row["StartDate"] = item.EventInstance.StartDate;
        //            row["ActivityDescription"] = item.ActivityInstanceDestination.Description;
        //            row["ActivityMetaData"] = item.ActivityInstanceDestination.MetaData;
        //            row["ActivityExpectedDuration"] = item.ActivityInstanceDestination.ExpectedDuration;
        //            row["ProcessInstanceID"] = item.ProcessInstance.ID;
        //            row["ProcessFullName"] = item.ProcessInstance.FullName;
        //            row["ProcessName"] = item.ProcessInstance.Name;
        //            row["Folio"] = item.ProcessInstance.Folio;
        //            row["ProcessDescription"] = item.ProcessInstance.Description;
        //            row["ProcessMetaData"] = item.ProcessInstance.MetaData;
        //            row["ProcessPriority"] = item.ProcessInstance.Priority;
        //            row["ProcessInstanceStartDate"] = item.ProcessInstance.StartDate;
        //            row["EventInstanceName"] = item.EventInstance.Name;
        //            dt.Rows.Add(row);
        //        }
        //        if (impersonate)
        //            cnn.RevertUser();
        //        cnn.Close();
        //        cnn.Dispose();
        //        return dt;
        //    }
        //    catch (Exception ex)
        //    {
        //        throw ex;
        //    }
        //}
        private WorklistCriteria GetWorklistCriteria(Dictionary<string, object> properties)
        {
            WorklistCriteria criteria = new WorklistCriteria();

            foreach (KeyValuePair<string, object> property in properties)
            {
                switch (property.Key)
                {
                    case "Status":
                        criteria.AddFilterField(WCField.WorklistItemStatus, WCCompare.Equal, property.Value);
                        break;
                    case "ActivityName":
                        criteria.AddFilterField(WCField.ActivityName, WCCompare.Equal, property.Value);
                        break;
                    case "ProcessName":
                        criteria.AddFilterField(WCField.ProcessName, WCCompare.Equal, property.Value);
                        break;
                    case "ProcessFullName":
                        criteria.AddFilterField(WCField.ProcessFullName, WCCompare.Equal, property.Value);
                        break;
                    case "Folio":
                        criteria.AddFilterField(WCField.ProcessFolio, WCCompare.Equal, property.Value);
                        break;
                    case "EventInstanceName":
                        criteria.AddFilterField(WCField.EventName, WCCompare.Equal, property.Value);
                        break;
                    case "Priority":
                        criteria.AddFilterField(WCField.ActivityPriority, WCCompare.Equal, property.Value);
                        break;
                }
            }

            return criteria;
        }
Ejemplo n.º 22
0
        // Example from page - http://help.k2.com/onlinehelp/k2blackpearl/DevRef/4.6.9/default.htm#How_to_set_a_users_Out_of_Office_Status.html%3FTocPath%3DRuntime%2520APIs%2520and%2520Services%7CWorkflow%7CWorkflow%2520Client%2520API%7CWorkflow%2520Client%2520API%2520Samples%7C_____10
        private void AddOutOfOffice()
        {
            string userFQN = base.GetStringProperty(Constants.Properties.OutOfOffice.UserFQN);
            string destinationUser = base.GetStringProperty(Constants.Properties.OutOfOffice.DestinationUser);

            ServiceObject serviceObject = base.ServiceBroker.Service.ServiceObjects[0];
            serviceObject.Properties.InitResultTable();
            DataTable results = base.ServiceBroker.ServicePackage.ResultTable;

            WorkflowManagementServer mngServer = new WorkflowManagementServer();

            using (mngServer.CreateConnection())
            {
                mngServer.Open(BaseAPIConnectionString);

                WorklistShares wsColl = mngServer.GetCurrentSharingSettings(userFQN, ShareType.OOF);

                //  Throw error if multiple configurations (WorklistShare objects) detected, as this method cannot support that
                if (wsColl.Count > 1)
                {
                    throw new ApplicationException(Constants.ErrorMessages.MultipleOOFConfigurations);
                }

                //  If configuration exist already, add to it
                if (wsColl.Count == 1)
                {

                    WorklistShare worklistshare = wsColl[0];
                    worklistshare.WorkTypes[0].Destinations.Add(new Destination(destinationUser, DestinationType.User));
                    bool result = mngServer.ShareWorkList(userFQN, worklistshare);

                    DataRow dr = results.NewRow();
                    dr[Constants.Properties.OutOfOffice.UserFQN] = userFQN;
                    dr[Constants.Properties.OutOfOffice.DestinationUser] = destinationUser;
                    dr[Constants.Properties.OutOfOffice.CallSuccess] = result;
                    results.Rows.Add(dr); ;

                }
                // New user, create configuration for OOF
                else
                {
                    // ALL Work that remains which does not form part of any "WorkTypeException" Filter
                    WorklistCriteria worklistcriteria = new WorklistCriteria();
                    worklistcriteria.Platform = "ASP";

                    // Send ALL Work based on the above Filter to the following User
                    Destinations worktypedestinations = new Destinations();
                    worktypedestinations.Add(new Destination(destinationUser, DestinationType.User));

                    // Link the filters and destinations to the Work
                    WorkType worktype = new WorkType("MyWork", worklistcriteria, worktypedestinations);

                    WorklistShare worklistshare = new WorklistShare();
                    worklistshare.ShareType = ShareType.OOF;
                    worklistshare.WorkTypes.Add(worktype);

                    bool result = mngServer.ShareWorkList(userFQN, worklistshare);
                    mngServer.SetUserStatus(userFQN, UserStatuses.Available);

                    DataRow dr = results.NewRow();
                    dr[Constants.Properties.OutOfOffice.UserFQN] = userFQN;
                    dr[Constants.Properties.OutOfOffice.DestinationUser] = destinationUser;
                    dr[Constants.Properties.OutOfOffice.CallSuccess] = result;
                    results.Rows.Add(dr);
                }

            }
        }
Ejemplo n.º 23
0
        public void StartK2OOF()
        {
            string conStringIIF = this.AppConfig.IIFConnectionString;

            using (SqlConnection con = new SqlConnection(conStringIIF))
            {
                con.Open();
                string querySelect = "SELECT";
                querySelect = querySelect + " [Src].[Id], [Src].[FromDate], [Src].[ToDate]";
                querySelect = querySelect + " , [Src].[FromFQN], [Src].[ToFQN]";
                querySelect = querySelect + " , [Src].[IsActive], [Src].[IsCanceled], [Src].[IsExpired]";
                querySelect = querySelect + " , [Src].[IsStartedInK2], [Src].[IsEndedInK2]";
                querySelect = querySelect + " FROM [dbo].[Vw_TaskDelegation_NeedK2Started] AS [Src]";

                List <TaskDelegation> listTaskDelegation = new List <TaskDelegation>();

                using (SqlCommand cmd = con.CreateCommand())
                {
                    cmd.CommandType = CommandType.Text;
                    cmd.CommandText = querySelect;

                    using (SqlDataReader dr = cmd.ExecuteReader())
                    {
                        int indexOf_Id            = dr.GetOrdinal("Id");
                        int indexOf_FromDate      = dr.GetOrdinal("FromDate");
                        int indexOf_ToDate        = dr.GetOrdinal("ToDate");
                        int indexOf_FromFQN       = dr.GetOrdinal("FromFQN");
                        int indexOf_ToFQN         = dr.GetOrdinal("ToFQN");
                        int indexOf_IsActive      = dr.GetOrdinal("IsActive");
                        int indexOf_IsCanceled    = dr.GetOrdinal("IsCanceled");
                        int indexOf_IsExpired     = dr.GetOrdinal("IsExpired");
                        int indexOf_IsStartedInK2 = dr.GetOrdinal("IsStartedInK2");
                        int indexOf_IsEndedInK2   = dr.GetOrdinal("IsEndedInK2");

                        while (dr.Read())
                        {
                            TaskDelegation data = new TaskDelegation();
                            data.Id            = dr.GetInt64(indexOf_Id);
                            data.FromDate      = dr.GetDateTime(indexOf_FromDate);
                            data.ToDate        = dr.GetDateTime(indexOf_ToDate);
                            data.FromFQN       = dr.GetString(indexOf_FromFQN);
                            data.ToFQN         = dr.GetString(indexOf_ToFQN);
                            data.IsActive      = dr.GetBoolean(indexOf_IsActive);
                            data.IsCanceled    = dr.GetBoolean(indexOf_IsCanceled);
                            data.IsExpired     = dr.GetBoolean(indexOf_IsExpired);
                            data.IsStartedInK2 = dr.GetBoolean(indexOf_IsStartedInK2);
                            data.IsEndedInK2   = dr.GetBoolean(indexOf_IsEndedInK2);

                            listTaskDelegation.Add(data);
                        }
                    }
                }

                Exception innerEx = null;

                foreach (TaskDelegation taskDelegation in listTaskDelegation)
                {
                    try
                    {
                        using (Connection k2Con = new Connection())
                        {
                            k2Con.Open(this.AppConfig.K2Server);
                            k2Con.ImpersonateUser(taskDelegation.FromFQN);

                            WorklistCriteria worklistCriteria = new WorklistCriteria();
                            worklistCriteria.Platform = "ASP";
                            Destinations worktypeDestinations = new Destinations();
                            worktypeDestinations.Add(new Destination(taskDelegation.ToFQN, DestinationType.User));
                            WorkType workType = new WorkType("TaskDelegationWork_" + taskDelegation.Id.ToString(), worklistCriteria, worktypeDestinations);

                            WorklistShare worklistShare = new WorklistShare();
                            worklistShare.ShareType = ShareType.OOF;

                            worklistShare.StartDate = taskDelegation.FromDate;
                            worklistShare.EndDate   = taskDelegation.ToDate;

                            worklistShare.WorkTypes.Add(workType);
                            k2Con.ShareWorkList(worklistShare);

                            k2Con.SetUserStatus(UserStatuses.OOF);

                            string queryUpdate = "UPDATE [dbo].[TaskDelegation] SET";
                            queryUpdate = queryUpdate + " [IsActive] = 1";
                            queryUpdate = queryUpdate + ", [IsExpired] = 0";
                            queryUpdate = queryUpdate + ", [IsStartedInK2] = 1";
                            queryUpdate = queryUpdate + " WHERE [Id] = @Id";

                            using (SqlCommand cmd = con.CreateCommand())
                            {
                                cmd.CommandType = CommandType.Text;
                                cmd.CommandText = queryUpdate;
                                cmd.Parameters.Add(this.NewSqlParameter("Id", SqlDbType.BigInt, taskDelegation.Id));

                                cmd.ExecuteNonQuery();
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        innerEx = ex;
                    }
                }

                if (innerEx != null)
                {
                    throw new Exception("An error occured. " + innerEx.Message, innerEx);
                }

                con.Close();
            }
        }
Ejemplo n.º 24
0
 private void AddFieldFilters(WorklistCriteria wc)
 {
     foreach (KeyValuePair<WCField, string> filterField in PropertiesToWCFields)
     {
         Property p = base.ServiceBroker.Service.ServiceObjects[0].Properties[filterField.Value];
         if (p != null && p.Value != null)
         {
             wc.AddFilterField(filterField.Key, WCCompare.Equal, p.Value);
         }
     }
 }
Ejemplo n.º 25
0
        public async Task <GetUserWorkflowItemsDto> GetWorkflowItemsAsync(String searchTerm, Int32 skip, Int32 take,
                                                                          Dictionary <WCField, WCSortOrder> sorts,
                                                                          String impersonateUser,
                                                                          List <Tuple <String, String, String> >
                                                                          extraFilters)
        {
            Tuple <String, String, String> cobEF  = null;
            Tuple <String, String, String> yearEF = null;
            Tuple <String, String, String> insdEF = null;
            Tuple <String, String, String> uwrEF  = null;
            Tuple <String, String, String> actEF  = null;

            if (extraFilters != null)
            {
                cobEF  = extraFilters.FirstOrDefault(f => f.Item1 == "COBId");
                yearEF = extraFilters.FirstOrDefault(f => f.Item1 == "AccountYear");
                insdEF = extraFilters.FirstOrDefault(f => f.Item1 == "InsuredName");
                uwrEF  = extraFilters.FirstOrDefault(f => f.Item1 == "UnderwriterCode");
                actEF  = extraFilters.FirstOrDefault(f => f.Item1 == "Activity");
            }
            String cobExtraFilter = cobEF == null ? String.Empty : cobEF.Item3;
            Int32  yearParse;
            Int32? yearExtraFilter = null;

            if (Int32.TryParse(yearEF == null ? String.Empty : yearEF.Item3, out yearParse))
            {
                yearExtraFilter = yearParse;
            }

            String insdExtraFilter = insdEF == null ? String.Empty : insdEF.Item3;
            String uwrExtraFilter  = uwrEF == null ? String.Empty : uwrEF.Item3;
            String actExtraFilter  = actEF == null ? String.Empty : actEF.Item3;

            List <WorkflowItem> retArray = new List <WorkflowItem>();

            using (var k2Connection = new Connection())
            {
                ConnectionSetup k2Setup = new ConnectionSetup();
                k2Setup.ConnectionString = Properties.Settings.Default.WorkflowServerConnectionString;

                k2Connection.Open(k2Setup);

                if (!String.IsNullOrEmpty(impersonateUser))
                {
                    k2Connection.ImpersonateUser(impersonateUser);
                }

                var workCriteria = new WorklistCriteria {
                    NoData = true, Platform = "ASP"
                };

                String propertyFilter = String.Format("% / {0} / {1}%{2} / % / {3}",
                                                      String.IsNullOrEmpty(uwrExtraFilter) ? "%" : uwrExtraFilter,
                                                      cobExtraFilter,
                                                      yearExtraFilter == null
                                                          ? String.Empty
                                                          : yearExtraFilter.ToString().Substring(2),
                                                      String.IsNullOrEmpty(insdExtraFilter)
                                                          ? "%"
                                                          : "%" + insdExtraFilter + "%");
                if (!string.IsNullOrEmpty(searchTerm))
                {
                    String searchTermFormat = String.Format("%{0}%", searchTerm);

                    //if (extraFilters.Count > 0)
                    workCriteria.AddFilterField(WCLogical.StartBracket, WCField.None, WCCompare.Equal, null); //  (

                    workCriteria.AddFilterField(WCLogical.StartBracket, WCField.None, WCCompare.Equal, null); //      (
                    workCriteria.AddFilterField(WCField.ActivityName, WCCompare.Like, searchTermFormat);      //          ...
                    workCriteria.AddFilterField(WCLogical.Or, WCField.ProcessData, "BPC", WCCompare.Equal, searchTerm);
                    //          OR ...
                    workCriteria.AddFilterField(WCLogical.Or, WCField.EventName, WCCompare.Like, searchTermFormat);
                    //          OR ...
                    workCriteria.AddFilterField(WCLogical.Or, WCField.ProcessFolio, WCCompare.Like, searchTermFormat);
                    //          OR ...
                    workCriteria.AddFilterField(WCLogical.EndBracket, WCField.None, WCCompare.Equal, null);
                    //      )

                    if (extraFilters != null && extraFilters.Count > 0)
                    {
                        workCriteria.AddFilterField(WCLogical.And, WCField.None, WCCompare.Equal, null); //      AND
                        workCriteria.AddFilterField(WCLogical.StartBracket, WCField.None, WCCompare.Equal, null);
                        //      (
                        workCriteria.AddFilterField(WCField.ProcessFolio, WCCompare.Like, propertyFilter);
                        //          ...
                        workCriteria.AddFilterField(WCLogical.EndBracket, WCField.None, WCCompare.Equal, null);
                        //      )
                    }

                    if (!String.IsNullOrEmpty(actExtraFilter))
                    {
                        //  TODO: OR event name?
                        //workCriteria.AddFilterField(WCField.EventName, WCCompare.Equal, actExtraFilter);                     //     ...
                        workCriteria.AddFilterField(WCLogical.And, WCField.ActivityName, WCCompare.Equal, actExtraFilter);
                    }
                    //     ...

                    workCriteria.AddFilterField(WCLogical.EndBracket, WCField.None, WCCompare.Equal, null); //  )
                }
                else
                {
                    if (extraFilters != null && extraFilters.Count > 0)
                    {
                        workCriteria.AddFilterField(WCField.ProcessFolio, WCCompare.Like, propertyFilter);
                    }

                    if (!String.IsNullOrEmpty(actExtraFilter))
                    {
                        workCriteria.AddFilterField(WCLogical.And, WCField.ActivityName, WCCompare.Equal, actExtraFilter);
                    }
                    //     ...
                }

                //  No AND required - seems like bug - this bit gets put in a different bit of the query K2 creates.
                //  Hide allocated items like the SharePoint K2 worlist does by default.
                //  workCriteria.AddFilterField(WCField.WorklistItemStatus, WCCompare.NotEqual, WorklistStatus.Allocated);

                workCriteria.StartIndex = skip;
                workCriteria.Count      = take;

                foreach (KeyValuePair <WCField, WCSortOrder> sort in sorts)
                {
                    workCriteria.AddSortField(sort.Key, sort.Value);
                }

                var dto  = new GetUserWorkflowItemsDto();
                var task = new Task <GetUserWorkflowItemsDto>
                           (
                    () =>
                {
                    var k2Worklist = k2Connection.OpenWorklist(workCriteria);

                    retArray.AddRange(from WorklistItem item in k2Worklist select new WorkflowItem(item));

                    dto.WorkflowItemsArray  = retArray.ToArray();
                    dto.TotalDisplayRecords = k2Worklist.TotalCount;
                    dto.TotalRecords        = k2Worklist.TotalCount;

                    return(dto);
                }
                           );

                // Start the task
                task.Start();

                // Get the result from the task - analogous to
                // calling task.Result (without the thread blocking)
                var result = await task;
                return(result);
            }
        }
Ejemplo n.º 26
0
        public List <Worklist> GetWorklist()
        {
            var procInsts = new List <Worklist>();
            var K2Crit    = new WorklistCriteria();

            K2Crit.NoData   = true;  //faster, does not return the data for each item
            K2Crit.Platform = "ASP"; //helps when multiple platform are used

            K2Crit.AddFilterField(
                WCLogical.Or, WCField.WorklistItemOwner, "Me",
                WCCompare.Equal, WCWorklistItemOwner.Me
                );

            K2Crit.AddFilterField(
                WCLogical.Or, WCField.WorklistItemOwner, "Other",
                WCCompare.Equal, WCWorklistItemOwner.Other
                );

            K2Crit.AddSortField(WCField.ActivityStartDate, WCSortOrder.Descending);

            try
            {
                var K2WList = _connection.OpenWorklist(K2Crit);
                foreach (WorklistItem item in K2WList)
                {
                    var procInst = new Worklist()
                    {
                        ProcInstId    = item.ProcessInstance.ID,
                        ActInstDestId = item.ActivityInstanceDestination.ID,
                        Serial        = item.SerialNumber,
                        Folio         = item.ProcessInstance.Folio,
                        WorkflowPath  = item.ProcessInstance.FullName,
                        OpenFormUrl   = item.Data,
                        Originator    = item.ProcessInstance.Originator.Name,
                        ManagedUser   = ManagedUser,
                        Priority      = item.ProcessInstance.Priority,
                        AllocatedUser = item.AllocatedUser,
                        OpenedBy      = (item.Status == WorklistStatus.Allocated) ? item.AllocatedUser : string.Empty,
                        Status        = (item.Status == WorklistStatus.Allocated) ? WorklistStatus.Open.ToString() : WorklistStatus.Available.ToString(),
                        ActivityName  = item.ActivityInstanceDestination.Name
                    };

                    foreach (Action action in item.Actions)
                    {
                        if (action.Batchable)
                        {
                            procInst.Actions.Add(action.Name);
                        }
                    }

                    var  existed = procInsts.SingleOrDefault(p => p.ProcInstId == procInst.ProcInstId);
                    bool skip    = false;
                    if (existed != null)
                    {
                        skip = (existed.AllocatedUser == ManagedUser);
                        // Removed duplicated item for OOF or Shared
                        if (!skip)
                        {
                            procInsts.Remove(existed);
                        }
                    }
                    if (!skip)
                    {
                        procInsts.Add(procInst);
                    }
                }
            }
            catch (Exception)
            {
                throw;
            }

            return(procInsts);
        }
        // Example from page - http://help.k2.com/onlinehelp/k2blackpearl/DevRef/4.6.9/default.htm#How_to_set_a_users_Out_of_Office_Status.html%3FTocPath%3DRuntime%2520APIs%2520and%2520Services%7CWorkflow%7CWorkflow%2520Client%2520API%7CWorkflow%2520Client%2520API%2520Samples%7C_____10
        /// <summary>
        /// Add OOF share for current user
        /// </summary>
        private void AddOutOfOffice()
        {
            string destinationUser = base.GetStringProperty(Constants.SOProperties.OutOfOffice.DestinationUser);

            ServiceObject serviceObject = base.ServiceBroker.Service.ServiceObjects[0];
            serviceObject.Properties.InitResultTable();
            DataTable results = base.ServiceBroker.ServicePackage.ResultTable;

            using (Connection k2Con = new Connection())
            {
                k2Con.Open(base.K2ClientConnectionSetup);

                WorklistShares wsColl = k2Con.GetCurrentSharingSettings(ShareType.OOF);

                //  Throw error if multiple configurations (WorklistShare objects) detected, as this method cannot support that
                if (wsColl.Count > 1)
                {
                    throw new ApplicationException(Constants.ErrorMessages.MultipleOOFConfigurations);
                }

                //  If configuration exist already, add to it
                else if (wsColl.Count == 1)
                {

                    WorklistShare worklistshare = wsColl[0];

                    int capacity = worklistshare.WorkTypes[0].Destinations.Count;

                    string[] existingDestinations = new string[capacity];

                    for (int i = 0; i < capacity; i++)
                    {
                        existingDestinations[i] = worklistshare.WorkTypes[0].Destinations[i].Name.ToUpper().Trim();
                    }

                    if (Array.IndexOf(existingDestinations, destinationUser.ToUpper().Trim()) == -1)
                    {
                        worklistshare.WorkTypes[0].Destinations.Add(new Destination(destinationUser, DestinationType.User));
                    }

                    bool result = k2Con.ShareWorkList(worklistshare);

                    DataRow dr = results.NewRow();

                    dr[Constants.SOProperties.OutOfOffice.DestinationUser] = destinationUser;

                    results.Rows.Add(dr); ;

                }
                // New user, create configuration for OOF
                else
                {

                    // ALL Work that remains which does not form part of any "WorkTypeException" Filter
                    WorklistCriteria worklistcriteria = new WorklistCriteria();
                    worklistcriteria.Platform = "ASP";

                    // Send ALL Work based on the above Filter to the following User
                    Destinations worktypedestinations = new Destinations();
                    worktypedestinations.Add(new Destination(destinationUser, DestinationType.User));

                    // Link the filters and destinations to the Work
                    WorkType worktype = new WorkType("MyWork_" + k2Con.User.FQN, worklistcriteria, worktypedestinations);

                    WorklistShare worklistshare = new WorklistShare();
                    worklistshare.ShareType = ShareType.OOF;
                    worklistshare.WorkTypes.Add(worktype);

                    bool result = k2Con.ShareWorkList(worklistshare);
                    k2Con.SetUserStatus(UserStatuses.Available);

                    DataRow dr = results.NewRow();

                    dr[Constants.SOProperties.OutOfOffice.DestinationUser] = destinationUser;

                    results.Rows.Add(dr);

                }

                k2Con.Close();
            }
        }
        // Example from page - http://help.k2.com/onlinehelp/k2blackpearl/DevRef/4.6.9/default.htm#How_to_set_a_users_Out_of_Office_Status.html%3FTocPath%3DRuntime%2520APIs%2520and%2520Services%7CWorkflow%7CWorkflow%2520Client%2520API%7CWorkflow%2520Client%2520API%2520Samples%7C_____10
        /// <summary>
        /// Add OOF share for current user
        /// </summary>
        private void AddOutOfOffice()
        {
            string destinationUser = base.GetStringProperty(Constants.SOProperties.OutOfOffice.DestinationUser);

            ServiceObject serviceObject = base.ServiceBroker.Service.ServiceObjects[0];

            serviceObject.Properties.InitResultTable();
            DataTable results = base.ServiceBroker.ServicePackage.ResultTable;


            using (Connection k2Con = this.ServiceBroker.K2Connection.GetWorkflowClientConnection())
            {
                WorklistShares wsColl = k2Con.GetCurrentSharingSettings(ShareType.OOF);

                //  Throw error if multiple configurations (WorklistShare objects) detected, as this method cannot support that
                if (wsColl.Count > 1)
                {
                    throw new ApplicationException(Resources.MultipleOOFConfigurations);
                }
                else if (wsColl.Count == 1) //  If configuration exist already, add to it
                {
                    WorklistShare worklistshare = wsColl[0];
                    int           capacity      = worklistshare.WorkTypes[0].Destinations.Count;

                    string[] existingDestinations = new string[capacity];

                    for (int i = 0; i < capacity; i++)
                    {
                        existingDestinations[i] = worklistshare.WorkTypes[0].Destinations[i].Name.ToUpper().Trim();
                    }

                    if (Array.IndexOf(existingDestinations, destinationUser.ToUpper().Trim()) == -1)
                    {
                        worklistshare.WorkTypes[0].Destinations.Add(new Destination(destinationUser, DestinationType.User));
                    }

                    bool result = k2Con.ShareWorkList(worklistshare);

                    DataRow dr = results.NewRow();
                    dr[Constants.SOProperties.OutOfOffice.DestinationUser] = destinationUser;
                    results.Rows.Add(dr);;
                }
                else   // New user, create configuration for OOF
                {
                    // ALL Work that remains which does not form part of any "WorkTypeException" Filter
                    WorklistCriteria worklistcriteria = new WorklistCriteria();
                    worklistcriteria.Platform = "ASP";

                    // Send ALL Work based on the above Filter to the following User
                    Destinations worktypedestinations = new Destinations();
                    worktypedestinations.Add(new Destination(destinationUser, DestinationType.User));

                    // Link the filters and destinations to the Work
                    WorkType worktype = new WorkType("MyWork_" + k2Con.User.FQN, worklistcriteria, worktypedestinations);

                    WorklistShare worklistshare = new WorklistShare();
                    worklistshare.ShareType = ShareType.OOF;
                    worklistshare.WorkTypes.Add(worktype);

                    bool result = k2Con.ShareWorkList(worklistshare);
                    k2Con.SetUserStatus(UserStatuses.Available);

                    DataRow dr = results.NewRow();
                    dr[Constants.SOProperties.OutOfOffice.DestinationUser] = destinationUser;
                    results.Rows.Add(dr);
                }

                k2Con.Close();
            }
        }
Ejemplo n.º 29
0
        public WorkflowItem GetWorkflowItemBySN(string serialNumber, String impersonateUser)
        {
            using (var k2Connection = new Connection())
            {
                ConnectionSetup k2Setup = new ConnectionSetup();
                k2Setup.ConnectionString = Properties.Settings.Default.WorkflowServerConnectionString;

                k2Connection.Open(k2Setup);

                if (!String.IsNullOrEmpty(impersonateUser))
                    k2Connection.ImpersonateUser(impersonateUser);

                var workCriteria = new WorklistCriteria { NoData = true, Platform = "ASP" };

                if (!string.IsNullOrEmpty(serialNumber))
                {
                    workCriteria.AddFilterField(WCField.SerialNumber, WCCompare.Equal, serialNumber);        
                }
                
                Worklist k2Worklist = k2Connection.OpenWorklist(workCriteria);

                WorkflowItem retItem = null;

                foreach (WorklistItem item in k2Worklist)
                {
                    retItem = new WorkflowItem(item);
                }

                // now that we have the workflow item get the count of the related documents
                if ((retItem!=null)&&(!string.IsNullOrEmpty(retItem.PolicyID)))
                {
                    using (DocumentService.DocumentServiceClient client = new DocumentService.DocumentServiceClient())
                    {
                        retItem.RelatedDocumentCount = client.GetDocumentsCountForPolicy(retItem.PolicyID);
                    }
                }

                return retItem;

            }
        }
Ejemplo n.º 30
0
        private void GetWorklist()
        {
            ServiceObject serviceObject = base.ServiceBroker.Service.ServiceObjects[0];
            serviceObject.Properties.InitResultTable();
            DataTable results = base.ServiceBroker.ServicePackage.ResultTable;

            using (Connection k2Con = new Connection())
            {
                k2Con.Open(base.K2ClientConnectionSetup);

                WorklistCriteria wc = new WorklistCriteria();
                wc.Platform = base.Platform;
                AddFieldFilters(wc);
                if (base.GetBoolProperty(Constants.SOProperties.ClientWorklist.IncludeShared) == true)
                {
                    wc.AddFilterField(WCLogical.Or, WCField.WorklistItemOwner, "Me", WCCompare.Equal, WCWorklistItemOwner.Me);
                    wc.AddFilterField(WCLogical.Or, WCField.WorklistItemOwner, "Other", WCCompare.Equal, WCWorklistItemOwner.Other);
                }
                if (base.GetBoolProperty(Constants.SOProperties.ClientWorklist.ExcludeAllocated) == true)
                {
                    wc.AddFilterField(WCLogical.And, WCField.WorklistItemStatus, WCCompare.NotEqual, WorklistStatus.Allocated);
                }
                Worklist wl = k2Con.OpenWorklist(wc);

                foreach (WorklistItem wli in wl)
                {
                    AddRowToDataTable(results, wli);
                }

                k2Con.Close();
            }
        }
Ejemplo n.º 31
0
        public List<WorkflowItem> GetWorkflowItems(String searchTerm, Int32 skip, Int32 take, Dictionary<WCField, WCSortOrder> sorts, String impersonateUser, out Int32 count, out Int32 totalCount, List<Tuple<String, String, String>> extraFilters)
        {
            Tuple<String, String, String> cobEF = null;
            Tuple<String, String, String> yearEF = null;
            Tuple<String, String, String> descEF = null;
            Tuple<String, String, String> insdEF = null;
            Tuple<String, String, String> bkrEF = null;
            Tuple<String, String, String> uwrEF = null;
            Tuple<String, String, String> actEF = null;             

            if (extraFilters != null)
            {
                cobEF = extraFilters.FirstOrDefault(f => f.Item1 == "COBId");
                yearEF = extraFilters.FirstOrDefault(f => f.Item1 == "AccountYear");
                descEF = extraFilters.FirstOrDefault(f => f.Item1 == "Description");
                insdEF = extraFilters.FirstOrDefault(f => f.Item1 == "InsuredName");
                bkrEF = extraFilters.FirstOrDefault(f => f.Item1 == "BrokerPseudonym");
                uwrEF = extraFilters.FirstOrDefault(f => f.Item1 == "UnderwriterCode");
                actEF = extraFilters.FirstOrDefault(f => f.Item1 == "Activity");
            }
            String cobExtraFilter = cobEF == null ? String.Empty : cobEF.Item3;
            Int32 yearParse;
            Int32? yearExtraFilter = null;
            if (Int32.TryParse(yearEF == null ? String.Empty : yearEF.Item3, out yearParse))
                yearExtraFilter = yearParse;

            String descExtraFilter = descEF == null ? String.Empty : descEF.Item3;
            String insdExtraFilter = insdEF == null ? String.Empty : insdEF.Item3;
            String bkrExtraFilter = bkrEF == null ? String.Empty : bkrEF.Item3;
            String uwrExtraFilter = uwrEF == null ? String.Empty : uwrEF.Item3;
            String actExtraFilter = actEF == null ? String.Empty : actEF.Item3;

            List<WorkflowItem> retArray = new List<WorkflowItem>();
            using (var k2Connection = new Connection())
            {
                ConnectionSetup k2Setup = new ConnectionSetup();
                k2Setup.ConnectionString = Properties.Settings.Default.WorkflowServerConnectionString;

                k2Connection.Open(k2Setup);

                if (!String.IsNullOrEmpty(impersonateUser))
                    k2Connection.ImpersonateUser(impersonateUser);

                var workCriteria = new WorklistCriteria { NoData = true, Platform = "ASP" };
                
                //String propertyFilter = String.Format("% / {0} / {1} / % / %{2}%", uwrExtraFilter, searchTerm);
                String propertyFilter = String.Format("% / {0} / {1}%{2} / % / {3}",
                    String.IsNullOrEmpty(uwrExtraFilter) ? "%" : uwrExtraFilter,
                    cobExtraFilter,
                    yearExtraFilter == null ? String.Empty : yearExtraFilter.ToString().Substring(2),
                    String.IsNullOrEmpty(insdExtraFilter) ? "%" : "%" + insdExtraFilter + "%");
                if (!string.IsNullOrEmpty(searchTerm))
                {
                    String searchTermFormat = String.Format("%{0}%", searchTerm);

                    //if (extraFilters.Count > 0)
                    workCriteria.AddFilterField(WCLogical.StartBracket, WCField.None, WCCompare.Equal, null);           //  (

                    workCriteria.AddFilterField(WCLogical.StartBracket, WCField.None, WCCompare.Equal, null);           //      (
                    workCriteria.AddFilterField(WCField.ActivityName, WCCompare.Like, searchTermFormat);                //          ...
                    workCriteria.AddFilterField(WCLogical.Or, WCField.ProcessData, "BPC", WCCompare.Equal, searchTerm); //          OR ...
                    workCriteria.AddFilterField(WCLogical.Or, WCField.EventName, WCCompare.Like, searchTermFormat);     //          OR ...
                    workCriteria.AddFilterField(WCLogical.Or, WCField.ProcessFolio, WCCompare.Like, searchTermFormat);  //          OR ...
                    workCriteria.AddFilterField(WCLogical.EndBracket, WCField.None, WCCompare.Equal, null);             //      )     

                    if (extraFilters.Count > 0)
                    {
                        workCriteria.AddFilterField(WCLogical.And, WCField.None, WCCompare.Equal, null);                //      AND
                        workCriteria.AddFilterField(WCLogical.StartBracket, WCField.None, WCCompare.Equal, null);       //      (
                        workCriteria.AddFilterField(WCField.ProcessFolio, WCCompare.Like, propertyFilter);              //          ...
                        workCriteria.AddFilterField(WCLogical.EndBracket, WCField.None, WCCompare.Equal, null);         //      )                        
                    }

                    if (!String.IsNullOrEmpty(actExtraFilter))
                        //  TODO: OR event name?
                        //workCriteria.AddFilterField(WCField.EventName, WCCompare.Equal, actExtraFilter);                     //     ...
                        workCriteria.AddFilterField(WCLogical.And, WCField.ActivityName, WCCompare.Equal, actExtraFilter);                     //     ...

                    //if (extraFilters.Count > 0)
                    workCriteria.AddFilterField(WCLogical.EndBracket, WCField.None, WCCompare.Equal, null);             //  )
                    //workCriteria.AddFilterField(WCField., WCField.None, WCCompare.Equal, null);
                }
                else
                {
                    if (extraFilters.Count > 0)
                    {
                        workCriteria.AddFilterField(WCField.ProcessFolio, WCCompare.Like, propertyFilter);
                        
                    }
                    
                    if (!String.IsNullOrEmpty(actExtraFilter))
                        workCriteria.AddFilterField(WCLogical.And, WCField.ActivityName, WCCompare.Equal , actExtraFilter);                     //     ...
                }

                //  No AND required - seems like bug - this bit gets put in a different bit of the query K2 creates.
                //  Hide allocated items like the SharePoint K2 worlist does by default.
                //  workCriteria.AddFilterField(WCField.WorklistItemStatus, WCCompare.NotEqual, WorklistStatus.Allocated);

                //workCriteria.AddSortField(WCField.ActivityStartDate, WCSortOrder.Descending);

                workCriteria.StartIndex = skip;
                workCriteria.Count = take;

                foreach (KeyValuePair<WCField, WCSortOrder> sort in sorts)
                {
                    workCriteria.AddSortField(sort.Key, sort.Value);
                }

                Worklist k2Worklist = k2Connection.OpenWorklist(workCriteria);

                foreach (WorklistItem item in k2Worklist)
                {
                    retArray.Add(new WorkflowItem(item));
                }

                count = k2Worklist.TotalCount;
                //  Total records before filter
                totalCount = k2Worklist.TotalCount; 

                return retArray;
            }
        }
Ejemplo n.º 32
0
        public List <WorkflowItem> GetWorkflowItems(String searchTerm, Int32 skip, Int32 take, Dictionary <WCField, WCSortOrder> sorts, String impersonateUser, out Int32 count, out Int32 totalCount, List <Tuple <String, String, String> > extraFilters)
        {
            Tuple <String, String, String> cobEF  = null;
            Tuple <String, String, String> yearEF = null;
            Tuple <String, String, String> insdEF = null;
            Tuple <String, String, String> uwrEF  = null;
            Tuple <String, String, String> actEF  = null;

            if (extraFilters != null)
            {
                cobEF  = extraFilters.FirstOrDefault(f => f.Item1 == "COBId");
                yearEF = extraFilters.FirstOrDefault(f => f.Item1 == "AccountYear");
                insdEF = extraFilters.FirstOrDefault(f => f.Item1 == "InsuredName");
                uwrEF  = extraFilters.FirstOrDefault(f => f.Item1 == "UnderwriterCode");
                actEF  = extraFilters.FirstOrDefault(f => f.Item1 == "Activity");
            }
            String cobExtraFilter = cobEF == null ? String.Empty : cobEF.Item3;
            Int32  yearParse;
            Int32? yearExtraFilter = null;

            if (Int32.TryParse(yearEF == null ? String.Empty : yearEF.Item3, out yearParse))
            {
                yearExtraFilter = yearParse;
            }

            String insdExtraFilter = insdEF == null ? String.Empty : insdEF.Item3;
            String uwrExtraFilter  = uwrEF == null ? String.Empty : uwrEF.Item3;
            String actExtraFilter  = actEF == null ? String.Empty : actEF.Item3;

            List <WorkflowItem> retArray = new List <WorkflowItem>();

            using (var k2Connection = new Connection())
            {
                ConnectionSetup k2Setup = new ConnectionSetup();
                k2Setup.ConnectionString = Properties.Settings.Default.WorkflowServerConnectionString;

                k2Connection.Open(k2Setup);

                if (!String.IsNullOrEmpty(impersonateUser))
                {
                    k2Connection.ImpersonateUser(impersonateUser);
                }

                var workCriteria = new WorklistCriteria {
                    NoData = true, Platform = "ASP"
                };

                String propertyFilter = String.Format("% / {0} / {1}%{2} / % / {3}",
                                                      String.IsNullOrEmpty(uwrExtraFilter) ? "%" : uwrExtraFilter,
                                                      cobExtraFilter,
                                                      yearExtraFilter == null ? String.Empty : yearExtraFilter.ToString().Substring(2),
                                                      String.IsNullOrEmpty(insdExtraFilter) ? "%" : "%" + insdExtraFilter + "%");
                if (!string.IsNullOrEmpty(searchTerm))
                {
                    String searchTermFormat = String.Format("%{0}%", searchTerm);

                    workCriteria.AddFilterField(WCLogical.StartBracket, WCField.None, WCCompare.Equal, null);           //  (

                    workCriteria.AddFilterField(WCLogical.StartBracket, WCField.None, WCCompare.Equal, null);           //      (
                    workCriteria.AddFilterField(WCField.ActivityName, WCCompare.Like, searchTermFormat);                //          ...
                    workCriteria.AddFilterField(WCLogical.Or, WCField.ProcessData, "BPC", WCCompare.Equal, searchTerm); //          OR ...
                    workCriteria.AddFilterField(WCLogical.Or, WCField.EventName, WCCompare.Like, searchTermFormat);     //          OR ...
                    workCriteria.AddFilterField(WCLogical.Or, WCField.ProcessFolio, WCCompare.Like, searchTermFormat);  //          OR ...
                    workCriteria.AddFilterField(WCLogical.EndBracket, WCField.None, WCCompare.Equal, null);             //      )

                    if (extraFilters != null && extraFilters.Count > 0)
                    {
                        workCriteria.AddFilterField(WCLogical.And, WCField.None, WCCompare.Equal, null);                //      AND
                        workCriteria.AddFilterField(WCLogical.StartBracket, WCField.None, WCCompare.Equal, null);       //      (
                        workCriteria.AddFilterField(WCField.ProcessFolio, WCCompare.Like, propertyFilter);              //          ...
                        workCriteria.AddFilterField(WCLogical.EndBracket, WCField.None, WCCompare.Equal, null);         //      )
                    }

                    if (!String.IsNullOrEmpty(actExtraFilter))
                    {
                        //  TODO: OR event name?
                        //workCriteria.AddFilterField(WCField.EventName, WCCompare.Equal, actExtraFilter);                     //     ...
                        workCriteria.AddFilterField(WCLogical.And, WCField.ActivityName, WCCompare.Equal, actExtraFilter); //     ...
                    }
                    workCriteria.AddFilterField(WCLogical.EndBracket, WCField.None, WCCompare.Equal, null);                //  )
                }
                else
                {
                    if (extraFilters != null && extraFilters.Count > 0)
                    {
                        workCriteria.AddFilterField(WCField.ProcessFolio, WCCompare.Like, propertyFilter);
                    }

                    if (!String.IsNullOrEmpty(actExtraFilter))
                    {
                        workCriteria.AddFilterField(WCLogical.And, WCField.ActivityName, WCCompare.Equal, actExtraFilter);                     //     ...
                    }
                }

                //  No AND required - seems like bug - this bit gets put in a different bit of the query K2 creates.
                //  Hide allocated items like the SharePoint K2 worlist does by default.

                workCriteria.StartIndex = skip;
                workCriteria.Count      = take;

                foreach (KeyValuePair <WCField, WCSortOrder> sort in sorts)
                {
                    workCriteria.AddSortField(sort.Key, sort.Value);
                }

                Worklist k2Worklist = k2Connection.OpenWorklist(workCriteria);

                foreach (WorklistItem item in k2Worklist)
                {
                    retArray.Add(new WorkflowItem(item));
                }

                count = k2Worklist.TotalCount;
                //  Total records before filter
                totalCount = k2Worklist.TotalCount;

                return(retArray);
            }
        }
Ejemplo n.º 33
0
        private void AddOutOfOffice()
        {
            string userFQN         = base.GetStringProperty(Constants.SOProperties.OutOfOffice.UserFQN, true);
            string destinationUser = base.GetStringProperty(Constants.SOProperties.OutOfOffice.DestinationUser, true);

            ServiceObject serviceObject = base.ServiceBroker.Service.ServiceObjects[0];

            serviceObject.Properties.InitResultTable();
            DataTable results = base.ServiceBroker.ServicePackage.ResultTable;

            WorkflowManagementServer mngServer = new WorkflowManagementServer();

            using (mngServer.CreateConnection())
            {
                mngServer.Open(BaseAPIConnectionString);

                WorklistShares wsColl = mngServer.GetCurrentSharingSettings(userFQN, ShareType.OOF);

                //  Throw error if multiple configurations (WorklistShare objects) detected, as this method cannot support that
                if (wsColl.Count > 1)
                {
                    throw new ApplicationException(Constants.ErrorMessages.MultipleOOFConfigurations);
                }

                //  If configuration exist already, add to it
                if (wsColl.Count == 1)
                {
                    WorklistShare worklistshare = wsColl[0];
                    worklistshare.WorkTypes[0].Destinations.Add(new Destination(destinationUser, DestinationType.User));
                    bool result = mngServer.ShareWorkList(userFQN, worklistshare);
                    if (!result)
                    {
                        throw new ApplicationException(Constants.ErrorMessages.FailedToSetOOF);
                    }
                    DataRow dr = results.NewRow();
                    dr[Constants.SOProperties.OutOfOffice.UserFQN]         = userFQN;
                    dr[Constants.SOProperties.OutOfOffice.DestinationUser] = destinationUser;

                    results.Rows.Add(dr);;
                }
                // New user, create configuration for OOF
                else
                {
                    // ALL Work that remains which does not form part of any "WorkTypeException" Filter
                    WorklistCriteria worklistcriteria = new WorklistCriteria();
                    worklistcriteria.Platform = "ASP";

                    // Send ALL Work based on the above Filter to the following User
                    Destinations worktypedestinations = new Destinations();
                    worktypedestinations.Add(new Destination(destinationUser, DestinationType.User));

                    // Link the filters and destinations to the Work
                    WorkType worktype = new WorkType("MyWork", worklistcriteria, worktypedestinations);

                    WorklistShare worklistshare = new WorklistShare();
                    worklistshare.ShareType = ShareType.OOF;
                    worklistshare.WorkTypes.Add(worktype);

                    bool result = mngServer.ShareWorkList(userFQN, worklistshare);
                    if (!result)
                    {
                        throw new ApplicationException(Constants.ErrorMessages.FailedToSetOOF);
                    }
                    result = mngServer.SetUserStatus(userFQN, UserStatuses.Available);
                    if (!result)
                    {
                        throw new ApplicationException(Constants.ErrorMessages.FailedToSetOOF);
                    }

                    DataRow dr = results.NewRow();
                    dr[Constants.SOProperties.OutOfOffice.UserFQN]         = userFQN;
                    dr[Constants.SOProperties.OutOfOffice.DestinationUser] = destinationUser;
                    results.Rows.Add(dr);
                }
            }
        }
Ejemplo n.º 34
0
        public List <IIFWorklistItem> ListIIFWorklistItem(IIFWorklistItem_Filter filter)
        {
            List <IIFWorklistItem> result = new List <IIFWorklistItem>();

            Dictionary <int, List <IIFWorklistItem> > dictWfItem = new Dictionary <int, List <IIFWorklistItem> >();

            using (Connection k2Con = new Connection())
            {
                k2Con.Open(this.AppConfig.K2Server);
                if (filter != null)
                {
                    if (!string.IsNullOrEmpty(filter.Destination))
                    {
                        k2Con.ImpersonateUser(filter.Destination);
                    }
                }

                WorklistCriteria worklistCriteria = new WorklistCriteria();
                worklistCriteria.Platform = "ASP";
                worklistCriteria.AddFilterField(WCField.ProcessFullName, WCCompare.Equal, "IIF\\PAM");
                worklistCriteria.AddFilterField(WCLogical.Or, WCField.ProcessFullName, WCCompare.Equal, "IIF\\CM");
                worklistCriteria.AddFilterField(WCLogical.Or, WCField.WorklistItemOwner, "Me", WCCompare.Equal, WCWorklistItemOwner.Me);
                worklistCriteria.AddFilterField(WCLogical.Or, WCField.WorklistItemOwner, "Other", WCCompare.Equal, WCWorklistItemOwner.Other);

                Worklist worklist = k2Con.OpenWorklist(worklistCriteria);

                foreach (WorklistItem item in worklist)
                {
                    IIFWorklistItem newData = new IIFWorklistItem();
                    newData.K2ProcessId           = item.ProcessInstance.ID;
                    newData.SN                    = item.SerialNumber;
                    newData.K2CurrentActivityName = item.ActivityInstanceDestination.DisplayName;
                    if (!dictWfItem.ContainsKey(newData.K2ProcessId))
                    {
                        dictWfItem.Add(newData.K2ProcessId, new List <IIFWorklistItem>());
                    }
                    newData.SharedUserFQN = item.AllocatedUser;
                    dictWfItem[newData.K2ProcessId].Add(newData);
                }
            }

            if (dictWfItem.Count > 0)
            {
                string conStringIIF = this.AppConfig.IIFConnectionString;
                using (SqlConnection con = new SqlConnection(conStringIIF))
                {
                    con.Open();

                    string queryInValue = string.Empty;
                    foreach (int k2ProcessId in dictWfItem.Keys)
                    {
                        if (string.IsNullOrEmpty(queryInValue))
                        {
                            queryInValue = k2ProcessId.ToString();
                        }
                        else
                        {
                            queryInValue = queryInValue + ", " + k2ProcessId.ToString();
                        }
                    }

                    string query = "SELECT [K2ProcessId], [Id]";
                    query = query + ", [MDocTypeId], [MDocTypeName], [MProductTypeId], [MProductTypeName]";
                    query = query + ", [ProjectCode], [CustomerName], [SubmitDate], [CMNumber]";
                    query = query + ", [IsInRevise]";
                    query = query + ", [MWorkflowStatusId], [MWorkflowStatusName]";
                    query = query + ", [ModifiedBy], [ModifiedOn]";
                    query = query + " FROM [dbo].[Vw_SubmissionList]";
                    query = query + " WHERE [K2ProcessId] IN (";
                    query = query + queryInValue;
                    query = query + " )";

                    using (SqlCommand cmd = con.CreateCommand())
                    {
                        cmd.CommandType = CommandType.Text;

                        #region Filter
                        if (filter != null)
                        {
                            if (filter.SubmitDate_FROM.HasValue)
                            {
                                query = query + " AND CONVERT(DATE, [SubmitDate]) >= @SubmitDate_FROM";
                                cmd.Parameters.Add(this.NewSqlParameter("SubmitDate_FROM", SqlDbType.Date, filter.SubmitDate_FROM));
                            }

                            if (filter.SubmitDate_TO.HasValue)
                            {
                                query = query + " AND CONVERT(DATE, [SubmitDate]) <= @SubmitDate_TO";
                                cmd.Parameters.Add(this.NewSqlParameter("SubmitDate_TO", SqlDbType.Date, filter.SubmitDate_TO));
                            }

                            if (!string.IsNullOrEmpty(filter.ProjectCode_LIKE))
                            {
                                query = query + " AND [ProjectCode] LIKE '%' + @ProjectCode_LIKE + '%'";
                                cmd.Parameters.Add(this.NewSqlParameter("ProjectCode_LIKE", SqlDbType.VarChar, filter.ProjectCode_LIKE));
                            }

                            if (!string.IsNullOrEmpty(filter.CustomerName_LIKE))
                            {
                                query = query + " AND [CustomerName] LIKE '%' + @CustomerName_LIKE + '%'";
                                cmd.Parameters.Add(this.NewSqlParameter("CustomerName_LIKE", SqlDbType.VarChar, filter.CustomerName_LIKE));
                            }

                            if (filter.ProductTypeId.HasValue)
                            {
                                query = query + " AND [MProductTypeId] = @ProductTypeId";
                                cmd.Parameters.Add(this.NewSqlParameter("ProductTypeId", SqlDbType.Int, filter.ProductTypeId));
                            }

                            if (filter.MDocTypeId.HasValue)
                            {
                                query = query + " AND [MDocTypeId] = @MDocTypeId";
                                cmd.Parameters.Add(this.NewSqlParameter("MDocTypeId", SqlDbType.VarChar, filter.MDocTypeId.Value));
                            }

                            if (!string.IsNullOrEmpty(filter.CMNumber_LIKE))
                            {
                                query = query + " AND [CMNumber] LIKE '%' + @CMNumber_LIKE + '%'";
                                cmd.Parameters.Add(this.NewSqlParameter("CMNumber_LIKE", SqlDbType.VarChar, filter.CMNumber_LIKE));
                            }
                        }
                        #endregion

                        cmd.CommandText = query;

                        using (SqlDataReader dr = cmd.ExecuteReader())
                        {
                            int indexOf_K2ProcessId         = dr.GetOrdinal("K2ProcessId");
                            int indexOf_Id                  = dr.GetOrdinal("Id");
                            int indexOf_MDocTypeId          = dr.GetOrdinal("MDocTypeId");
                            int indexOf_MDocTypeName        = dr.GetOrdinal("MDocTypeName");
                            int indexOf_MProductTypeId      = dr.GetOrdinal("MProductTypeId");
                            int indexOf_MProductTypeName    = dr.GetOrdinal("MProductTypeName");
                            int indexOf_ProjectCode         = dr.GetOrdinal("ProjectCode");
                            int indexOf_CustomerName        = dr.GetOrdinal("CustomerName");
                            int indexOf_SubmitDate          = dr.GetOrdinal("SubmitDate");
                            int indexOf_CMNumber            = dr.GetOrdinal("CMNumber");
                            int indexOf_IsInRevise          = dr.GetOrdinal("IsInRevise");
                            int indexOf_MWorkflowStatusId   = dr.GetOrdinal("MWorkflowStatusId");
                            int indexOf_MWorkflowStatusName = dr.GetOrdinal("MWorkflowStatusName");
                            int indexOf_ModifiedBy          = dr.GetOrdinal("ModifiedBy");
                            int indexOf_ModifiedOn          = dr.GetOrdinal("ModifiedOn");

                            while (dr.Read())
                            {
                                int k2ProcessId = dr.GetInt32(indexOf_K2ProcessId);

                                if (dictWfItem.ContainsKey(k2ProcessId))
                                {
                                    foreach (IIFWorklistItem data in dictWfItem[k2ProcessId])
                                    {
                                        Logger.Error("DocumentId: " + dr.GetInt64(indexOf_Id));
                                        Logger.Error("MDocTypeId: " + dr.GetInt32(indexOf_MDocTypeId));
                                        Logger.Error("MDocTypeName: " + dr.GetNullableString(indexOf_MDocTypeName));
                                        Logger.Error("ProductTypeId: " + dr.GetInt32(indexOf_MProductTypeId));
                                        Logger.Error("ProductTypeName: " + dr.GetNullableString(indexOf_MProductTypeName));
                                        Logger.Error("ProjectCode: " + dr.GetNullableString(indexOf_ProjectCode));
                                        Logger.Error("CustomerName: " + dr.GetNullableString(indexOf_CustomerName));
                                        //Logger.Error("SubmitDate: " + dr.GetDateTime(indexOf_SubmitDate));
                                        Logger.Error("CMNumber: " + dr.GetNullableString(indexOf_CMNumber));
                                        Logger.Error("IsInRevise: " + dr.GetBoolean(indexOf_IsInRevise));
                                        Logger.Error("WorkflowStatusId: " + dr.GetInt32(indexOf_MWorkflowStatusId));
                                        Logger.Error("WorkflowStatusName: " + dr.GetNullableString(indexOf_MWorkflowStatusName));
                                        Logger.Error("ModifiedBy: " + dr.GetNullableString(indexOf_ModifiedBy));
                                        //Logger.Error("ModifiedOn: " + dr.GetDateTime(indexOf_ModifiedOn));

                                        data.DocumentId      = dr.GetInt64(indexOf_Id);
                                        data.MDocTypeId      = dr.GetInt32(indexOf_MDocTypeId);
                                        data.MDocTypeName    = dr.GetNullableString(indexOf_MDocTypeName);
                                        data.ProductTypeId   = dr.GetInt32(indexOf_MProductTypeId);
                                        data.ProductTypeName = dr.GetNullableString(indexOf_MProductTypeName);
                                        data.ProjectCode     = dr.GetNullableString(indexOf_ProjectCode);
                                        data.CustomerName    = dr.GetNullableString(indexOf_CustomerName);
                                        try
                                        {
                                            data.SubmitDate = dr.GetDateTime(indexOf_SubmitDate);
                                        }
                                        catch
                                        {
                                        }

                                        data.CMNumber           = dr.GetNullableString(indexOf_CMNumber);
                                        data.IsInRevise         = dr.GetBoolean(indexOf_IsInRevise);
                                        data.WorkflowStatusId   = dr.GetInt32(indexOf_MWorkflowStatusId);
                                        data.WorkflowStatusName = dr.GetNullableString(indexOf_MWorkflowStatusName);
                                        data.ModifiedBy         = dr.GetNullableString(indexOf_ModifiedBy);

                                        try
                                        {
                                            data.ModifiedOn = dr.GetDateTime(indexOf_ModifiedOn);
                                        }
                                        catch
                                        {
                                        }

                                        if ((data.K2CurrentActivityName.ToUpper() == "Submit MoM BoD".ToUpper()) || (data.K2CurrentActivityName.ToUpper() == "Submit MoM BoC".ToUpper()))
                                        {
                                            data.TaskListStatus = "Responded (Risk Team)";
                                        }
                                        else
                                        {
                                            data.TaskListStatus = data.WorkflowStatusName;
                                        }

                                        result.Add(data);
                                    }
                                }
                            }
                        }
                    }
                    con.Close();
                }
            }

            return(result);
        }
        public async Task<GetUserWorkflowItemsDto> GetWorkflowItemsAsync(String searchTerm, Int32 skip, Int32 take,
                                                                         Dictionary<WCField, WCSortOrder> sorts,
                                                                         String impersonateUser,
                                                                         List<Tuple<String, String, String>>
                                                                             extraFilters)
        {
            Tuple<String, String, String> cobEF = null;
            Tuple<String, String, String> yearEF = null;
            Tuple<String, String, String> insdEF = null;
            Tuple<String, String, String> uwrEF = null;
            Tuple<String, String, String> actEF = null;

            if (extraFilters != null)
            {
                cobEF = extraFilters.FirstOrDefault(f => f.Item1 == "COBId");
                yearEF = extraFilters.FirstOrDefault(f => f.Item1 == "AccountYear");
                insdEF = extraFilters.FirstOrDefault(f => f.Item1 == "InsuredName");
                uwrEF = extraFilters.FirstOrDefault(f => f.Item1 == "UnderwriterCode");
                actEF = extraFilters.FirstOrDefault(f => f.Item1 == "Activity");
            }
            String cobExtraFilter = cobEF == null ? String.Empty : cobEF.Item3;
            Int32 yearParse;
            Int32? yearExtraFilter = null;
            if (Int32.TryParse(yearEF == null ? String.Empty : yearEF.Item3, out yearParse))
                yearExtraFilter = yearParse;

            String insdExtraFilter = insdEF == null ? String.Empty : insdEF.Item3;
            String uwrExtraFilter = uwrEF == null ? String.Empty : uwrEF.Item3;
            String actExtraFilter = actEF == null ? String.Empty : actEF.Item3;

            List<WorkflowItem> retArray = new List<WorkflowItem>();
            using (var k2Connection = new Connection())
            {
                ConnectionSetup k2Setup = new ConnectionSetup();
                k2Setup.ConnectionString = Properties.Settings.Default.WorkflowServerConnectionString;

                k2Connection.Open(k2Setup);

                if (!String.IsNullOrEmpty(impersonateUser))
                    k2Connection.ImpersonateUser(impersonateUser);

                var workCriteria = new WorklistCriteria { NoData = true, Platform = "ASP" };

                String propertyFilter = String.Format("% / {0} / {1}%{2} / % / {3}",
                                                      String.IsNullOrEmpty(uwrExtraFilter) ? "%" : uwrExtraFilter,
                                                      cobExtraFilter,
                                                      yearExtraFilter == null
                                                          ? String.Empty
                                                          : yearExtraFilter.ToString().Substring(2),
                                                      String.IsNullOrEmpty(insdExtraFilter)
                                                          ? "%"
                                                          : "%" + insdExtraFilter + "%");
                if (!string.IsNullOrEmpty(searchTerm))
                {
                    String searchTermFormat = String.Format("%{0}%", searchTerm);

                    //if (extraFilters.Count > 0)
                    workCriteria.AddFilterField(WCLogical.StartBracket, WCField.None, WCCompare.Equal, null); //  (

                    workCriteria.AddFilterField(WCLogical.StartBracket, WCField.None, WCCompare.Equal, null); //      (
                    workCriteria.AddFilterField(WCField.ActivityName, WCCompare.Like, searchTermFormat); //          ...
                    workCriteria.AddFilterField(WCLogical.Or, WCField.ProcessData, "BPC", WCCompare.Equal, searchTerm);
                    //          OR ...
                    workCriteria.AddFilterField(WCLogical.Or, WCField.EventName, WCCompare.Like, searchTermFormat);
                    //          OR ...
                    workCriteria.AddFilterField(WCLogical.Or, WCField.ProcessFolio, WCCompare.Like, searchTermFormat);
                    //          OR ...
                    workCriteria.AddFilterField(WCLogical.EndBracket, WCField.None, WCCompare.Equal, null);
                    //      )     

                    if (extraFilters != null && extraFilters.Count > 0)
                    {
                        workCriteria.AddFilterField(WCLogical.And, WCField.None, WCCompare.Equal, null); //      AND
                        workCriteria.AddFilterField(WCLogical.StartBracket, WCField.None, WCCompare.Equal, null);
                        //      (
                        workCriteria.AddFilterField(WCField.ProcessFolio, WCCompare.Like, propertyFilter);
                        //          ...
                        workCriteria.AddFilterField(WCLogical.EndBracket, WCField.None, WCCompare.Equal, null);
                        //      )                        
                    }

                    if (!String.IsNullOrEmpty(actExtraFilter))
                        //  TODO: OR event name?
                        //workCriteria.AddFilterField(WCField.EventName, WCCompare.Equal, actExtraFilter);                     //     ...
                        workCriteria.AddFilterField(WCLogical.And, WCField.ActivityName, WCCompare.Equal, actExtraFilter);
                    //     ...

                    workCriteria.AddFilterField(WCLogical.EndBracket, WCField.None, WCCompare.Equal, null); //  )
                }
                else
                {
                    if (extraFilters != null && extraFilters.Count > 0)
                    {
                        workCriteria.AddFilterField(WCField.ProcessFolio, WCCompare.Like, propertyFilter);

                    }

                    if (!String.IsNullOrEmpty(actExtraFilter))
                        workCriteria.AddFilterField(WCLogical.And, WCField.ActivityName, WCCompare.Equal, actExtraFilter);
                    //     ...
                }

                //  No AND required - seems like bug - this bit gets put in a different bit of the query K2 creates.
                //  Hide allocated items like the SharePoint K2 worlist does by default.
                //  workCriteria.AddFilterField(WCField.WorklistItemStatus, WCCompare.NotEqual, WorklistStatus.Allocated);
                
                workCriteria.StartIndex = skip;
                workCriteria.Count = take;

                foreach (KeyValuePair<WCField, WCSortOrder> sort in sorts)
                {
                    workCriteria.AddSortField(sort.Key, sort.Value);
                }

                var dto = new GetUserWorkflowItemsDto();
                var task = new Task<GetUserWorkflowItemsDto>
                    (
                    () =>
                    {
                        var k2Worklist = k2Connection.OpenWorklist(workCriteria);

                        retArray.AddRange(from WorklistItem item in k2Worklist select new WorkflowItem(item));

                        dto.WorkflowItemsArray = retArray.ToArray();
                        dto.TotalDisplayRecords = k2Worklist.TotalCount;
                        dto.TotalRecords = k2Worklist.TotalCount;

                        return dto;
                    }
                    );

                // Start the task
                task.Start();

                // Get the result from the task - analogous to 
                // calling task.Result (without the thread blocking)
                var result = await task;
                return result;
            }
        }