There is a heap of information out there, and some of it is becoming dated so I thought I'd offer what seems to be an elegant solution - particularly when you're not targeting a specific column.
We can thank Tyler Muth for an APEX 3.x compatible solution that highlights the text within the column. He described how to use the HTML Expression column attribute - I still use this frequently today.
There are a few solutions that use report templates, but they can be a little fiddly and I don't find them as flexible.
Jari Laine brings us into the APEX 4.x world using jQuery within a dynamic action.
Then I found this stackoverflow post by Tom Petrus (who has also assisted me with jQuery on the OTN forums), which I thought I could adapt for my purposes.
Since I wanted to highlight cells with certain values regardless of column/row, I defined a classic report with a static ID of 'pivot' with the PIVOT sql found in this post.
I added this to the "Execute when Page Loads" page attribute - it could utilised within a dynamic action, if required.
$("#report_pivot tbody tr td").each(function(){ if ($(this).attr('headers') != 'TOT') { if (parseInt($(this).text()) < 1000) $(this).css({"background-color":"SandyBrown"}); else if(parseInt($(this).text()) > 2000) $(this).css({"background-color":"lightgreen"}); } });I wanted to ignore the 'Total' column, so I found the first IF statement satisfies that easier than a CSS exclusion clause.
This block could be adapted to do all sorts of things - for instance, I've cleared out the cells in other reports where the value equals 100.
I also added this as inline CSS just to border all the report cells.
table.uReportStandard>tbody>tr>td { border: 1px solid #ddd; }Here is a screenshot of the final output.
Classic Report with cell highlighting |
Run the demo to see it in action. Note all under 1000 are orange, and above 2000 are green. This is done after the page is generated. |
No comments:
Post a Comment