Valideer en blokkeer query's in analysen met behulp van aangepast JavaScript.

U kunt validatiescripts in JavaScript ontwikkelen om analysecriteria en kolomformules te valideren, en ongeldige zoekopdrachten te blokkeren.

Zoekopdrachten blokkeren in analysen

Gebruikers die werken met analysen kunnen aangepast JavaScript aanroepen om analysecriteria en kolomformules te valideren. De validatie maakt het mogelijk om zoekopdrachten te blokkeren tijdens het bewerken van een analyse. Het aangepaste JavaScript moet toegankelijk zijn via een webserver. Beheerders kunnen deze functie activeren door de URL van de webserver op te geven in de systeeminstellingen en de webserver als een veilig domein te registreren.

  1. U kunt aangepaste validatiescripts ontwikkelen in JavaScript, opslaan op een webserver en de URL noteren die verwijst naar het JavaScript-bestand (*.JS) met de aangepaste scripts.
    U kunt bijvoorbeeld een blokkeringsscript ontwikkelen dat u opslaat in myblocking.js, en dat de volgende URL heeft:http://example.com:8080/mycustomscripts/myblocking.js.
  2. Geef de URL van uw webserver op in de systeeminstellingen:
    1. Klik op Console en vervolgens op Geavanceerde systeeminstellingen.
    2. Geef bij URL voor blokkeren van zoekopdrachten in analysen de URL op die u hebt genoteerd in stap 1.
  3. U registreert de webserver als volgt als veilig domein:
    1. Klik op Console en vervolgens op Veilige domeinen.
    2. Voeg een vermelding toe voor het domein in de URL die u in stap 2 hebt opgegeven.
      Voeg bijvoorbeeld example.com:8080 toe.
    3. Voor opties selecteert u Script en Verbinden.
  4. Test uw validatiescripts:
    1. Open een analyse.
    2. Voer de analyse uit met zowel geldige als ongeldige criteria.
    3. Controleer of zoekopdrachten op de verwachte manier worden geblokkeerd.

JavaScript ontwikkelen om analysen te blokkeren op basis van criteria

Wanneer een gebruiker een analyse probeert uit te voeren, roept Oracle Analytics de functie validateAnalysisCriteria aan. U kunt validateAnalysisCriteria aanpassen zodat er query's worden gevalideerd en geblokkeerd op basis van uw eigen specifieke criteria. Als de functie true retourneert, wordt de query uitgevoerd. Als de functie false retourneert of er een bericht verschijnt, wordt de query geblokkeerd.

Een voorbeeld: het onderstaande is een voorbeeldcode voor een JavaScript-programma genaamd 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;
}

Als de functie iets anders dan false retourneert, worden de criteria als geldig beschouwd en wordt de analyse uitgevoerd. De functie wordt ook gebruikt om criteria voor voorbeeld- en opslagbewerkingen te valideren.

JavaScript ontwikkelen om analysen te blokkeren op basis van formule

Wanneer een gebruiker probeert een kolomformule in te voeren of te wijzigen, roept Oracle Analytics de functie validateAnalysisFormula aan om de bewerking te verifiëren. U kunt validateAnalysisFormula aanpassen om formules te valideren en blokkeren op basis van uw eigen specifieke criteria. Als de functie true retourneert, is de formule geaccepteerd. Als de validatie mislukt, retourneert de functie false. De formule wordt afgewezen en uw aangepaste bericht wordt weergegeven.

Als u een bericht wilt weergeven en gebruikers in staat wilt stellen om door te gaan, moet de functie true retourneren. Als u de zoekopdracht wilt blokkeren, moet uw functie false retourneren of een bericht weergeven. U kunt een JavaScript-string en technieken voor reguliere expressies gebruiken in uw functie om de formule te onderzoeken en te valideren.

Er zijn helpfuncties beschikbaar, zodat de functie voor het blokkeren van query's kan controleren op filters, kolommen, enzovoort. Zie Helpfuncties voor validatie.

Met de volgende code wordt een query bijvoorbeeld geblokkeerd als een gebruiker een onacceptabele formule invoert.

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

Helpfuncties voor validatie

Er zijn verschillende helpfuncties voor validatie beschikbaar in een JavaScript-bestand die u kunt gebruiken.

Helpfunctie voor validatie Beschrijving

CriteriaValidator.getSubjectArea()

Hiermee wordt de naam geretourneerd van het onderwerpgebied waarnaar wordt verwezen door de analyse. Dit wordt meestal gebruikt in een switch-statement binnen de functie voordat andere validatie wordt uitgevoerd. Als de analyse op een set gebaseerde criteria gebruikt, wordt null geretourneerd.

CriteriaValidator.tableExists(sTable)

Hiermee wordt true geretourneerd als de opgegeven map (tabel) is toegevoegd aan de analyse door de inhoudontwerper en false als de map niet is toegevoegd.

CriteriaValidator.columnExists(sTable, sColumn)

Hiermee wordt true geretourneerd als de opgegeven kolom is toegevoegd aan de analyse door de inhoudontwerper en false als de kolom niet is toegevoegd.

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

Hiermee wordt gecontroleerd of dependentColumn bestaat als checkColumn aanwezig is. Hiermee wordt true geretourneerd als checkColumn niet aanwezig is, of als checkColumn en de afhankelijke kolom aanwezig zijn. Als checkColumn en dependentColumn null zijn, worden de mappen gevalideerd. Als een kolom uit checkTable aanwezig is, moet er ook een kolom uit dependentTable aanwezig zijn.

CriteriaValidator.filterExists(sFilterTable, sFilterColumn)

Hiermee wordt true geretourneerd als er een filter is ingesteld voor de opgegeven kolom en false als er geen filter is ingesteld.

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

Hiermee wordt gecontroleerd of dependentFilter bestaat als checkColumn aanwezig is in de lijst met prognoses. Hiermee wordt true geretourneerd als checkColumn niet aanwezig is, of als checkColumn en het afhankelijke filter aanwezig zijn.

CriteriaValidator.filterCount(sFilterTable, sFilterColumn)

Hiermee wordt het aantal filterwaarden geretourneerd dat is opgegeven voor de gegeven logische kolom. Als de filterwaarde "equals," "null," "notNull" of "in" is, wordt het aantal gekozen waarden geretourneerd. Als de kolom niet wordt gebruikt in een filter, wordt nul geretourneerd. Als er geen standaardwaarde wordt aangeboden voor de kolom, wordt -1 geretourneerd. Voor alle andere filteroperatoren (zoals "greater than," "begins with," enzovoort), wordt 999 geretourneerd omdat het aantal waarden niet kan worden vastgesteld.