Validar e Bloquear Consultas nas Análises Utilizando JavaScript Customizado

Pode desenvolver scripts de validação em JavaScript para validar critérios de análise e fórmulas de colunas, e bloquear consultas inválidas.

Bloquear Consultas nas Análises

Os utilizadores a trabalhar com análises podem invocar o JavaScript customizado de modo a validar os critérios de análise e as fórmulas de coluna. A validação permite que as consultas sejam bloqueadas ao editar uma análise. O JavaScript customizado deve ser acessível através de um servidor Web. Para ativar esta funcionalidade, os administradores especificam o URL do servidor Web nas definições do sistema e registam o servidor Web como um domínio seguro.

  1. Desenvolva os seus scripts de validação customizada no JavaScript, armazene-os num servidor Web e anote o URL que aponta para o ficheiro JavaScript (*.JS) com os scripts customizados.
    Por exemplo, poderá desenvolver um script de bloqueio que armazena em myblocking.js e o URL poderá ser:http://example.com:8080/mycustomscripts/myblocking.js.
  2. Especifique o URL do seu servidor Web nas definições do sistema:
    1. Clique em Consola e, em seguida, clique em Definições do Sistema.
    2. Em URL para Bloquear Consultas nas Análises, introduza o URL que anotou no Passo 1.
  3. Registe o servidor da Web como um domínio seguro:
    1. Clique em Consola e, em seguida, clique em Domínios Seguros.
    2. Acrescente uma entrada para o domínio no URL que especificou no Passo 2.
      Por exemplo, poderá acrescentar: example.com:8080.
    3. Para opções, selecione Script e Ligar.
  4. Teste os 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 estão bloqueadas como esperado.

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

Sempre que um utilizador tentar executar uma análise, o Oracle Analytics invoca a função validateAnalysisCriteria. Pode customizar validateAnalysisCriteria para validar e bloquear consultas com base nos seus próprios critérios específicos. Se a função devolver true, a consulta é executada. Se a função devolver false ou apresentar uma mensagem, a consulta é bloqueada.

Por exemplo, o seguinte é o código de exemplo para um 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;
}

Se a função devolver qualquer valor diferente de false, os critérios são considerados válidos e a análise é executada. A função também é utilizada para validar critérios para operações de pré-visualização e de gravação.

Desenvolver JavaScript para Bloquear Análises Com Base em Fórmulas

Sempre que um utilizar tentar introduzir ou modificar uma fórmula de coluna, o Oracle Analytics invoca a função validateAnalysisFormula para verificar a operação. Pode customizar validateAnalysisFormula para validar e bloquear fórmulas com base nos seus próprios critérios específicos. Se a função devolver true, a fórmula é aceite. Se a validação falhar, a função devolve false, a fórmula é rejeitada e a sua mensagem customizada é apresentada.

Para apresentar uma mensagem e permitir que os utilizadores continuem, a sua função deve devolver true. Para bloquear a consulta, a sua função deve devolver false ou apresentar uma mensagem. Pode utilizar uma cadeia de caracteres de JavaScript e técnicas de expressões regulares na sua função para investigar e validar a fórmula.

As funções de auxílio estão disponíveis para que a função de bloqueio de consulta possa verificar se existem filtros, colunas, entre outros. Consulte Funções do Auxílio de Validação.

Por exemplo, o seguinte código mostra como bloquear uma consulte se um utilizador introduzir 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 do Auxílio de Validação

Estão disponíveis várias funções de auxílio de validação num ficheiro JavaScript para que possa utilizar.

Função do Auxílio de Validação Descrição

CriteriaValidator.getSubjectArea()

Devolve o nome da área de atividade referida pelo analista. É geralmente utilizado numa instrução switch na função antes de fazer outra validação. Se a análise for um critério baseado num conjunto, null é devolvido.

CriteriaValidator.tableExists(sTable)

Devolve true se a pasta especificada (tabela) tiver sido acrescentada à análise pelo designer de conteúdo e false se a pasta não tiver sido acrescentada.

CriteriaValidator.columnExists(sTable, sColumn)

Devolve true se a coluna especificada tiver sido acrescentada à análise pelo designer de conteúdo e false se a coluna não tiver sido acrescentada.

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

Verifica para garantir que existe dependentColumn se checkColumn estiver presente. Devolve true se não estiver presente checkColumn ou se estiverem presentes checkColumn e o filtro dependente. Se checkColumn e dependentColumn forem null, as pastas são validadas. Se alguma coluna de checkTable estiver presente, deve estar presente uma coluna da dependentTable.

CriteriaValidator.filterExists(sFilterTable, sFilterColumn)

Devolve true se um filtro existir na coluna especificada e false se não existir nenhum filtro.

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

Verifica para garantir que existe dependentFilter se checkColumn se encontrar na lista de projeção. Devolve true se não estiver presente checkColumn e se estiverem presentes checkColumn e o filtro dependente.

CriteriaValidator.filterCount(sFilterTable, sFilterColumn)

Devolve o número de valores de filtro que são especificados para a coluna lógica fornecida. Se o valor de filtro for "equals", "null", "notNull" ou "in", devolve o número de valores escolhidos. Se a coluna não for utilizada num filtro, devolve zero. Se a coluna for solicitada sem valores por omissão, devolve -1. Para todos os outros operadores de filtro (como "greater than", "begins with", entre outros), devolve 999, uma vez que o número de valores não pode ser determinado.