Validar e Bloquear Consultas em Análises Usando JavaScript Personalizado

Você pode desenvolver scripts de validação em JavaScript para validar critérios de análise e fórmulas de coluna, além de bloquear consultas inválidas.

Bloquear Consultas em Análises

Os usuários que trabalham com análises podem chamar o JavaScript personalizado para validar critérios de análise e fórmulas de coluna. A validação permite que as consultas sejam bloqueadas ao editar uma análise. O JavaScript personalizado deve poder ser acessado por meio de um servidor Web. Para ativar essa funcionalidade, os administradores especificam o URL do servidor Web nas definições do sistema e registram o servidor Web como domínio seguro.

  1. Desenvolva seus scripts de validação personalizados em JavaScript, armazene-os em um servidor Web e anote o URL que aponta para o arquivo JavaScript (*.JS) que contém os scripts personalizados.
    Por exemplo, você poderá desenvolver um script de bloqueio que seja armazenado em myblocking.js e o URL poderá ser:http://example.com:8080/mycustomscripts/myblocking.js.
  2. Especifique o URL do servidor Web nas definições do sistema:
    1. Clique em Console e depois clique em Definições Avançadas do Sistema.
    2. Em URL para Bloquear Consultas em Análises, digite o URL que você anotou na Etapa 1.
  3. Registre o servidor web como um domínio seguro:
    1. Clique em Console e depois clique em Domínios Seguros.
    2. Adicione uma entrada para o domínio no URL que você especificou na Etapa 2.
      Por exemplo, você poderá adicionar: example.com:8080.
    3. Para obter as opções, selecione Script e Conectar.
  4. Teste seus scripts de validação:
    1. Abra uma análise.
    2. Execute a análise com critérios válidos e inválidos.
    3. Verifique se as consultas são bloqueadas como deveriam.

Desenvolver JavaScript para Bloquear Análises com Base em Critérios

Sempre que um usuário tenta executar uma análise, o Oracle Analytics chama a função validateAnalysisCriteria. Você pode personalizar validateAnalysisCriteria para validar e bloquear consultas com base em seus próprios critérios específicos. Se a função retornar true, a consulta será executada. Se a função retornar false ou exibir uma mensagem, a consulta será bloqueada.

Por exemplo, veja a seguir o código de amostra de um programa JavaScript chamado 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;
}

Se a função retornar qualquer informação diferente de false, os critérios serão considerados válidos e a análise será executada. A função também é usada para validar critérios das operações de visualização e salvamento.

Desenvolver JavaScript para Bloquear Análises com Base em Fórmula

Sempre que um usuário tenta digitar ou modificar uma fórmula de coluna, o Oracle Analytics chama a função validateAnalysisFormula para verificar a operação. Você pode personalizar validateAnalysisFormula para validar e bloquear fórmulas com base em seus próprios critérios específicos. Se a função retornar true, a fórmula será aceita. Se a validação falhar e a função retornar false, a fórmula será rejeitada e sua mensagem personalizada será exibida.

Para exibir uma mensagem e permitir que os usuários continuem, a função tem que retornar true. Para bloquear a consulta, sua função deve retornar false ou exibir uma mensagem. Você pode usar uma string JavaScript e técnicas de expressão regular em sua função para investigar e validar a fórmula.

Estão disponíveis funções auxiliares para que a função de bloqueio de consulta possa verificar filtros, colunas etc. Consulte Funções Auxiliares de Validação.

Por exemplo, o código a seguir mostra como bloquear uma consulta se um usuário digitar uma fórmula inaceitável.

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

Funções Auxiliares de Validação

Você tem disponível para uso diversas funções auxiliares de validação em um arquivo JavaScript.

Função Auxiliar de Validação Descrição

CriteriaValidator.getSubjectArea()

Retorna o nome da área de assunto referenciada pela análise. Em geral, é usada em uma instrução de alternância dentro da função antes de fazer outra validação. Se a análise for baseada em critérios, ela retornará null.

CriteriaValidator.tableExists(sTable)

Retorna true quando a pasta (tabela) especificada foi adicionada à análise pelo designer de conteúdo e false quando a pasta não foi adicionada.

CriteriaValidator.columnExists(sTable, sColumn)

Retorna true quando a coluna especificada foi adicionada à análise pelo designer de conteúdo e false quando a coluna não foi adicionada.

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

Verifica para garantir que dependentColumn exista se checkColumn estiver presente. Vai retornar true se checkColumn não estiver presente ou checkColumn e a coluna dependente estiverem presentes. Se checkColumn e dependentColumn forem null, as pastas serão validadas. Se qualquer coluna de checkTable estiver presente, uma coluna de dependentTable deverá estar presente.

CriteriaValidator.filterExists(sFilterTable, sFilterColumn)

Retornará true se um filtro existir na coluna especificada e false se nenhum filtro estiver presente.

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

Verifica para garantir que dependentFilter exista se checkColumn estiver presente na lista de projeção. Vai retornar true se checkColumn não estiver presente ou checkColumn e o filtro dependente estiverem presentes.

CriteriaValidator.filterCount(sFilterTable, sFilterColumn)

Retorna o número de valores de filtro especificados para a coluna lógica em questão. Se o valor do filtro for "equals," "null," "notNull" ou "in", retornará o número de valores escolhidos. Se a coluna não for usada em um filtro, a função retornará zero. Se a coluna for solicitada sem nenhum padrão, o valor retornado será -1. Para todos os demais operadores de filtro (como "greater than," "begins with" etc.), a função retorna 999, visto que não é possível determinar o número de valores.