Valider et bloquer les interrogations dans les analyses à l'aide d'un JavaScript personnalisé

Vous pouvez développer des scripts de validation en JavaScript pour valider les critères d'analyse et les formules de colonne et bloquer les interrogations non valides.

Bloquer les interrogations dans les analyses

Les utilisateurs travaillant avec des analyses peuvent appeler un JavaScript personnalisé pour valider les critères d'analyse et les formules de colonne. La validation permet de bloquer les interrogations lors de la modification d'une analyse. Le JavaScript personnalisé doit être accessible au moyen d'un serveur Web. Pour activer cette fonction, les administrateurs spécifient l'URL du serveur Web dans les paramètres de système et enregistrent le serveur en tant que domaine sécurisé.

  1. Développez vos scripts de validation personnalisés avec JavaScript, stockez-les sur 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 et l'URL peut être :http://example.com:8080/mycustomscripts/myblocking.js.
  2. Spécifiez l'URL du serveur Web dans les paramètres de système :
    1. Cliquez sur Console, puis sur Paramètres de système avancés.
    2. Dans URL de blocage des interrogations dans les analyses, entrez l'URL que vous avez notée à l'étape 1.
  3. Enregistrez 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 à l'URL que vous avez spécifiée à l'étape 2.
      Par exemple, vous pouvez ajouter : example.com:8080.
    3. Comme options, sélectionnez Script et Se connecter.
  4. Testez vos scripts de validation :
    1. Ouvrez une analyse.
    2. Exécutez l'analyse avec des critères valides et des critères non valides.
    3. Vérifiez que les interrogations sont bien bloquées.

Développer un JavaScript pour bloquer les analyses en fonction de critères

Chaque fois qu'un utilisateur tente d'exécuter une analyse, Oracle Analytics appelle la fonction validateAnalysisCriteria. Vous pouvez personnaliser validateAnalysisCriteria pour valider et bloquer les interrogations en fonction de vos propres critères. Si la fonction retourne true, l'interrogation est exécutée. Si la fonction retourne false ou affiche un message, l'interrogation 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 retourne une valeur autre que 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 pour des opérations de prévisualisation et d'enregistrement.

Développer un JavaScript pour bloquer les analyses en fonction de formules

Chaque fois qu'un utilisateur tente d'entrer 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. Si la fonction retourne true, la formule est acceptée. Si la validation échoue, la fonction retourne false, la formule est rejetée et votre message personnalisé s'affiche.

Pour afficher un message et permettre aux utilisateurs de continuer, la fonction doit retourner true. Pour bloquer l'interrogation, votre fonction doit retourner false ou afficher un message. Vous pouvez utiliser une chaîne JavaScript et les techniques d'expression rationnelle dans votre fonction pour examiner et valider la formule.

Des fonctions d'aide sont disponibles pour que la fonction de blocage d'interrogation puisse vérifier la présence de filtres, de colonnes, etc. Voir Fonctions d'aide à la validation.

Par exemple, le code suivant montre comment bloquer une interrogation si un utilisateur entre une formule inacceptable.

// 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 d'aide à la validation

Plusieurs fonctions d'aide à la validation sont mises à votre disposition dans un fichier JavaScript.

Fonction d'aide à la validation Description

CriteriaValidator.getSubjectArea()

Retourne le nom du domaine référencé par l'analyse. Elle est généralement utilisée dans un énoncé conditionnel switch dans la fonction avant d'effectuer d'autres validations. Si l'analyse correspond à des critères basés sur un jeu, la fonction retourne la valeur null.

CriteriaValidator.tableExists(sTable)

Retourne true si le dossier (table) spécifié a été ajouté à l'analyse par le concepteur de contenu, et false dans le cas contraire.

CriteriaValidator.columnExists(sTable, sColumn)

Retourne true si la colonne spécifiée a été ajoutée à l'analyse par le concepteur de contenu, et false dans le cas contraire.

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

Vérifie l'existence de dependentColumn si checkColumn est présent. Retourne true si checkColumn n'est pas présent ou si checkColumn et dependentColumn sont présents. Si checkColumn et dependentColumn ont la valeur null, les dossiers sont validés. Si une colonne de checkTable est présente, une colonne de dependentTable doit aussi être présente.

CriteriaValidator.filterExists(sFilterTable, sFilterColumn)

Retourne true si un filtre existe dans la colonne spécifiée, et false dans le cas contraire.

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

Vérifie l'existence de dependentFilter si checkColumn est présent dans la liste de projection. Retourne true si checkColumn n'est pas présent ou si checkColumn et dependentFilter sont présents.

CriteriaValidator.filterCount(sFilterTable, sFilterColumn)

Retourne le nombre de valeurs de filtre spécifiées pour la colonne logique indiquée. Si la valeur de filtre est "equals," "null," "notNull" ou "in", la fonction retourne le nombre de valeurs sélectionnées. Si la colonne n'est pas utilisée dans un filtre, la fonction retourne la valeur zéro. Si la colonne est demandée sans valeur par défaut, la fonction retourne la valeur -1. Pour tous les autres opérateurs de filtre (par exemple, "greater than," "begins with," etc.), la fonction retourne 999, car le nombre de valeurs ne peut pas être déterminé.