Most people think of dashboards as a nice cockpit panel containing charts and graphics. While this example doesn't perfectly fit that description, it can be classified as a report that is summarized, and any elements which need attention are presented in a different color.
I've implemented similar solutions in the past, selecting an image reference in the SELECT clause of my report query, and then referencing this image reference as the column value. But this time, I first solicited the opinion of Shakeeb Rahman, the Design Lead for Oracle APEX, and he provided me a better solution. Using a simple combination of SQL and Font APEX, this can be easily and elegantly solved!
For this example, I created a new table CITY_STATUSES
create table city_statuses ( city_name varchar2(100) primary key, status1 number, status2 number, status3 number);
I populated it with data, and then I created a new application with an Interactive Report on the table. The query of the Interactive Report was simply:
select city_name, status1, status2, status3 from city_statuses
and my initial report looked like:
In my example, 1 is a good condition, 0 is a warning, and -1 indicates that an action must be taken.
Universal Theme
Universal Theme is a responsive, versatile, and customizable user interface for your Application Express apps. The Universal Theme in Oracle APEX 5.1 includes Font APEX, a drop-in replacement for Font Awesome, but with better graphics and more of them (courtesy of master graphic artist Bob Daly). You can learn more about the Universal Theme at https://apex.oracle.com/ut, and you can learn more about Font APEX at https://apex.oracle.com/fontapex.
Shakeeb recommended I use Font APEX and the Universal Theme helper classes to solve this problem. The helper classes can be used to set the colors on any custom component. You can find these Universal Theme helper classes at https://apex.oracle.com/ut -> Reference -> Color and Status Modifiers. What's nice about these colors is that they are coordinated with the Theme Roller in APEX. If you change the global success color in Theme Roller, the icon color will also be updated.
To solve this specific problem for the dashboard, I selected two additional columns in the SELECT clause for each STATUS column:
- status_icon - String representing the icon class and modifier class
- status_description - Description of the status icon, for accessibility purposes. This is very important, because we are changing from a discrete value in the report to an icon and a color. Without the description column, this information will be inaccessible.
- Success: fa-check-circle-o u-success-text
- Warning: fa-exclamation-triangle u-warning-text
- Error: fa-exception u-danger-text
The Solution
For each status column in my SELECT clause, I added a corresponding icon and description column:select city_name, status1, status2, status3, case status1 when 1 then 'fa-check-circle-o u-success-text' when 0 then 'fa-exclamation-triangle u-warning-text' when -1 then 'fa-exception u-danger-text' end status1_icon, case status1 when 1 then 'OK' when 0 then 'Warning' when -1 then 'Danger' end status1_description, case status2 when 1 then 'fa-check-circle-o u-success-text' when 0 then 'fa-exclamation-triangle u-warning-text' when -1 then 'fa-exception u-danger-text' end status2_icon, case status2 when 1 then 'OK' when 0 then 'Warning' when -1 then 'Danger' end status2_description, case status3 when 1 then 'fa-check-circle-o u-success-text' when 0 then 'fa-exclamation-triangle u-warning-text' when -1 then 'fa-exception u-danger-text' end status3_icon, case status3 when 1 then 'OK' when 0 then 'Warning' when -1 then 'Danger' end status3_description from city_statuses
After saving the updated query for the Interactive Report, I edited these columns in Page Designer and changed the property Type from Plain Text to Hidden Column.
Then, for the columns STATUS1, STATUS2 and STATUS3, in Page Designer I changed the property HTML Expression to:
<span class="fa #STATUS1_ICON#" title="#STATUS1_DESC#"></span>
Obviously, replace STATUS1 with the correct corresponding column name. I adjusted the heading and column alignment of each column to center, and voila! It couldn't be easier.
If for some reason you want to make the icons even larger, no problem! Simply add the fa-2x modifier in the HTML expression (after #STATUS1_ICON#).
Experiment with the modifiers of Font APEX at https://apex.oracle.com/fontapex. Choose your icon, vary the size, animation, modifier, and status. Just don't go crazy - we don't want to see the world's APEX apps introduce the equivalent of the <marquee> tag again.
Shakeeb presented the Universal Theme, these modifiers, and much more in a recorded Webinar from ODTUG.
P.S. While you might be tempted to simplify the query and use an inline PL/SQL function in the WITH clause of the query, you most likely will encounter error "ORA-32034: unsupported use of WITH clause". This is because the Interactive Report will enclose your original query in a subquery, and in general, inline PL/SQL functions in subqueries are intentionally prohibited by the Oracle Database. However, the solution above also works with a Classic Report, and in that case, you could use an inline PL/SQL function in the WITH clause of the query.