Provjera valjanosti i blokiranje upita u analizama pomoću prilagođenog JavaScripta

Možete razvijati prilagođene skripte za provjeru valjanosti u JavaScriptu za provjeru valjanosti kriterija analize i formula stupaca, uz blokiranje upita koji nisu valjani.

Blokiranje upita u analizama

Korisnici koji rade s analizama mogu pozvati prilagođeni JavaScriptu za provjeru valjanosti kriterija analize i formula stupaca. Provjera valjanosti omogućava blokiranje upita pri uređivanju analize. Prilagođeni JavaScript mora biti dostupan putem web-poslužitelja. Za omogućavanje te značajke administratori navode URL web-poslužitelja u postavkama sustava i registriraju web-poslužitelj na popisu dopuštenih adresa.

  1. Programirajte prilagođene skripte za provjeru valjanosti u JavaScriptu, pohranite ih na web-poslužitelj i zabilježite URL koji upućuje na JavaScript (* .JS) datoteku koja sadrži prilagođene skripte.
    Primjerice, možete razviti skriptu za blokiranje koju ćete spremiti u myblocking.js, a URL može biti:http://example.com:8080/mycustomscripts/myblocking.js.
  2. Definirajte URL web-poslužitelja u postavkama sustava:
    1. Pritisnite Konzola, a zatim Napredne postavke sustava.
    2. U izborniku URL za blokiranje upita u analizama unesite URL koji ste zabilježili u 1. koraku.
  3. Registriranje web-poslužitelja na popisu dopuštenih sigurnih domena:
    1. Pritisnite Konzola, a zatim Sigurne domene.
    2. Dodajte unos za domenu u URL koji ste naveli u 2. koraku.
      Primjerice, možete dodati: example.com:8080.
    3. Opcije potražite u Skripta i Poveži.
  4. Testirajte skripte za provjeru valjanosti:
    1. Otvorite analizu.
    2. Pokrenite analizu s valjanim i nevaljanim kriterijima.
    3. Provjerite jesu li upiti blokirani, prema očekivanju.

Razvijte JavaScript za blokiranje analiza temeljem kriterija

Svaki put kad korisnik pokuša pokrenuti analizu, Oracle Analytics pozvat će funkciju validateAnalysisCriteria. Možete prilagoditi validateAnalysisCriteria radi provjere valjanosti i blokiranja upita temeljem vlastitih specifičnih kriterija. Ako funkcija vrati vrijednost true, upit će se izvršiti. Ako funkcija vrati false ili prikaže poruku, upit će biti blokiran.

Npr., u nastavku je ogledni kôd JavaScript programa po nazivu 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;
}

Ako funkcija vrati bilo što drugo osim false, kriteriji će se smatrati valjanima i analiza će se izvršiti. Funkcija služi i za provjeru valjanosti kriterija operacija za pregled i spremanje.

Razvijte JavaScript za blokiranje analiza temeljem formule

Svaki put kad korisnik pokuša unijeti ili izmijeniti formulu stupca, Oracle Analytics pozvat će funkciju validateAnalysisFormula za provjeru valjanosti operacije. Možete prilagoditi validateAnalysisFormula za provjeru valjanosti i blokiranje formula temeljem vlastitih specifičnih kriterija. Ako funkcija vrati true, formula će biti prihvaćena. U slučaju neuspješne provjere valjanosti, funkcija će vratiti false, formula će biti odbijena i prikazat će se vaša prilagođena poruka.

Radi prikazivanja poruke, a kako bi korisnici mogli nastaviti s radom, vaša funkcija mora vratiti true. Za blokiranje upita vaša funkcija mora vratiti false ili prikazati poruku. Možete upotrijebiti JavaScript niz i tehnike regularnih izraza u svojoj funkciji da biste istražili i potvrdili formulu.

Dostupne su funkcije pomoći kako bi funkcija za blokiranje upita mogla provjeravati filtre, stupce itd. Pogledajte Pomoćne funkcije za provjeru valjanosti.

Npr., sljedeći kôd pokazuje kako blokirati upit ako korisnik unese neprihvatljivu formulu.

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

Pomoćne funkcije za provjeru valjanosti

Možete upotrijebiti nekoliko pomoćnih funkcija za provjeru valjanosti koje su dostupne u JavaScript datoteci.

Pomoćna funkcija za provjeru valjanosti Opis

CriteriaValidator.getSubjectArea()

Vraća naziv predmetnog područja koje je navedeno u analizi. Općenito se upotrebljava u naredbi za preklapanje unutar funkcije prije drugih provjera valjanosti. Ako se analiza sastoji od kriterija na temelju skupa, vratit će null.

CriteriaValidator.tableExists(sTable)

Vraća true ako je navedenu mapu (tablicu) u analizu dodao dizajner sadržaja, odnosno false ako mapa nije dodana.

CriteriaValidator.columnExists(sTable, sColumn)

Vraća true ako je navedeni stupac u analizu dodao dizajner sadržaja, odnosno false ako stupac nije dodan.

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

Provjerava postoji li dependentColumn ako je prisutan checkColumn. Vraća true ako checkColumn nije prisutan ili ako su prisutni checkColumn i stupac ovisne vrijednosti. Ako je vrijednost za checkColumn i dependentColumn null, potvrdit će se valjanost mapa. Ako nije prisutan nijedan stupac za checkTable, mora biti prisutan stupac za dependentTable.

CriteriaValidator.filterExists(sFilterTable, sFilterColumn)

Vraća true ako u navedenom stupcu postoji filtar, odnosno false ako filtar nije prisutan.

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

Provjerava postoji li dependentFilter ako je na popisu projekcija prisutan checkColumn. Vraća true ako checkColumn nije prisutan ili su prisutni checkColumn i filtar ovisne vrijednosti.

CriteriaValidator.filterCount(sFilterTable, sFilterColumn)

Vraća broj vrijednosti filtra koje su navedene za dani logički stupac. Ako je vrijednost filtra "equals," "null," "notNull" ili "in", vraća broj odabranih vrijednosti. Ako se stupac ne upotrebljava u filtru, vraća nulu. Ako je stupac pozvan bez zadane vrijednosti, vraća -1. Za sve druge operatore filtra (npr. "greater than", "begins with", i sl.) vraća 999, jer se broj vrijednosti ne može utvrditi.