Skip to main content
Nintex Community Menu Bar

management api: GetWorklistItems doesn't return any work item

  • July 10, 2009
  • 3 replies
  • 25 views

Forum|alt.badge.img+3

I'm trying to query K2 via it's management API:

            WorklistCriteria criteria = new WorklistCriteria();
            criteria.AddFilterField(WCField.WorklistItemOwner, WCCompare.Equal, "mylogin");
            var items = workflowServer.GetWorklistItems(criteria);

this doesn't get me any item nor an exception, it returns an empty list.

However I can see in the workspace that I've many work items

Any idea what is wrong?

3 replies

Forum|alt.badge.img+9
  • Nintex Partner
  • July 12, 2009

Unfortunately, as mentioned here (http://www.k2underground.com/forums/thread/31503.aspx) there is a currently aknown issue where using the WorklistCriteria object within the WorkflowManagement API will return an empty list.


Forum|alt.badge.img+3
  • Author
  • July 29, 2009

Just to give an update, it is possible to workaround this issue by using WorklistCriteriaFilter instead of WorklistCriteria

I'm not sure ATM if it's possible to  cover the same possibilities via this overload


Forum|alt.badge.img
  • July 29, 2009

I try to work with the (undocumented) WorklistCriteriaFilter API.


 As far as I can understand, in order to build a request, you have to add "regular filters" for "regular" fields using WorklistCriteriaFilter.AddRegularFilter to get the same result as WorklistCriteria.AddFilterField for filters on columns


The tricky part is the WCLogical that is replaced by a RegularFilter.FilterCondition that doesn't have the same values, so you have to build your request differently (the coordination between logical elements is written differently). (BTW, I've never seen such an awkward way to build logical BLOCKED EXPRESSION


Eg. Writing (A OR B) AND C


using WorklistCriteria :


crit.AddFilterField(sc.WCLogical.StartBracket, sc.WCField.None, sc.WCCompare.Equal, null); // (
crit.AddFilterField(sc.WCField.ActivityName, sc.WCCompare.Equal, "123"); // A
crit.AddFilterField(sc.WCLogical.Or, sc.WCField.ActivityName, sc.WCCompare.Like, "345"); // OR B
crit.AddFilterField(sc.WCLogical.EndBracket, sc.WCField.None, sc.WCCompare.Like, null); // )
crit.AddFilterField(sc.WCLogical.And, sc.WCField.None, sc.WCCompare.Equal, null); // AND
crit.AddFilterField(sc.WCField.ActivityName, sc.WCCompare.Like, "45"); // C


using WorklistCriteriaFilter :


cf.AddRegularFilter(sc.WCField.ActivityName, sc.WCCompare.Equal, "123", RegularFilter.FilterCondition.AND_OPEN); // (A
cf.AddRegularFilter(sc.WCField.ActivityName, sc.WCCompare.Like, "345", RegularFilter.FilterCondition.OR_CLOSE); // OR B)
cf.AddRegularFilter(sc.WCField.ActivityName, sc.WCCompare.Like, "45", RegularFilter.FilterCondition.AND); // AND C


On line 1, we could use either AND_OPEN or OR_OPEN, since the logical operator is ignored for the first item (but _OPEN is used to open the bracket).


The trouble is that you can't write the following request with WorklistCriteriaFilter :


((A OR B) AND C) OR D


because of the "((" begining sequence. You can do it with WorklistCriteria because it allows to put two brackets in a row using empty filters, but you can't with WorklistCriteriaFilter.


Is there a way to write a filter ((A OR B) AND C) OR D using WorklistCriteriaFilter?