Oracle APEX - условно изменяющий цвет текста в ячейке интерактивного отчета на основе содержания? - PullRequest
3 голосов
/ 08 декабря 2011

Хорошо ... Итак.У меня есть интерактивный отчет в APEX, который отображает данные о документах в нашей системе.Предполагается, что наши документы будут пересматриваться каждые два года, а в таблице есть столбец, в котором указана дата следующего рассмотрения документа.Мы хотим визуально указать либо в ячейке, которая содержит дату, либо в другой ячейке в строке, когда дата достигает определенных ориентиров (т.е. когда дата находится в пределах 6 месяцев от текущей даты, 3 месяца, 2, 1 и т. Д.)

Надеюсь, мне нужно изменить цвет текста (или фона) определенной ячейки на основе значения этой ячейки или значения другой ячейки в той же строке.Должен быть процесс или какая-то функция, выполняющая некоторые вычисления для определения промежутка между sysdate и датой, содержащейся в ячейке ... Не обязательно вычислять, когда страница загружена, но ежедневный или еженедельный процесс иличто-то было бы хорошо.

Можно ли настроить процессы или триггеры, которые выполняются ежедневно без взаимодействия с человеком?У меня также есть необходимость использовать те же функции для отправки электронных писем с напоминаниями об этих предстоящих сроках.(т. е. когда по истечении 6 месяцев документ подлежит рассмотрению, электронное письмо будет отправлено через 3 месяца, 2, 1 и т. д.)

Ответы [ 2 ]

4 голосов
/ 04 сентября 2015

В Интерактивном отчете вы также можете определить ОТЧЕТЫ (с ОСНОВНЫМИ), которые помогут вам.

Выберите кнопку ДЕЙСТВИЯ, затем ФОРМАТИРОВАТЬ (во всплывающем окне) и выделите

В HighLight вы можете указать имя, тип (строку или ячейку), цвет фона и текста, а также КОЛОННУ, для которой вы хотите использовать ОПЕРАТОР и ВЫРАЖЕНИЕ. Вы применяете выделение (Делайте несколько выделений / другое имя, когда вам нужно более одного выделения цвета в зависимости от ваших ВЫРАЖЕНИЙ). Вместе с наиболее важными фильтрами СОХРАНИТЕ как отчет (первый основной).

После определения основного отчета вы можете принять его за базовый отчет. Создайте несколько других отчетов (и сохраните их) с другими фильтрами, но с теми же основными моментами, что и у основного отчета.

Веселись вместе с ним.

4 голосов
/ 08 декабря 2011

Пример с hiredate на emp: я собираюсь покрасить ячейки, которые> 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 динамических действия для раскраски строк в отчетах: действие при загрузке и после обновления. Если вы пропустите после обновления, строки не будут окрашены, например, после нумерации страниц, из-за частичного обновления страницы.

Динамическое действие одно: после обновления для региона:

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 является датой, при необходимости обязательно обращайтесь с ней! Также обратите внимание: если ваш формат даты установлен как ДД-МЕС-ГГГГ, то вам придется сопоставлять число с месяцем (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 ). Вместо css () вы можете использовать, например, addClass, если это больше, чем вы хотели бы.

Имейте в виду: ИК идут со встроенными действиями при наведении мыши. Это приводит к тому, что окрашенные ячейки не отображаются в своем цвете при наведении мыши. Если вы не хотите этого, вам понадобится другое динамическое действие для событий mouseover / mouseleave и нацеливание на эти необходимые ячейки.

Что касается запланированных заданий: проверьте DBMS_JOBS .

...