Validation et blocage de requêtes dans les analyses à l'aide de scripts JavaScript personnalisés

Vous pouvez développer des scripts de validation en JavaScript afin de valider les critères d'analyse et les formules de colonne, et de bloquer les requêtes non valides.

Blocage de requêtes dans les analyses

Les utilisateurs se servant d'analyses peuvent appeler des scripts JavaScript personnalisés afin de valider les critères d'analyse et les formules de colonne. La validation permet de bloquer les requêtes lors de la modification d'une analyse. Le script JavaScript personnalisé doit être accessible via un serveur Web. Pour activer cette fonctionnalité, les administrateurs indiquent l'URL du serveur Web dans les paramètres système et inscrivent le serveur Web en tant que domaine sécurisé.

  1. Développez vos scripts de validation personnalisés en JavaScript, stockez-les dans un serveur Web et notez l'URL pointant vers le fichier JavaScript (*.JS) contenant les scripts personnalisés.
    Par exemple, vous pouvez développer un script de blocage que vous stockez dans myblocking.js dont l'URL serait : http://example.com:8080/mycustomscripts/myblocking.js.
  2. Indiquez l'URL de votre serveur Web dans les paramètres système :
    1. Cliquez sur Console, puis sur Paramètres système.
    2. Dans URL pour le blocage de requêtes dans les analyses, saisissez l'URL que vous avez notée à l'étape 1.
  3. Inscrivez le serveur Web en tant que domaine sécurisé :
    1. Cliquez sur Console, puis sur Domaines sécurisés.
    2. Ajoutez une entrée pour le domaine dans l'URL que vous avez indiquée à l'étape 2.
      Vous pouvez par exemple ajouter : example.com:8080.
    3. Pour les options, sélectionnez Script et Connecter.
  4. Testez les scripts de validation :
    1. Ouvrez une analyse.
    2. Exécutez l'analyse avec des critères à la fois valides et non valides.
    3. Vérifiez que les requêtes ont été bloquées comme prévu.

Développement de scripts JavaScript pour bloquer les analyses en fonction de critères

Lorsqu'un utilisateur tente d'exécuter une analyse, Oracle Analytics appelle la fonction validateAnalysisCriteria. Vous pouvez personnaliser validateAnalysisCriteria pour valider et bloquer les requêtes en fonction de vos propres critères spécifiques. Si la fonction renvoie true, la requête est exécutée. Si la fonction renvoie false ou si elle affiche un message, la requête est bloquée.

Voici un exemple de code pour un programme JavaScript appelé 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 fonction renvoie une valeur différente de false, les critères sont considérés comme valides et l'analyse est exécutée. La fonction est également utilisée pour valider les critères des opérations d'aperçu et d'enregistrement.

Développement de scripts JavaScript pour bloquer les analyses en fonction d'une formule

Dès qu'un utilisateur essaie de saisir ou de modifier une formule de colonne, Oracle Analytics appelle la fonction validateAnalysisFormula pour vérifier l'opération. Vous pouvez personnaliser validateAnalysisFormula pour valider et bloquer les formules en fonction de vos propres critères spécifiques. Si la fonction renvoie true, la formule est acceptée. Si la validation échoue, la fonction renvoie false, la formule est rejetée et votre message personnalisé apparaît.

Pour afficher un message et permettre aux utilisateurs de poursuivre, votre fonction doit renvoyer true. Pour bloquer la requête, votre fonction doit renvoyer false ou afficher un message. Vous pouvez utiliser une chaîne JavaScript et des techniques d'expression régulière dans votre fonction pour examiner et valider la formule.

Des fonctions helper sont disponibles pour permettre à la fonction de blocage de requête de rechercher des filtres, des colonnes, etc. Reportez-vous à Fonctions helper de validation.

Par exemple, le code suivant montre comment bloquer une requête si un utilisateur saisit une formule non acceptable.

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

Fonctions helper de validation

Plusieurs fonctions helper de validation sont disponibles dans un fichier JavaScript que vous pouvez utiliser.

Fonction helper de validation Description

CriteriaValidator.getSubjectArea()

Renvoie le nom du domaine référencé par l'analyse. Il est généralement utilisé dans une instruction SWITCH au sein de la fonction avant de procéder à d'autres validations. Si l'analyse est un critère basé sur un ensemble, null est renvoyé.

CriteriaValidator.tableExists(sTable)

Renvoie true si le dossier indiqué (table) a été ajouté à l'analyse par le concepteur de contenu et false si le dossier n'a pas été ajouté.

CriteriaValidator.columnExists(sTable, sColumn)

Renvoie true si la colonne indiquée a été ajoutée à l'analyse par le concepteur de contenu et false si la colonne n'a pas été ajoutée.

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

Vérifie que dependentColumn existe si checkColumn est présent. Renvoie true si checkColumn n'est pas présent, ou si checkColumn et la colonne dépendante sont présents. Si checkColumn et dependentColumn sont null, les dossiers sont validés. Si une colonne de checkTable est présente, une colonne de dependentTable doit être présente.

CriteriaValidator.filterExists(sFilterTable, sFilterColumn)

Renvoie true si un filtre existe sur la colonne indiquée et false si aucun filtre n'est présent.

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

Vérifie que dependentFilter existe si checkColumn figure dans la liste des projections. Renvoie true si checkColumn n'est pas présent, ou si checkColumn et le filtre dépendant sont présents.

CriteriaValidator.filterCount(sFilterTable, sFilterColumn)

Renvoie le nombre de valeurs de filtre qui sont indiquées pour la colonne logique donnée. Si la valeur de filtre est "equals", "null", "notNull" ou "in", renvoie le nombre correspondant aux valeurs choisies. Si la colonne n'est pas utilisée dans un filtre, renvoie zéro. Si la colonne est appelée sans valeur par défaut, renvoie -1. Pour tous les autres opérateurs de filtre (tels que "greater than", "begins with", etc.), renvoie 999 car le nombre de valeurs ne peut pas être déterminé.