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(); } }
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); }
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); } } }
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); }
/// <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); }
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); }
/// <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); }
/// <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); }
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); }
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); }
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; } }
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."); } }
/// <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); }
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); } }
/// <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); }
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; }
// 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); } } }
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(); } }
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); } } }
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); } }
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(); } }
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; } }
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(); } }
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; } }
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); } }
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); } } }
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; } }