Child pages
  • Using Table Filters

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • Logical Expression - A filter will contain a logical expression which is evaluated on behalf of records in the filtered table(s). Only records, for which the expression evaluates to true, will be returned by any queries issued to the filtered table(s). At runtime, the filter will be translated into an SQL WHERE clauseand appended to the query of any foundset which is bound to the filtered table(s). An expression contains the following components:
    • Data Provider Name - This is the left-hand operand. It is the name of a single column by which to filter. When filtering an entire server connection, only tables which contain the named column will be filtered.

    • Operator - The following operators are supported

      =

      Only records whose column equals the specified value

      <

      Only records whose column is less than the specified value

      >

      Only records whose column greater than the specified value

      >=

      Only records whose column greater than or equals the specified value

      <=

      Only records whose column less than or equalsthe specified value

      !=

      Only records whose column does not equal the specified value

      ^

      Only records whose column value is null

      LIKE

      Only records whose column matches using the SQL LIKE construct (use wildcard '%' characters)

      IN

      Only records whose column value is in (using the SQL IN construct) a list of values

      BETWEENOnly records whose column value is (inclusive) between a list of 2 values

      #

      Modifier, used to make case-insensitive queries

      ||

      Modifier used to concatenate two conditions w/ a logical OR


      Note

      Operators and modifiers may be combined, producing more complex conditions. For example #^||!= would translate to: is null OR case-insensitive not equals


    • Data Provider Value - This is the right-hand operand and should evaluate to a literal value to be compared with the named column.

...

Code Block
// Filter products within an array of product codes
var success = databaseManager.addTableFilterParam('crm', 'products', 'productcode', 'in', [120, 144, 200]);

// Filter orders using a subselect
var success = databaseManager.addTableFilterParam('crm', 'orders', 'countrycode', 'sql:in', 'select country code from countries where region = "Europe"')


Note

In Servoy 2020.03 we added support for sql-modifier . When value of the filter is a custom query, the operator used should be prefixed with "sql:" (like sql:in , sql:=, ...). This is a security feature, so a developer should explicitly mark a value as a select query. Currently, the operator works without the sql-modifier (the old way), but it will generate a warning in the log: "Filter is created using a custom query without using the sql-modifier, this will be removed in a future version of servoy, please use operator 'sql:in'". See issue 

Jira
serverServoy
serverId4ad951b9-f3a1-3d2a-96cd-12d1456d993c
keySVY-14682
 as we plan to enforce the modifier in future releases.

Example This example shows filters on null values

Code Block
// Filter products within product code is null
var success = databaseManager.addTableFilterParam('crm', 'products', 'productcode', '=', null);
 
// Filter products within product code is not null
var success = databaseManager.addTableFilterParam('crm', 'products', 'productcode', '!=', null);
 
// Filter products within product code is null or 120
var success = databaseManager.addTableFilterParam('crm', 'products', 'productcode', '^||='', 120);

Example This example shows how to filter an entire server connection by passing <null> for the table name. This is ideal for multi-tenant architectures as an entire server connection can be filtered by a single expression, i.e. the current company

...