This discussion is archived
6 Replies Latest reply: Feb 5, 2013 9:15 AM by Howard (... in Training) RSS

Classic report - Highlight row

VANJ Journeyer
Currently Being Moderated
APEX 4.2.1

With all the latest and greatest dynamic action and jQuery goodness in 4.2.1, what is the easiest, declarative way to highlight rows in a classic report region (Generic Column Template) based on data condition using values on the row, using #COL# notation? e.g. If SAL > 1000 and DEPT = Marketing, highlight row in red or some such.

In prior versions, this involved copying the Generic Column Template to one used just by this report and use the (up to 4) Column Templates with a PL/SQL expression.

Thanks
  • 1. Re: Classic report - Highlight row
    Andreas Wismann Explorer
    Currently Being Moderated
    Custom report templates are okay if your needs are straightforward. But you said it already, there are only four different flavors to chose from.

    Here is a solution that'll work on all pages if once installed and can be extended to a multitude of visual attributes. Only an example that you may want to adapt to your liking.

    Edit Page, "CSS, Inline", or via Shared Components > CSS files
    td.color1 {background-color:#9F9} /* Table cell gets colored in light green  */
    td.color2 {background-color:#FF9} /* Table cell gets colored in light yellow */
    td.color3 {background-color:#F99} /* Table cell gets colored in light red    */
    /** and so forth, followed by as many declarations as you need... */
    Page Template, "Function and Global Variable Declaration":
    /** Change the visual appearance of your classic report as you like after it's rendered */
    function customClassicReportDisplay(){
      /** Transfer the color class from the text to the table cell */
      $('td span.color1').closest('td').addClass('color1');
      $('td span.color2').closest('td').addClass('color2');
      $('td span.color3').closest('td').addClass('color3');
      // and so forth, followed by as many declarations as you need...
    }
    This jQuery code can be simplified, especially the handling of many lines for many colors can still be compacted, which makes it more difficult to understand though.

    Page Template, "Execute when Page Loads":
    /** Perform the function on Page Load */
    customClassicReportDisplay();
    /** Perform the function after Partial Page Rendering */
    $('form').bind('apexafterrefresh', function(){
      customClassicReportDisplay();
    });
    Here comes the trick. In the SQL statement, you wrap a <span> HTML tag with a different class declaration around each value that you want to color.
    SELECT '<span class="color' || case when some_value > 100 then '2' else null end || '">' || some_value       || '</span>' AS some_value
         , '<span class="color' || decode(some_other_value, 'too much', '3', NULL)   || '">' || some_other_value || '</span>' AS some_other_value
         , '<span class="color' || case when last_value between  0 and  10 then '1'
                                        when last_value between 11 and  50 then '2'
                                        when last_value between 51 and 100 then '3'
                                        else null end                                || '">' || last_value       || '</span>' AS last_value
      FROM ...
    This obviously makes the SQL a bit more complicated but in my opinion, I think this is a data driven topic and therefore just fine. Hence you say "depending on value ranges I want to change something" - and that belongs to SQL. WHAT you want to do (here: change color) is then up to your JS and CSS declaration. If you shift the SQL code into a view it's better to maintain and won't get spoiled by non-savvy third party developers...

    I know that's not what you originally asked for, because there is no #COL# notation, but for me it's the most flexible solution I can think of under APEX.
  • 2. Re: Classic report - Highlight row
    VANJ Journeyer
    Currently Being Moderated
    Hm, thanks. This is too much work. :-) APEX has spoiled us with easy, declarative solutions.

    Feature request - APEX should add a section to Report Attributes to specify a PL/SQL expression using #COL# substitutions and a CSS/JS hook into the current report row (this.currentRow or some such) so we can style the current row/cell as needed.
  • 3. Re: Classic report - Highlight row
    Andreas Wismann Explorer
    Currently Being Moderated
    Where can I sign? :-)
  • 4. Re: Classic report - Highlight row
    Howard (... in Training) Pro
    Currently Being Moderated
    At one time there was an active enhancement thread Enhancement Request Thread : Post 3.1 but it's last entry is from 2010. Maybe the forum tells you where to make enhancement / feature requests but I don't see any reference o such. I hope the new forum identifies this prominently. Ah, could that be a new feature?

    Howard
  • 5. Re: Classic report - Highlight row
    VANJ Journeyer
    Currently Being Moderated
    https://apex.oracle.com/pls/apex/f?p=55447:1 appears to be the official Oracle sanctioned feature request board. Logged this request there.
  • 6. Re: Classic report - Highlight row
    Howard (... in Training) Pro
    Currently Being Moderated
    Yes. I just found the reference myself. Thanks.

Legend

  • Correct Answers - 10 points
  • Helpful Answers - 5 points