Validere og blokkere spørringer i analyser ved hjelp av egendefinert JavaScript

Du kan utvikle valideringsskript i JavaScript for å validere analysekriterier og kolonneformler samt blokkere ugyldige spørringer.

Blokkere spørringer i analyser

Brukere som jobber med analyser, kan starte egendefinert JavaScript for å validere analysekriterier og kolonneformler. Valideringen gjør det mulig å blokkere spørringer ved redigering av en analyse. Egendefinert JavaScript må være tilgjengelig via en nettjener. Administratorer aktiverer denne funksjonen ved å angi URL-adressen for nettjeneren i systeminnstillingene og registrere nettjeneren som et sikkert domene.

  1. Utvikle de egendefinerte valideringsskriptene i JavaScript, lagre dem på en nettjener, og noter deg URL-adressen som peker til JavaScript-filen (*.JS) som inneholder de egendefinerte skriptene.
    Du kan for eksempel utvikle et blokkeringsskript som du lagrer i myblocking.js, og URL-adressen kan være: http://example.com:8080/mycustomscripts/myblocking.js.
  2. Angi URL-adressen for nettjeneren i systeminnstillingene:
    1. Klikk på Konsoll, og klikk deretter på Systeminnstillinger.
    2. Angi URL-adressen du noterte deg i trinn 1, i URL-adresse for blokkering av spørringer i analyser.
  3. Registrer nettjeneren som et sikkert domene:
    1. Klikk på Konsoll, og klikk deretter på Sikre domener.
    2. Legg til en oppføring for domenet i URL-adressen du angav i trinn 2.
      Du kan for eksempel legge til example.com:8080.
    3. For valg velger du Skript og Koble til.
  4. Test valideringsskriptene:
    1. Åpne en analyse.
    2. Kjør analysen med både gyldige og ugyldige kriterier.
    3. Verifiser at spørringer blokkeres som forventet.

Utvikle JavaScript for å blokkere analyser basert på kriterier

Når en bruker prøver å kjøre en analyse, starter Oracle Analytics funksjonen validateAnalysisCriteria. Du kan tilpasse validateAnalysisCriteria for å validere og blokkere spørringer basert på dine egne bestemte kriterier. Hvis funksjonen returnerer true, kjøres spørringen. Hvis funksjonen returnerer false, blokkeres spørringen.

Dette er eksempelkode for et JavaScript-program som heter 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 funksjonen returnerer noe annet enn false, vurderes kriteriene som gyldige, og analysen kjøres. Funksjonen brukes også til å validere kriterier for forhåndsvisnings- og lagringsoperasjoner.

Utvikle JavaScript for å blokkere analyser basert på en formel

Når en bruker prøver å angi eller endre en kolonneformel, starter Oracle Analytics funksjonen validateAnalysisFormula for å verifisere operasjonen. Du kan tilpasse validateAnalysisFormula for å validere og blokkere formler basert på dine egne bestemte kriterier. Hvis funksjonen returnerer true, godtas formelen. Hvis valideringen mislykkes, returnerer funksjonen false, formelen avvises, og den egendefinerte meldingen din vises.

Hvis du vil vise en melding og tillate at brukerne fortsetter, må funksjonen returnere true. Hvis du vil blokkere spørringen, må funksjonen returnere false eller vise en melding. Du kan bruke en JavaScript-streng og teknikker med regulære uttrykk i funksjonen for å undersøke og validere formelen.

Det finnes hjelpefunksjoner, slik at funksjonen for blokkering av spørringer kan se etter filtre, kolonner og så videre. Se Hjelpefunksjoner for validering.

Koden nedenfor viser for eksempel hvordan du blokkerer en spørring hvis en bruker angir en formel som ikke godtas.

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

Hjelpefunksjoner for validering

Flere hjelpefunksjoner for validering er tilgjengelige i en JavaScript-fil du kan bruke.

Hjelpefunksjon for validering Beskrivelse

CriteriaValidator.getSubjectArea()

Returnerer navnet på emneområdet analysen refererer til. Den brukes vanligvis i en Switch-setning i funksjonen, før annen validering utføres. Hvis analysen er settbaserte kriterier, returneres null.

CriteriaValidator.tableExists(sTable)

Returnerer true hvis den angitte mappen (tabellen) er lagt til i analysen av innholdsutformeren, og false hvis mappen ikke er lagt til.

CriteriaValidator.columnExists(sTable, sColumn)

Returnerer true hvis den angitte kolonnen er lagt til i analysen av innholdsutformeren, og false hvis kolonnen ikke er lagt til.

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

Kontrollerer at dependentColumn finnes hvis checkColumn finnes. Returnerer true hvis checkColumn ikke finnes, eller hvis checkColumn og den avhengige kolonnen finnes. Hvis checkColumn og dependentColumn er null, valideres mappene. Hvis det finnes en kolonne fra checkTable, må en kolonne fra dependentTable også finnes.

CriteriaValidator.filterExists(sFilterTable, sFilterColumn)

Returnerer true hvis det finnes et filter i den angitte kolonnen, og false hvis det ikke finnes noe filter.

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

Kontrollerer at dependentFilter finnes hvis checkColumn finnes i projiseringslisten. Returnerer true hvis checkColumn ikke finnes, eller hvis checkColumn og det avhengige filteret finnes.

CriteriaValidator.filterCount(sFilterTable, sFilterColumn)

Returnerer antallet filterverdier som er angitt for den angitte logiske kolonnen. Hvis filterverdien er equals, null, notNull eller in, returneres antallet valgte verdier. Hvis kolonnen ikke brukes i et filter, returneres null. Hvis kolonnen spørres uten noen standardverdi, returneres -1. For alle andre filteroperatorer (for eksempel greater than, begins with og så videre) returneres 999, ettersom antallet verdier ikke kan fastsettes.