Определите список функций / операторов ИК-фильтра в Oracle APEX 19.1 - PullRequest
0 голосов
/ 29 января 2020

Есть ли способ скрыть некоторые функции / операторы в фильтре строк интерактивного отчета APEX 19.1? Некоторые конечные пользователи путаются с таким количеством функций / операторов, которые они не используют.

Спасибо за любые соображения.

enter image description here

Ответы [ 2 ]

1 голос
/ 11 февраля 2020

Хотя APEX не поддерживает это из коробки, это можно сделать с помощью JavaScript. Каждый раз, когда отображается диалоговое окно фильтра, содержимое передается с сервера на клиент и вводится в DOM. Вам просто нужно изменить контент, прежде чем пользователь сможет его увидеть. Одним из способов достижения этого является использование интерфейса MutationObserver: https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver

Вот несколько шагов, которые вы можете выполнить, чтобы сделать это (протестировано в APEX 19.2):

  1. Go для интерактивного отчета и установите Stati c ID на my-irr .
  2. Go на странице атрибуты уровня и добавьте следующий код в поле Объявление функции и глобальной переменной :

    function removeIRFilterOperators() {
      var irRegId = 'my-irr';
      var filterOperatorsToRemove = ['!=', 'ABS'];
      var observer;
    
      function detectFilterDialog(mutationsList) {
        for (var mIdx = 0; mIdx < mutationsList.length; mIdx++) {
          if (mutationsList[mIdx].addedNodes.length && 
            mutationsList[mIdx].addedNodes[0].classList &&
            mutationsList[mIdx].addedNodes[0].classList.contains('a-IRR-dialog--filter')) {
              removeOperators();
          }
        }
      }
    
      function removeOperators() {
        var anchors = document.querySelectorAll('#' + irRegId + '_row_filter_operators a');
    
        for (var aIdx = 0; aIdx < anchors.length; aIdx++) {
          if (filterOperatorsToRemove.includes(anchors[aIdx].textContent)) {
            anchors[aIdx].parentElement.parentElement.removeChild(anchors[aIdx].parentElement);
          }
        }
      }
    
      observer = new MutationObserver(detectFilterDialog);
    
      observer.observe(
        document, 
        {
          attributes: false,
          childList: true, 
          subtree: true
        }
      );
    }
    
    removeIRFilterOperators();
    

MutationObverver использует функцию detectFilterDialog, чтобы определить, когда фильтр диалог добавлен в DOM. Когда это происходит, функция removeOperators удаляет указанные опции из списка оператора. Все, что вам нужно сделать, это обновить массив filterOperatorsToRemove, включив в него список операторов, которые вы хотите удалить.

0 голосов
/ 30 января 2020

Если вы говорите о меню «Действия», тогда да - go для атрибутов ИК и включить / отключить любую опцию, которую вы хотите:

image

...