在 Oracle APEX 19.1 中确定 IR 滤镜的 functions/operators 列表

Determine the list of IR filter's functions/operators in Oracle APEX 19.1

有没有办法在 APEX 19.1 的交互式报表的行过滤器中隐藏一些 Functions/Operators?一些最终用户对他们不使用的许多 functions/operators 感到困惑。

感谢您的考虑。

如果您谈论的是 "Actions" 菜单,那么可以 - 转到 IR 的属性和 enable/disable 您想要的任何选项:

虽然 APEX 不支持开箱即用,但可以使用 JavaScript。每次显示过滤器对话框时,内容都会从服务器带到客户端并注入 DOM。您只需要在用户看到之前修改内容。实现此目的的一种方法是使用 MutationObserver 接口:https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver

以下是您可以遵循的一些步骤(已在 APEX 19.2 中测试):

  1. 转到交互式报告并将静态ID设置为my-irr
  2. 转到页面级属性,将以下代码添加到函数和全局变量声明字段:

    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 数组以包含您要删除的运算符列表。