Validere og blokere forespørgsler i analyser ved hjælp af tilpasset JavaScript

Du kan udvikle valideringsscripts i JavaScript for at validere analysekriterier og kolonneformler og blokere ugyldige forespørgsler.

Blokere forespørgsler i analyser

Brugere, som arbejder med analyser, kan kalde tilpasset JavaScript for at validere analysekriterier og kolonneformler. Valideringen gør det muligt at blokere forespørgsler under redigering af en analyse. Det tilpassede JavaScript skal være tilgængeligt via en webserver. For at aktivere denne funktion angiver administratorer webserverens URL i systemindstillingerne og registrerer webserveren som et sikkert domæne.

  1. Udvikl dine tilpassede valideringsscripts i JavaScript, gem dem på en webserver, og noter URL'en, der peger på den JavaScript-fil (*.JS), som indeholder de tilpassede scripts.
    Du kan for eksempel udvikle et blokeringsscript, som du lagrer i myblocking.js, og URL'en kan være: http://example.com:8080/mycustomscripts/myblocking.js.
  2. Angiv URL'en til din webserver i systemindstillinger:
    1. Klik på Konsol, og klik derefter på Systemindstillinger.
    2. I URL til blokering af forespørgsler i analyser, skal du indtaste den URL, som du noterede i trin 1.
  3. Registrer webserveren som et sikkert domæne:
    1. Klik på Konsol, og klik derefter på Sikre domæner.
    2. Tilføj en post for domænet i URL'en, som du angiv i trin 2.
      Du kan for eksempel tilføje: example.com:8080.
    3. Vælg valgmulighederne Script og Opret forbindelse.
  4. Test dine valideringsscripts:
    1. Åbn en analyse.
    2. Kør analysen med både gyldige og ugyldige kriterier.
    3. Verificer, at forespørgsler blokeres som forventet.

Udvikle JavaScript til at blokere analyser baseret på kriterier

Hver gang en bruger forsøger at køre en analyse, kalder Oracle Analytics funktionen validateAnalysisCriteria. Du kan tilpasse validateAnalysisCriteria for at validere og blokere forespørgsler baseret på dine egne specifikke kriterier. Hvis funktionen returnerer true, køres forespørgslen. Hvis funktionen returnerer false eller viser en meddelelse, blokeres forespørgslen.

Følgende er for eksempel en eksempelkode for et JavaScript-program kaldet 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;
}

Hvis funktionen returnerer noget andet end false, regnes kriterierne for at være gyldige, og analysen køres. Funktionen bruges også til at validere kriterier for operationer til forhåndsgennemgang og lagring.

Udvikle JavaScript til at blokere analyser baseret på formel

Hver gang en bruger forsøger at indtaste eller modificere en kolonneformel, kalder Oracle Analytics funktionen validateAnalysisFormula for at verificere operationen. Du kan tilpasse validateAnalysisFormula for at validere og blokere formler baseret på dine egne specifikke kriterier. Hvis funktionen returnerer true, er formlen accepteret. Hvis validering fejler, returnerer funktionen false, formlen afvises, og din tilpassede meddelelse vises.

Hvis du vil vise en meddelelse og give brugerne mulighed for at fortsætte, skal din funktion returnere true. Hvis du vil blokere forespørgslen, skal din funktion returnere false eller vise en meddelelse. Du kan bruge en JavaScript-streng og teknikker med almindelige udtryk i din funktion til at undersøge og validere formlen.

Hjælpefunktioner er tilgængelige, så blokeringsfunktionen til forespørgsler kan tjekke for filtre, kolonner osv. Se Hjælpefunktioner til validering.

For eksempel viser følgende kode, hvordan en forespørgsel blokeres, hvis en bruger indtaster en uacceptabel formel.

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

Hjælpefunktioner til validering

Der er flere tilgængelige hjælpefunktioner til validering i en JavaScript-fil, som du kan bruge.

Hjælpefunktion til validering Beskrivelse

CriteriaValidator.getSubjectArea()

Returnerer navnet på det emneområde, der refereres til i analysen. Det bruges generelt i en switch-sætning i funktionen, før anden validering udføres. Hvis analysen er et sætbaseret kriterium, returnerer den null.

CriteriaValidator.tableExists(sTable)

Returnerer true, hvis den angivne mappe (tabel) er blevet føjet til analysen af indholdsdesigneren, og false, hvis mappen ikke blev tilføjet.

CriteriaValidator.columnExists(sTable, sColumn)

Returnerer true, hvis den angivne kolonne er blevet føjet til analysen af indholdsdesigneren, og false, hvis kolonnen ikke blev tilføjet.

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

Tjekker for at sikre, at dependentColumn findes, hvis checkColumn findes. Det returnerer true, hvis enten checkColumn ikke findes, eller checkColumn og den afhængige kolonne findes. Hvis checkColumn og dependentColumn er null, er mapperne valideret. Hvis nogen kolonne fra checkTable findes, skal en kolonne fra dependentTable findes.

CriteriaValidator.filterExists(sFilterTable, sFilterColumn)

Returnerer true, hvis et filter findes på den angivne kolonne, og false, hvis intet filter findes.

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

Tjekker for at sikre, at dependentFilter findes, hvis checkColumn findes på projektionslisten. Det returnerer true, hvis enten checkColumn ikke findes, eller checkColumn og det afhængige filter findes.

CriteriaValidator.filterCount(sFilterTable, sFilterColumn)

Returnerer antallet af filterværdier, der er angivet for den givne logiske kolonne. Hvis filterværdien er "equals", "null", "notNull" eller "in", returneres antallet af valgte værdier. Hvis kolonnen ikke bruges i et filter, returneres nul. Hvis der anmodes om kolonnen uden en standard, returneres -1. For alle andre filteroperatorer (for eksempel "greater than", "begins with" osv.) returneres 999, fordi antallet af værdier ikke kan bestemmes.