Page 1 of 1

Custom Filter Condition

PostPosted: Mon Aug 06, 2018 11:03 am
by hansemar
Hallo,

ich benötige einen Filter, welcher Datensätze selektiert die zwischen zwei Characters liegen. In SQL würde die Abfrage wie folgt aussehen:

Code: Select all
SELECT * FROM [Tabelle] a where LOWER(SUBSTR([Spalte], 1)) between 'b' and 'c';


In JVx habe ich keine ICondition gefunden in welcher diese "Custom" Where Bedingung darstellen kann.

Wie kann man so eine Filter Condition setzen?

Gruß Mark

Re: Custom Filter Condition

PostPosted: Wed Aug 08, 2018 3:08 pm
by Support@SIB
Als schnelle Lösung könnten Sie auch ganz einfach eine SEARCH_SPALTE einführen, die dann lediglich das erste Zeichen enthält. Diese Spalte können Sie dann mit den Standard Conditions: GreaterEquals, LessEquals durchsuchen.

Mit dem Condition API können keine frei definierbaren Bedingungen erstellt werden, da diese nicht nur gegen die Datenbank funktionieren müssen sondern auch im Memory, ohne Datenbank. Bei frei definierbaren Bedingungen ist das aber nicht ohne weiteres möglich.

Sie können aber durchaus frei definierbare Bedingungen verwenden, allerdings mit etwas Vorsicht. Hier ein Beispiel wie wir es in unserer Workflow Engine einsetzen:

Syntax: [ Download ] [ Hide ]
workflows = new DBStorage();
workflows.setDBAccess(dbAccess);
workflows.setWritebackTable("WF_WORKFLOWS");
workflows.setWhereClause(":SEARCH is null"
                       + " or lower(WORKFLOW) like lower(:SEARCH)"
                       + " or exists (select *" +
                       "                from wf_wofl_steps ws" +
                       "                join wf_functions f on f.id = ws.func_id" +
                       "               where ws.wofl_id = m.id" +
                       "                 and (lower(f.function) like lower(:SEARCH)" +
                       "                      or lower(ws.name) like lower(:SEARCH)" +
                       "                      or lower(f.descr) like lower(:SEARCH)))" +
                       "   or exists (select *" +
                       "                from wf_wofl_steps ws" +
                       "                join wf_wfst_params p on p.wfst_id = ws.id" +
                       "               where ws.wofl_id = m.id" +
                       "                 and (lower(p.name) like lower(:SEARCH)" +
                       "                      or lower(ws.name) like lower(:SEARCH)" +
                       "                      or lower(p.value) like lower(:SEARCH)))");
workflows.setDefaultSort(new SortDefinition("WORKFLOW"));
workflows.open();
                   
workflows.getMetaData().addColumnMetaData(new ColumnMetaData("SEARCH"));
 

Durch das Hinzufügen von SEARCH zu den MetaDaten, erhalten Sie die Möglichkeit am GUI ganz einfach danach zu Filtern.

Ein anderes Beispiel zu dynamischen Parametern: UITable und postgres function mit Parametern