Oracle APEX - 基于包含值在交互式报表的单元格中有条理地更改文本颜色?

时间:2011-12-08 14:50:24

标签: date process oracle-apex

好的......所以。我在APEX中有一个交互式报告,显示有关我们系统中文档的数据。我们的文件应每两年审核一次,表格中有一栏包含下次审核文件的日期。当日期达到某些基准时(即当日期在当前日期的6个月内,3个月,2,1等)时,我们希望在包含日期的单元格或行中的其他单元格中直观地指示。

我需要做的是根据该单元格的值或同一行中另一个单元格的值来更改特定单元格的文本(或背景)的颜色。需要有一个进程或一些函数来进行一些计算以确定sysdate与单元格中包含的日期之间的跨度...它不一定需要计算何时加载页面而是每天或每周进程或有些东西会很好。

是否可以设置每天执行而无需人工干预的流程或触发器?我还需要使用相同的功能发送有关这些即将到来的截止日期的提醒电子邮件。 (即当文件需要审核6个月后,将发送电子邮件,3个月,2个,1个等)。

2 个答案:

答案 0 :(得分:4)

在emp上使用hiredate的示例:我要为<>的单元格着色。 11000.(sysdate-hiredate的范围从大约10k到12k)。您可以使用在查询中计算的字段,或者通过某个过程填写的字段,无关紧要:)

select empno, ename, job, mgr, hiredate, sal, comm, deptno, 
       trunc((trunc(sysdate)-hiredate)) to_colour_or_not 
  from emp

您需要2个动态操作来为报告中的行着色:onload操作和after refresh。如果您跳过后刷新,则由于部分页面刷新,例如分页后行不会被着色。

动态操作一:刷新区域后:

dynamic action: after refresh

真实行动:

After refresh: true action

$("td[headers='TO_COLOUR_OR_NOT']").each(function(){
alert($(this).text());
   if(parseInt($(this).text()) > 11000){
      $(this).css({"background-color":"red"});
   };
});

使用一列作为条件为另一列着色的示例。始终要小心你测试的内容和测试内容!例如,hiredate列是一个日期,请务必在必要时对其进行处理!另外要注意:如果您的日期格式设置为DD-MON-YYYY,那么您必须进行月份到数字的映射(JAN = 1,DEC = 12)!也许可以选择更改此列的日期格式...

$("td[headers='HIREDATE']").each(function(){
   var i_date = $(this).text();
   //date format = MM/DD/YYYY
   //be carefull with date formats. 
   //in my case, i know my date format and know it won't change
   //my code is far from a complete parse of possible date values!
   var dMonth = i_date.substring(0, 2),
       dDay = i_date.substring(3, 5),
       dYear = i_date.substring(6);    
   var d = new Date(dYear, dMonth, dDay, 0, 0, 0, 0);

   if(d.getFullYear() <= 1981){
      //we are looping over TD elements. I want to colour the 
      //column ENAME in red when the condition is true for this row.
      //so, $(this) = TD element we loop with. parent = TR element,
      //then back to the children of the row
      $(this).parent().children("td[headers='ENAME']").css({"background-color":"red"});
   };
});

第二个动态操作:加载

Dynamic action: Onload

作为真实操作,请使用与刷新的真实操作相同的代码。

使用JS,你可以做任何你想做的事情:你只需要知道你想要绘制哪些单元格。使用[headers='']定位您想要的单元格(jquery selectors)。 您可以使用addClass代替css(),如果这更符合您的要求。

请注意:IR带有内置鼠标悬停操作。这会导致绘制的单元格在鼠标悬停操作时不显示其颜色。如果您不想这样做,则需要针对mouseover / mouseleave事件执行另一个动态操作,并定位所需的那些单元格。

关于预定的工作:查看DBMS_JOBS

答案 1 :(得分:4)

在交互式报告中,您还可以定义REPORTS(使用HIGHLIGHTS),这将为您提供帮助。

选择按钮ACTIONS,然后选择FORMAT(在弹出窗口中)和HIGHLIGHT

在HighLight中,您可以指定名称,类型(行或单元格),背景和文本颜色以及要使用OPERATOR和EXPRESSION的COLUMN。 您应用突出显示(当您需要多个颜色突出显示时,根据您的EXPRESSION-s制作多个突出显示/其他名称)。 与最重要的过滤器一起,然后将其保存为报告(第一小学)。

定义主要报告后,您可以将此作为基础报告。使用其他过滤器制作一些其他报告(并保存它们),但与主要报告具有相同的要点)。

有乐趣。