Hi Everyone! π
Recently, I came across an interesting behavior in Oracle APEX that’s worth sharing.
I had a page containing two reports — an Interactive Grid (IG) and an Interactive Report (IR) — both based on the same SQL query. The query included a bind page item in the WHERE clause to filter data dynamically.
As per the requirement, I set the page item’s Storage Type to Memory Only. When the user clicks the Submit button (handled through a Dynamic Action), both the IG and IR regions refresh perfectly, and the data displays as expected.
However, I noticed something unusual: when clicking on a column heading in the Interactive Grid to use the built-in column filter dropdown, it displayed no values. On the other hand, the Interactive Report showed the distinct filter values correctly for the same column.
Note: To make the Interactive Grid column heading dropdown filter display values, the page item’s storage type must be set to Session State, not Memory Only. ✅
This behavior occurs due to a fundamental difference in how IG and IR handle filters internally.
I’ll browse and share a short summary of what I found:
-
✅ Interactive Grid (IG) relies on an in-memory model for filtering, sorting, and dropdown value generation after the initial server query.
-
✅ Interactive Report (IR) performs server-side queries to populate filter dropdowns, fetching distinct database values each time.
When a bind variable (your page item) is set to Memory Only, it is not persisted to session state — meaning it’s available only in the browser, not on the server.
Since IG uses its client-side model, it may lack the necessary data context to build dropdown filter values if the initial model doesn’t contain all possible distinct values.
In contrast, IR re-queries the database when building filter dropdowns, so it always retrieves up-to-date distinct values using the latest bind variable — even if that variable was Memory Only. ✅
Comments
Post a Comment