Oracle APEX has a daily DB job that performs internal housekeeping (deleting expired session state, rotating log tables, etc.). Just like APEX, developers should also perform regular housekeeping on their APEX applications to keep them clear of clutter. Every unused component, static file, etc. adds to the noise developers have to navigate; some unused components can even impact performance.
In this short, I will look at some areas where clutter can accumulate and provide tips to identify and remove it. I'll also cover other housekeeping tasks that APEX developers should know.
Server Side Condition Set to 'Never'
This is probably the biggest cause of clutter in APEX applications. This can happen in many areas, including Regions, Page Processes, Report Columns, Buttons, and Page Items.
Use APEX data dictionary views to identify offenders. Once detected, delete them. Here are two queries to get you started.
-- Regions SELECT workspace , application_id , page_id , page_name , region_name FROM apex_application_page_regions WHERE condition_type_code = 'NEVER'; -- Page Items SELECT workspace , application_id , item_name , page_id , page_name FROM apex_application_page_items WHERE condition_type_code = 'NEVER';
Unused APEX Components
Unused APEX components are a significant source of clutter. You create a LOV for a page item, delete the page item and forget to delete the LOV. This causes a confusing proliferation of LOVs. New developers wonder, should I use the EMPLOYEE, the EMPLOYEE_ACTIVE, or the EMPLOYEE_NEW LOV?
The most frequently un-referenced components (in order of the confusion they cause) are:
- Pages Spotlight Search can help, but there is no easy way to detect unused pages. It is worth the effort to rid your application of them
- Application and Page Items Use Spotlight Search to check for references to unused items and delete them. Also, check your PL/SQL source for references to items using APEX_UTIL.SET_SESSION_STATE or GET_SESSION_STATE
- List of Values, Plugins, Build Options, Lists, Authorization Schemes Use the 'Utilization' reports in APEX Builder to check for unused components and delete them
- Static Application Files (Major cause of application export file size bloat). Use Spotlight Search to find references to these files and delete them
- In-Line Custom JS and CSS 🧭 Page Property > Function and Global Variable Declaration / Execute when Page Loads / Inline CSS > Delete unused code
Other Housekeeping Tasks
- Session State Protection Check all pages and application items with Session State Protection Enabled. 🧭 Application > Shared Components > Security > Session State Protection
- Authorization Schemes Check all pages (except public pages) have authorization schemes. 🧭 Application > Page List > Actions > Columns > (show column 'Authorization Scheme')
- Embedded Code Check for embedded code that could be moved to PL/SQL packages or JS static files. 🧭 Application > Utilities > Embedded Code
- Debug Logs Check your debug logs (APEX Debug, Logger, etc.) for error messages that your users may not be reporting
Post-Oracle APEX Upgrade Housekeeping Tasks
- Run the application upgrade utility to check for components that need to be upgraded (e.g., Date Picker, Calendar). 🧭 Application > Utilities > Upgrade Application.
- Check that your application Compatibility Mode version matches the installed application version. 🧭 Application > Shared Components > Application Definition > Properties > Compatibility Mode.
- Refresh the Universal Theme 🧭 Application > Shared Components > User Interface Attributes.
- Drop the previous APEX version's product schema, e.g.,
DROP USER APEX_190100 CASCADE;