Проверка и блокировка запросов в анализе с использованием пользовательского кода JavaScript

Можно создавать пользовательские сценарии проверки в JavaScript для проверки критериев анализа и формул столбцов, а также блокировки недопустимых запросов.

Блокировка запросов в анализах

Пользователи, работающие с анализами, могут запустить пользовательский код JavaScript для проверки критериев анализа и формул столбцов. Проверка позволяет блокировать запросы при редактировании анализа. Доступ к пользовательскому коду JavaScript необходимо получать через веб-сервер. Чтобы включить эту функцию, администраторы должны указать URL-адрес веб-сервера в настройках системы и зарегистрировать этот веб-сервер в качестве безопасного домена.

  1. Разработайте пользовательские сценарии проверки на языке JavaScript, сохраните их на веб-сервере и запишите URL-адрес файла JavaScript (*.JS) с пользовательскими сценариями.
    Например, можно разработать сценарий блокировки, который будет храниться в myblocking.js, а URL может быть таким: http://example.com:8080/mycustomscripts/myblocking.js.
  2. Укажите URL-адрес веб-сервера в настройках системы:
    1. Нажмите Консоль, затем Расширенные настройки системы.
    2. В меню URL-адрес для блокировки запросов в анализах введите URL-адрес, указанный в шаге 1.
  3. Зарегистрируйте веб-сервер в качестве безопасного домена:
    1. Нажмите Консоль, а затем Безопасные домены.
    2. Добавьте запись для домена в URL-адресе, указанном в ходе выполнения шага 2.
      Например, можно добавить: example.com:8080.
    3. В качестве вариантов выберите Сценарий и Подключение.
  4. Протестируйте сценарии проверки:
    1. Откройте анализ.
    2. Запустите анализ с допустимыми и недопустимыми критериями.
    3. Убедитесь, что запросы блокируются верно.

Разработка JavaScript для блокировки анализов на основе критериев

При попытке пользователя запустить анализ Oracle Analytics вызывает функцию validateAnalysisCriteria Можно настроить функцию validateAnalysisCriteria для проверки и блокировки запросов на основе определенных критериев. Если функция возвращает значение true, запрос запускается. Если функция возвращает значение false или отображает сообщение, запрос блокируется.

Например, ниже приведен пример кода для программы JavaScript под названием myblocking.js.

// This is a blocking function. It ensures that users select what 
// the designer wants them to.
function validateAnalysisCriteria(analysisXml)
{
   // Create the helper object
   var tValidator = new CriteriaValidator(analysisXml);
   // Validation Logic
   if (tValidator.getSubjectArea() != "Sample Sales")
      return "Try Sample Sales?";
   if (!tValidator.dependentColumnExists("Markets","Region","Markets","District"))
   {
      // If validation script notifies user, then return false
      alert("Region and District are well suited, do you think?");
      return false;
   }
   if (!tValidator.dependentColumnExists("Sales Measures","","Periods","Year"))
   return "You selected a measure so pick Year!";
   if (!tValidator.filterExists("Sales Measures","Dollars"))
   return "Maybe filter on Dollars?";
   if (!tValidator.dependentFilterExists("Markets","Market","Markets"))
   return "Since you are showing specific Markets, filter the markets.";
   var n = tValidator.filterCount("Markets","Region");
   if ((n <= 0) || (n > 3))
      return "Select 3 or fewer specific Regions";
   return true;
}

Если функция возвращает любое другое значение, кроме false, критерии считаются допустимыми и анализ запускается. Функция также используется для проверки критериев для операций предварительного просмотра и сохранения.

Разработка JavaScript для блокировки анализов на основе формулы

При попытке пользователя ввести или изменить формулу столбца Oracle Analytics вызывает функцию validateAnalysisFormula для проверки операции. Можно настроить функцию validateAnalysisFormula для проверки и блокировки формул на основе определенных критериев. Если функция возвращает значение true, формула принимается. Если проверка не пройдена, функция возвращает значение false, формула отклоняется и отображается пользовательское сообщение.

Чтобы отобразить сообщение и разрешить пользователям продолжить, функция должна вернуть значение true. Чтобы заблокировать запрос, функция должна вернуть значение false или отобразить сообщение. Для исследования и проверки формулы в функции можно использовать строку JavaScript и методы регулярных выражений.

Служебные функции доступны для того, чтобы функция блокировки запроса могла проверять наличие фильтров, столбцов и т. д. См. раздел "Служебные функции проверки".

Например, следующий код показывает, как заблокировать запрос, если пользователь вводит недопустимую формулу.

// This is a formula blocking function. It makes sure the user doesn't enter an unacceptable formula.
function validateAnalysisFormula(sFormula, sAggRule)
{
   // don't allow the use of concat || in our formulas
   var concatRe = /\|\|/gi;
   var nConcat = sFormula.search(concatRe);
   if (nConcat >= 0)
      return "You used concatenation (character position " + nConcat + "). That isn't allowed.";
   // no case statements
   var caseRe = /CASE.+END/gi;
   if (sFormula.search(caseRe) >= 0)
      return "Don't use a case statement.";
   // Check for a function syntax: aggrule(formula) aggrule shouldn't contain a '.'
   var castRe = /^\s*\w+\s*\(.+\)\s*$/gi;
   if (sFormula.search(castRe) >= 0)
      return "Don't use a function syntax such as RANK() or SUM().";
    return true;
}

Служебные функции проверки

Несколько служебных функций проверки доступны для использования в файле JavaScript.

Служебная функция проверки Описание

CriteriaValidator.getSubjectArea()

Возвращает имя предметной области, на которую ссылается анализ. Обычно используется в инструкции switch внутри функции перед выполнением других проверок. Если анализ основан на наборе критериев, он возвращает null.

CriteriaValidator.tableExists(sTable)

Возвращает значение true, если указанная папка (таблица) была добавлена в анализ разработчиком контента, и false, если папка не была добавлена.

CriteriaValidator.columnExists(sTable, sColumn)

Возвращает значение true, если указанный столбец был добавлена в анализ разработчиком контента, и false, если столбец не был добавлена.

CriteriaValidator.dependentColumnExists(sCheckTable, sCheckColumn, sDependentTable, sDependentColumn)

Проверяет, существует ли dependentColumn, если присутствует checkColumn. Возвращает значение true, если checkColumn отсутствует или если присутствуют checkColumn и зависимый столбец. Если checkColumn и dependentColumn имеют значение null, папки проверяются. Если присутствует какой-либо столбец из checkTable, то должен присутствовать и столбец из dependentTable.

CriteriaValidator.filterExists(sFilterTable, sFilterColumn)

Возвращает значение true, если фильтр существует в указанном столбце, и false, если фильтр отсутствует.

CriteriaValidator.dependentFilterExists(sCheckTable, sCheckColumn, sFilterTable, sFilterColumn)

Проверяет, существует ли dependentFilter, если checkColumn присутствует в списке проекций. Возвращает значение true, если checkColumn отсутствует или если присутствует checkColumn и зависимый фильтр.

CriteriaValidator.filterCount(sFilterTable, sFilterColumn)

Возвращает количество значений фильтра, указанных для данного логического столбца. Если значение фильтра "equals," "null," "notNull", или "in", тогда возвращается количество выбранных значений. Если столбец не используется в фильтре, то возвращается ноль. Если столбец запрашивается без значения по умолчанию, возвращается -1. Для всех остальных операторов фильтра (таких как "greater than", "begins withс" и т. д.) возвращается значение 999, поскольку число значений не может быть определено.