Validarea şi blocarea interogărilor din analize utilizând cod JavaScript personalizat

Puteţi să dezvoltaţi script-uri de validare în JavaScript, pentru a valida criteriile de analiză şi formulele din coloane, precum şi pentru a bloca interogările nevalide.

Blocare interogări din analize

Utilizatorii care lucrează cu analize pot invoca JavaScript personalizat pentru a valida criteriile de analiză şi formulele din coloane. Validarea permite blocarea interogărilor la editarea unei analize. JavaScript-ul personalizat trebuie să fie accesibil printr-un server web. Pentru a activa această caracteristică, administratorii specifică URL-ul serverului web în setările de sistem şi înregistrează serverul web ca domeniu sigur.

  1. Dezvoltaţi script-urile de validare personalizate în JavaScript, stocaţi-le pe un server web şi reţineţi URL-ul care indică spre fişierul JavaScript (*.JS) care conţine script-urile personalizate.
    De exemplu, aţi putea dezvolta un script de blocare pe care să îl stocaţi în myblocking.js, iar URL-ul ar putea fi:http://example.com:8080/mycustomscripts/myblocking.js.
  2. Specificaţi URL-ul serverului web în setările de sistem:
    1. Faceţi clic pe Consolă, apoi faceţi clic pe Setări de sistem avansate.
    2. În URL pentru blocarea interogărilor din analize, introduceţi URL-ul reţinut la pasul 1.
  3. Înregistrarea serverului web ca domeniu sigur:
    1. Faceţi clic pe Consolă, apoi faceţi clic pe Domenii sigure.
    2. Adăugaţi o intrare pentru domeniul din URL-ul specificat la pasul 2.
      De exemplu, aţi putea adăuga: example.com:8080.
    3. Pentru opţiuni, selectaţi Script şi Conectare.
  4. Testaţi scriptul de validare:
    1. Deschideţi o analiză.
    2. Rulaţi analiza cu criterii valide şi nevalide.
    3. Verificaţi dacă interogările sunt blocate conform aşteptărilor.

Dezvoltare JavaScript pentru a bloca analize pe baza criteriilor

Când un utilizator încearcă să ruleze o analiză, Oracle Analytics invocă funcţia validateAnalysisCriteria. Puteţi personaliza validateAnalysisCriteria pentru a valida şi bloca interogările pe baza propriilor criterii specifice. Dacă funcţia returnează true, interogarea rulează. Dacă funcţia returnează false sau afişează un mesaj, interogarea este blocată.

De exemplu, codul de mai jos este un exemplu pentru programul JavaScript denumit 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;
}

Dacă funcţia returnează orice altă valoare în afară de false, criteriile sunt considerate valide şi analiza rulează. Funcţia se utilizează şi pentru a valida criteriile pentru operaţiunile de previzualizare şi salvare.

Dezvoltare JavaScript pentru a bloca analize pe baza formulelor

Când un utilizator încearcă să introducă sau să modifice formula unei coloane, Oracle Analytics invocă funcţia validateAnalysisFormula pentru a verifica operaţiunea. Puteţi personaliza validateAnalysisFormula pentru a valida şi bloca formulele pe baza propriilor criterii specifice. Dacă funcţia returnează TRUE, formula este acceptată. Dacă validarea eşuează, funcţia returnează FALSE, formula este respinsă şi este afişat mesajul dvs. personalizat.

Pentru a afişa un mesaj şi a permite utilizatorilor să continue, funcţia dvs. trebuie să returneze TRUE. Pentru a bloca interogarea, funcţia dvs. trebuie să returneze FALSE sau să afişeze un mesaj. Puteţi utiliza un şir JavaScript şi tehnici de expresie logică în funcţia dvs. pt. a investiga şi a valida formula.

Funcţiile asistentului sunt disponibile, astfel încât funcţia de blocare a interogării să poată verifica filtre, coloane etc. Consultaţi Funcţiile asistentului de validare.

De exemplu, următorul cod prezintă cum să blocaţi o interogare dacă utilizatorul introduce o formulă inacceptabilă.

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

Funcţiile asistentului de validare

Mai multe funcţii ale asistentului de validare sunt disponibile pentru utilizare într-un fişier JavaScript.

Funcţia asistentului de validare Descriere

CriteriaValidator.getSubjectArea()

Returnează numele zonei de subiect la care se face referire în analiză. În general, se utilizează într-o instrucţiune de comutare din cadrul funcţiei înainte de a efectua alte validări. Dacă analiza este un criteriu pe bază de set, returnează NULL.

CriteriaValidator.tableExists(sTable)

Returnează TRUE dacă folderul (tabelul) specificat a fost adăugat în analiză de designerul de conţinut şi FALSE dacă folderul nu a fost adăugat.

CriteriaValidator.columnExists(sTable, sColumn)

Returnează TRUE în cazul în care coloana specificată a fost adăugată în analiză de designerul de conţinut şi FALSE în cazul în care coloana nu a fost adăugată.

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

Verifică dacă există dependentColumn, dacă este prezent checkColumn. Returnează TRUE dacă nu este prezent checkColumn sau dacă sunt prezente checkColumn şi coloanele dependente. Dacă checkColumn şi dependentColumn sunt NULL, folderele sunt validate. Dacă orice coloană din checkTable este prezentă, atunci trebuie să fie prezentă o coloană din dependentTable.

CriteriaValidator.filterExists(sFilterTable, sFilterColumn)

Returnează TRUE dacă există un filtru pentru coloana specificată şi FALSE dacă nu există niciun filtru.

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

Verifică dacă există dependentFilter, dacă este prezent checkColumn în lista de proiecţie. Returnează TRUE dacă nu este prezent checkColumn sau dacă sunt prezente checkColumn şi filtrele dependente.

CriteriaValidator.filterCount(sFilterTable, sFilterColumn)

Returnează numărul de valori pentru filtru care sunt specificate pentru coloana logică dată. Dacă valoarea filtrului este "equals," "null," "notNull", sau "in", atunci returnează numărul de valori selectate. Dacă nu este utilizată coloana într-un filtru, atunci returnează zero. Dacă se solicită coloana fără valoare prestabilită, returnează -1. Pentru toţi ceilalţi operatori de filtre (precum "greater than," "begins with" etc.) returnează 999, deoarece numărul de valori nu poate fi determinat.