Queries with Dynamic Where Clause – UI & Backend
Dynamic Where Clause enables queries to filter data based on runtime conditions.
Instead of hardcoding filter values inside a query, conditions are constructed dynamically using user inputs, variables, or business logic.
This approach ensures:
- Flexible data filtering
- Reduced query duplication
- Reusable query definitions
- Clean separation between UI inputs and backend execution
What is a Dynamic Where Clause?
A Dynamic Where Clause allows query conditions to be applied at runtime.
The filtering logic is not fixed in the query definition. Instead, parameters are passed dynamically from:
- UI components
- Page variables
- Service variables
- Business logic
The query executes based on the supplied values.
When to Use Dynamic Where Clause
Use dynamic conditions when:
- Search filters are user-driven
- Multiple combinations of filters are possible
- Role-based filtering is required
- Query logic must adapt without redeployment
- Avoiding multiple static queries for each condition
This prevents unnecessary duplication of database queries.
Architecture Overview
Dynamic filtering involves two layers:
- UI Layer (Input Collection)
- Backend Layer (Query Execution)
Runtime Flow
- User enters filter values in UI
- Variables capture input values
- Query receives parameters
- Dynamic Where Clause applies conditions
- Filtered data is returned
This separates:
- Filter input
- Query logic
- Data retrieval
Backend Configuration
Dynamic Where Clauses are defined in Database Queries using parameters.
Example Scenario
Filter Employees based on:
- Department
- Role
- Minimum Salary
Instead of hardcoding values:
SELECT * FROM EMPLOYEE
WHERE deptId = :deptId
AND role = :role
AND salary >= :minSalary
The parameters (:deptId, :role, :minSalary) are resolved at runtime.
Handling Optional Parameters
To make conditions optional, use conditional logic.
Example:
SELECT * FROM EMPLOYEE
WHERE (:deptId IS NULL OR deptId = :deptId)
AND (:role IS NULL OR role = :role)
AND (:minSalary IS NULL OR salary >= :minSalary)
This ensures:
- Filters apply only when values are provided
- Query remains reusable
- No need for multiple query versions
UI Configuration
Step 1: Create Input Fields
Add UI components:
- Select (Department)
- Select (Role)
- Input (Minimum Salary)
These capture filter values.
Step 2: Create Service Variable
Create a Database CRUD or Query Variable bound to the dynamic query.
Bind query parameters to UI inputs.
Example:
deptId → bind:Widgets.departmentSelect.datavalue
role → bind:Widgets.roleSelect.datavalue
minSalary → bind:Widgets.salaryInput.datavalue
Step 3: Enable Update Behavior
Enable:
- Update Data on Input Change
Or trigger manually via:
- Button click event
This ensures query execution when inputs change.
How It Works Together
In Dynamic Where Clause implementation:
- UI collects filter inputs
- Variables pass parameters
- Query resolves conditions
- Database returns filtered dataset
- Data Table renders results
The query remains constant. Only parameters change.
This architecture ensures:
- Single query definition
- Flexible runtime filtering
- Clear separation of concerns
- Controlled data retrieval
Advanced Handling
Dynamic Where Clause can also be constructed programmatically.
Example:
Page.searchClick = function() {
Page.Variables.EmployeeQuery.update();
};
Additional validation or preprocessing logic can be added before query execution.
Summary
Queries with Dynamic Where Clause provide:
- Runtime-controlled filtering
- Parameter-driven query execution
- Optional condition handling
- UI-to-backend binding
- Reusable database queries
This approach ensures that filtering logic is not rigidly embedded — it is dynamically constructed through governed parameter flow between UI and backend.