Skip to main content

I'v got a number of filter controls on my user-worklist screen. These filters control the criteria array that
is send to OpenWorklist from SourceCode.Workflow.Client.Connection. But i'm a little confused about the
usage of the WCLogical enum that is given to AddFilterField of the WorkListCriteria list.


WCLogical.And -> And 'field' =
WCLogical.OR -> Or 'field' =
WCLogical.AndBracket -> And { 'field' =
WCLogical.OrBracket -> Or { 'field' =
WCLogical.StartBracket -> { ?
WCLogical.EndBracket -> } ?


Can anyone explain these a little more to me?
For example i want the following sql be translated in a AddFilterField list:


select *
from users
where (country = 'NL' OR country= 'DE' OR country='EN')
AND (lastname=  'name1' OR lastname='name2' OR lastname='name3')


Thanks

Hi There,

below are some notes that a friend of mine provided me, I hope this helps

 Brief description of each bracket Enum value :

1. StartBracket simply creates a opening bracket – (

2. EndBracket simply creates a closing bracket - )

3. AndBracket simply creates a AND and opening and closing brackets – AND ()

4. OrBracket simply creates a OR and opening and closing brackets – OR ()




The following Filter buildup using the API


1. crit.AddFilterField(sc.WCLogical.StartBracket, sc.WCField.None, sc.WCCompare.Equal, null);

            

2. crit.AddFilterField(sc.WCLogical.StartBracket, sc.WCField.None, sc.WCCompare.Equal, null);

3. crit.AddFilterField(sc.WCField.ActivityName, sc.WCCompare.Equal, "123");

4. crit.AddFilterField(sc.WCLogical.Or, sc.WCField.ActivityName, sc.WCCompare.Like, "345");

5. crit.AddFilterField(sc.WCLogical.EndBracket, sc.WCField.None, sc.WCCompare.Like, null);


6. crit.AddFilterField(sc.WCLogical.And, sc.WCField.None, sc.WCCompare.Equal, null);


7. crit.AddFilterField(sc.WCLogical.StartBracket, sc.WCField.None, sc.WCCompare.Equal, null);

8. crit.AddFilterField(sc.WCField.ActivityName, sc.WCCompare.Like, "45");

9. crit.AddFilterField(sc.WCLogical.Or, sc.WCField.ActivityName, sc.WCCompare.Like, "12");

10. crit.AddFilterField(sc.WCLogical.EndBracket, sc.WCField.None, sc.WCCompare.Like, null);


11. crit.AddFilterField(sc.WCLogical.EndBracket, sc.WCField.None, sc.WCCompare.Equal, null);

12. crit.AddFilterField(sc.WCLogical.AndBracket, sc.WCField.ActivityName, sc.WCCompare.Like, "12");

 

will result to filter in the SQL script as per the trace below.


 (  

(  

   ACT.Name = 123" OR ACT.Name LIKE "345" 

)  

AND  

(  

   ACT.Name LIKE "45" OR ACT.Name LIKE "12" 

 )  

 And (ACT.Name LIKE "12”)  


Wow,


Thanks, that seems to be a complete answer:-) I'm going to try this out!


greetz Marco


I seem to have a problem with the filterfields and ProcessData subfields,


code:


 crit.AddFilterField(SWC.WCLogical.StartBracket, SWC.WCField.None, SWC.WCCompare.Equal, null);
 crit.AddFilterField(SWC.WCLogical.Or, SWC.WCField.ProcessData, FieldName, SWC.WCCompare.Equal, FieldValue);
 crit.AddFilterField(SWC.WCLogical.Or, SWC.WCField.ProcessData, FieldName, SWC.WCCompare.Equal, FieldValue);
 crit.AddFilterField(SWC.WCLogical.Or, SWC.WCField.ProcessData, FieldName, SWC.WCCompare.Equal, FieldValue);
 crit.AddFilterField(SWC.WCLogical.EndBracket, SWC.WCField.None, SWC.WCCompare.Equal, null);


I want to add more filters for other fields so thats why i need the start/end brackets around these OR fields,
because the AddFilterField doesn't have a overload with a subfield without the WCLogical enum i cannot start with a


  crit.AddFilterField(SWC.WCField.ProcessData, FieldName, SWC.WCCompare.Equal, FieldValue);


I'm getting a 'Object Graph cannot be null' error on this situation. Any ideas?


So the outcome should be something like:


(


   FieldName = FieldValue Or FieldName = FieldValue Or FieldName = FieldValue


)


Can u convert this code as mathematical logic


_worklistCriteria.AddFilterField(WCLogical.AndBracket, WCField.WorklistItemOwner, "Me", WCCompare.Equal, WCWorklistItemOwner.Me);
            _worklistCriteria.AddFilterField(WCLogical.Or, WCField.WorklistItemOwner, "Other", WCCompare.Equal, WCWorklistItemOwner.Me);
            _worklistCriteria.AddFilterField(WCLogical.AndBracket, WCField.WorklistItemStatus, WCCompare.Equal, WorklistStatus.Open);
            _worklistCriteria.AddFilterField(WCLogical.Or, WCField.WorklistItemStatus, WCCompare.Equal, WorklistStatus.Available);


Thanks.


Murphy, I followed your syntax with 4.6.7 and the result does not match the filter criteria.   I've opened ticket with support.

 

StartBracket
PocessFolder, Equal
Or ProcessFolder, Equal
EndBracket
And
StartBracket
Folio LIKE
Or ProcessXML Field LIKE   <--- this is ignored if I have more than 1 filter here
End Bracket

 

StartBracket
Or ProcessXML Field LIKE   <--- by itself it works
End Bracket

 

Tried many combinations, no more hair to pull...


Reply