Validación y bloqueo de consultas en análisis mediante JavaScript personalizado

Puede desarrollar scripts de validación personalizados en JavaScript para validar criterios de análisis y fórmulas de columna, y para bloquear consultas no válidas.

Bloqueo de consultas en análisis

Los usuarios que trabajan con análisis pueden llamar un JavaScript personalizado para validar los criterios de análisis y las fórmulas de columna. La validación permite que se bloqueen las columnas al editar un análisis. El JavaScript personalizado debe ser accesible a través de un servidor web. Para activar esta función, los administradores especifican la URL del servidor web en la configuración del sistema y registran el servidor web como un dominio seguro.

  1. Desarrolle scripts de validación personalizados en JavaScript, almacénelos en un servidor web y tome nota de la URL que apunta al archivo de JavaScript (*.JS) que contiene los scripts personalizados.
    Por ejemplo, podría desarrollar un script de bloqueo y almacenarlo en myblocking.js, y la URL podría ser:http://example.com:8080/mycustomscripts/myblocking.js.
  2. Especifique la URL del servidor web en la configuración del sistema:
    1. Haga clic en Consola y, a continuación, en Configuración del sistema.
    2. En URL de bloqueo de consultas en análisis, introduzca la URL que ha anotado en el paso 1.
  3. Registre el servidor web como dominio seguro:
    1. Haga clic en Consola y, a continuación, en Dominios seguros.
    2. Agregue una entrada para el dominio en la URL que especificó en el paso 2.
      Por ejemplo, puede agregar: example.com:8080.
    3. En las opciones, seleccione Script y Conectar.
  4. Pruebe los scripts de validación:
    1. Abra un análisis.
    2. Ejecute el análisis con criterios válidos y no válidos.
    3. Verifique que las consultas se bloquean según lo previsto.

Desarrollo de JavaScript para bloquear análisis en función de un criterio

Siempre que un usuario intenta ejecutar un análisis, Oracle Analytics llama a la función validateAnalysisCriteria. Puede personalizar validateAnalysisCriteria para validar y bloquear consultas según sus propios criterios específicos. Si la función devuelve true, se ejecuta la consulta. Si la función devuelve false o muestra un mensaje, se bloquea la consulta.

Por ejemplo, a continuación se incluye un código de ejemplo para un programa JavaScript denominado 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;
}

Si la función devuelve una salida distinta de false, se considera que los criterios son válidos y se ejecuta el análisis. La función también se utiliza para validar criterios para operaciones de vista previa y guardado.

Desarrollo de JavaScript para bloquear análisis en función de una fórmula

Siempre que un usuario intenta introducir o modificar una fórmula de columna, Oracle Analytics llama a la función validateAnalysisFormula para verificar la operación. Puede personalizar validateAnalysisFormula para validar y bloquear fórmulas según sus propios criterios específicos. Si la función devuelve true, se acepta la fórmula. Si falla la validación, la función devuelve false, se rechaza la fórmula y aparece su mensaje personalizado.

Para mostrar un mensaje y permitir a los usuarios continuar, la función debe devolver true. Para bloquear la consulta, la función debe devolver false o mostrar un mensaje. Puede utilizar una cadena de JavaScript y técnicas de expresión regular en la función para investigar y validar la fórmula.

Hay funciones de asistente disponibles para que la función de bloqueo de consulta pueda comprobar si hay filtros, columnas, etc. Consulte Funciones del asistente de validación.

Por ejemplo, el siguiente código muestra cómo bloquear una consulta si un usuario introduce una fórmula inaceptable.

// 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;
}

Funciones del asistente de validación

En un archivo JavaScript dispone de varias funciones del asistente de validación para su uso.

Función del asistente de validación Descripción

CriteriaValidator.getSubjectArea()

Devuelve el nombre del área temática al que hace referencia el análisis. Se utiliza generalmente en una sentencia switch dentro de la función antes de realizar otra validación. Si el análisis son criterios basados en juegos, devuelve null.

CriteriaValidator.tableExists(sTable)

Devuelve true si la carpeta (tabla) especificada la ha agregado al análisis el diseñador de contenido, y false si no se ha agregado la carpeta.

CriteriaValidator.columnExists(sTable, sColumn)

Devuelve true si la columna especificada la ha agregado al análisis el diseñador de contenido, y false si no se ha agregado la columna.

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

Se asegura de que dependentColumn existe si checkColumn está presente. Devuelve true si checkColumn no está presente, o si checkColumn y la columna dependiente están presentes. Si checkColumn y dependentColumn son null, se validan las carpetas. Si hay alguna columna de checkTable presente, debe haber una columna de dependentTable presente.

CriteriaValidator.filterExists(sFilterTable, sFilterColumn)

Devuelve true si existe un filtro de la columna especificada, y false si no hay ningún filtro presente.

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

Se asegura de que dependentFilter existe si checkColumn está presente en la lista de proyecciones. Devuelve true si checkColumn no está presente, o si checkColumn y el filtro dependiente están presentes.

CriteriaValidator.filterCount(sFilterTable, sFilterColumn)

Devuelve el número de valores de filtro que se han especificado para la columna lógica proporcionada. Si el valor de filtro es "equals," "null," "notNull" o "in", devuelve el número de valores seleccionados. Si la columna no se utiliza en un filtro, devuelve cero. Si se solicita la columna sin ningún valor por defecto, devuelve -1. Para todos los demás operadores de filtro (como "greater than," "begins with", etc.), devuelve 999, ya que no se puede determinar el número de valores.