I'm seeing some wierd behaviour with how the client api's WorklistCriteria filters a worklist. I suspect it is a bug. We have to cater for many different scenarios so we have to dynamically generate our filters. We are using 4.12060.1560.0 and I did find http://help.k2.com/KB001588 which did state that filters on DateTime instances does not work which could the problem but I'm not sure. To the problem:
I'm trying to filter item (this is heavily dumbed down) with the following query:
WorkflowName = "some name" && (SystemWaitTime < Date || SystemWaitTime == NullDate)
When I'm using the following filter setup it works:
criteria.AddFilterField(WCLogical.And, WCField.ProcessData, "OVWorkflowName", WCCompare.Equal, Helper.TestWorkflowName);
criteria.AddFilterField(WCLogical.And, WCField.None, WCCompare.Equal, null);
criteria.AddFilterField(WCLogical.StartBracket, WCField.None, WCCompare.Equal, null);
criteria.AddFilterField(WCLogical.And, WCField.ProcessData, "OVSystemWait", WCCompare.Less, new DateTime(2014, 6, 10, 6, 41, 10, DateTimeKind.Utc));
criteria.AddFilterField(WCLogical.Or, WCField.ProcessData, "OVSystemWait", WCCompare.Equal, K2Constants.FieldDatetimeNull);
criteria.AddFilterField(WCLogical.EndBracket, WCField.None, WCCompare.Equal, null);
when I use this, it breaks (returning more items than it should):
criteria.AddFilterField(WCLogical.StartBracket, WCField.None, WCCompare.Equal, null);
criteria.AddFilterField(WCLogical.And, WCField.ProcessData, "OVSystemWait", WCCompare.Less, new DateTime(2014, 6, 10, 6, 41, 10, DateTimeKind.Utc));
criteria.AddFilterField(WCLogical.Or, WCField.ProcessData, "OVSystemWait", WCCompare.Equal, K2Constants.FieldDatetimeNull);
criteria.AddFilterField(WCLogical.EndBracket, WCField.None, WCCompare.Equal, null);
//criteria.AddFilterField(WCLogical.And, WCField.None, WCCompare.Equal, null);
criteria.AddFilterField(WCLogical.And, WCField.ProcessData, "OVWorkflowName", WCCompare.Equal, Helper.TestWorkflowName);
The only difference is our search by workflow name. It breaks when it is the last thing to compare as if it is being ignored.
Is there a different way to do something similar that will work? I tried to use the Management API's WorklistCriteriaFilter but could not see a way to filter by ProcessData which is kind of critical for us. We are trying to avoid sending back too many items from the k2server as it will affect our performance negatively and our actual query is a lot more complex than this.