Info | ||||||
---|---|---|---|---|---|---|
Looking for
|
Filters / Conditions
Info |
---|
Filters is a very important concept in ConfiForms and is used in many places, basically it is the core of ConfiForms, a base which helps to connect ConfiForms forms and allows to query data stored within ConfiForms form:
|
...
ConfiForms plugin uses 'Lucene like' syntax for expressions, supports grouping using parenthesis and AND/OR logical operators. Nesting expressions is possible
Supports filtering for expressions that start with a wild-card. Supports filtering per field as well as free text search (filter to match against any field value).
Operators AND and OR are case-sensitive! (as everything else in ConfiForms: field names, form names, virtual functions)
Supports not notation, to filter records that do not match the given filter: '!' is used for that. Example: !f1:[empty] - will look for records where f1 field value is not empty (→ has some value)
Supports simple math operations and comparisons on dates (to add or substract days from today's date). See examples below
Valid example: (f1:*success AND f2:>[yesterday]) OR (f3:accepted) - matches records with field values having 'success' and where f2 field value is after yesterday or where f3 filed value is equals to 'accepted'
Valid example: (f1:*success AND f2:>[today]-1) OR (!f3:[empty]) - matches records with field values having 'success' and where f2 field value is after yesterday or where f3 field value is not empty
Through "evaluateFormula" from Virtual functions you have access to Supported math operators, formulas and functions
Main principle is you match current record's field's value with a given value
Code Block |
---|
fieldname:value |
where fieldname itself could be an expression and value could be a reference to field values via [entry.field_name] notation
Code Block |
---|
fieldname.trunc(3):[entry.anotherfield.trunc(3)] |
Important to follow the concept of a field name followed by a value to check against separated with :
To match values against regular expressions please consider using "matches" function from Virtual functions
Code Block |
---|
myfield.matches(^[a-zA-Z0-9]*$):true |
Reserved words to use in expressions:
* | To match all | ||||||||||
val* | Will match the record(s) where the field value starts with "val" | ||||||||||
*val | Will match the record(s) where the field value ends with "val" | ||||||||||
*val* | Will match the record(s) where the field value has "val" anywhere | ||||||||||
fieldname:val* | Will only check the "fieldname" field for the value "val" in the beginning of each word in the value | ||||||||||
[empty] | To match empty values for particular field. Example: field1:[empty] - will match records where field1 is empty (does not have a value, but the form defines this field) | ||||||||||
[now] | Current time and date, useful with '<' and '>' for comparing with dates stored. Example: someDateField:<[now] - will match records where field 'someDateField' has value which is in the past compared to now (current time) | ||||||||||
[today] | Same as [now], but without time | ||||||||||
[tomorrow] | To compare against tomorrow's date. Also something like [today]+1 could be used instead | ||||||||||
[yesterday] | To compare against yesterday's date. Also something like [today]-1 could be used instead | ||||||||||
[dateyyyyMMdd] | To compare against given date in the format: yyyyMMdd, example: [date20150130] to give a date as Jan 30 2015 | ||||||||||
[datetimeyyyyMMdd HH:mm] | To compare against given date with time in the format: yyyyMMdd HH:mm, example: [date20151231 12:13] to give a date as Dec 31 2015 12:13 | ||||||||||
[date timetoday hh:mm] | You can use a shortcut to "today" with given construction | ||||||||||
'<' and '>' (and '<=' and '>=') | Can be used together with date and datetime fields, as well as to compare values for numeric fields stored | ||||||||||
! | To reverse the filter condition. Example: !field1:[empty] - will find records that have 'field1' field filled | ||||||||||
| |||||||||||
hasChanged(fieldName)
| See explanation in Virtual functions
| ||||||||||
_previousState.fieldname | See hasChanged function in Virtual functions
You can access ANY property of the ConfiForms record that was there before the update. But ONLY in the IFTTT conditions | ||||||||||
Supports for "records count" evaluation
| For example, this filter will check that the user can register not more than 2 records within 14 days
So, the filter shall start with a parenthesis and end with a parenthesis followed by semicolon and expression
This works in Field Definition Rules and allows you to have validation rules as dynamic as this | ||||||||||
Calculations on date/datetime and timestamp fields | When you want to apply filters on date/datetime or timestamp fields you actually work on their "timestamp values" - https://www.unixtimestamp.com/index.php And that is in milliseconds. So, when you want to add/subtract days or hours or minutes from some timestamp holding field you need to operate in milliseconds For example when you want to check the interval is longer than 60 days (duration is a DateTime interval field in this example)
How we got a "5184000000" value? This is 60 days in milliseconds How to convert a day into milliseconds: https://www.unitjuggler.com/convert-time-from-day-to-ms.html |
Some examples:
- field1:[today]-5 - assuming field1 is of type date (or datetime) this filter will return records where field1 value is not older than 5 days from now
- field1:[today]+10 - assuming field1 is of type date (or datetime) this filter will return records where field1 value is not after 10 days from now
...