Weryfikowanie i blokowanie zapytań w analizach przy użyciu niestandardowego kodu JavaScript

Można opracowywać skrypty weryfikacji w języku JavaScript, aby weryfikować kryteria analizy i formuły kolumn oraz blokować niepoprawne zapytania.

Blokowanie zapytań w analizach

Użytkownicy pracujący nad analizami mogą wywoływać niestandardowy kod JavaScript w celu weryfikowania kryteriów analiz i formuł kolumn. Weryfikacja umożliwia blokowanie zapytań podczas edytowania analizy. Niestandardowy kod JavaScript musi być dostępny za pośrednictwem serwera internetowego. W celu włączenia tej funkcji administratorzy muszą określić w ustawieniach systemowych adres URL serwera internetowego i zarejestrować go jako bezpieczną domenę.

  1. Opracować niestandardowe skrypty weryfikacji w języku JavaScript, zapisać je na serwerze internetowym oraz zanotować adres URL pliku JavaScript (*.JS) zawierającego skrypty niestandardowe.
    Na przykład można opracować skrypt blokujący, który będzie przechowywany w pliku myblocking.js pod adresem URL http://example.com:8080/mycustomscripts/myblocking.js.
  2. Określić w ustawieniach systemowych adres URL swojego serwera internetowego:
    1. Kliknąć opcję Konsola, a następnie Zaawansowane ustawienia systemowe.
    2. W polu Adres URL blokowania zapytań w analizach wprowadzić adres URL zanotowany podczas wykonywania kroku 1.
  3. Zarejestrować serwer internetowy jako bezpieczną domenę:
    1. Wybrać opcję Konsola, a następnie Bezpieczne domeny.
    2. Dodać wpis domeny z adresu URL określonego w punkcie 2.
      Na przykład dodać: example.com:8080.
    3. W celu określenia opcji wybrać Skrypt i Połącz.
  4. Przetestować skrypty weryfikacji:
    1. Otworzyć analizę.
    2. Uruchomić analizę z poprawnymi i niepoprawnymi kryteriami.
    3. Sprawdzić, czy zapytania są blokowane zgodnie z oczekiwaniami.

Tworzenie skryptów JavaScript służących do blokowania analiz na podstawie kryteriów

Za każdym razem, gdy użytkownik próbuje uruchomić analizę, Oracle Analytics wywołuje funkcję validateAnalysisCriteria. Funkcję validateAnalysisCriteria można dostosować tak, aby weryfikowała i blokowała zapytania na podstawie kryteriów określonych przez użytkownika. Jeśli funkcja zwróci wartość true, zapytanie zostanie uruchomione. Jeśli funkcja zwróci wartość false lub wyświetli komunikat, zapytanie zostanie zablokowane.

Poniżej znajduje się przykładowy kod programu JavaScript o nazwie 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;
}

Jeśli funkcja zwróci wartość inną niż false, kryteria zostaną uznane za spełnione i zostanie uruchomiona analiza. Funkcja ta umożliwia również weryfikowanie kryteriów operacji wyświetlania podglądu i zapisu.

Tworzenie skryptów JavaScript służących do blokowania analiz na podstawie formuły

Za każdym razem, gdy użytkownik próbuje wprowadzić lub zmodyfikować formułę kolumny, Oracle Analytics wywołuje funkcję validateAnalysisFormula w celu zweryfikowania tej operacji. Funkcję validateAnalysisFormula można dostosować tak, aby weryfikowała i ewentualnie blokowała formuły na podstawie kryteriów określonych przez użytkownika. Jeśli funkcja zwróci wartość true, formuła zostaje zaakceptowana. Jeśli weryfikacja zakończy się niepowodzeniem, funkcja zwraca wartość false, formuła jest odrzucana i zostaje wyświetlony skonfigurowany komunikat niestandardowy.

Aby został wyświetlony komunikat, a użytkownicy mogli kontynuować, funkcja musi zwrócić wartość true. Aby zablokować zapytanie, funkcja musi zwrócić wartość false lub wyświetlić komunikat. W funkcji, w celu sprawdzania poprawności formuły, można używać funkcji napisowych i wyrażeń regularnych języka JavaScript.

Dostępne są funkcje pomocnicze umożliwiające funkcji blokowania zapytań sprawdzanie filtrów, kolumn itd. Zob. Funkcje pomocnicze dotyczące weryfikacji.

W poniższym przykładowym kodzie pokazano, w jaki sposób można blokować zapytanie, jeśli użytkownik wprowadzi nieakceptowalną formułę.

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

Funkcje pomocnicze dotyczące weryfikacji

W pliku JavaScript dostępnych jest kilka funkcji pomocniczych dotyczących weryfikacji.

Funkcja pomocnicza dotycząca weryfikacji Opis

CriteriaValidator.getSubjectArea()

Zwraca nazwę obszaru tematycznego, do którego odwołuje się analiza. Zazwyczaj jest używana w instrukcji "switch" wewnątrz funkcji przed wykonaniem dalszej weryfikacji. Jeśli analiza ma kryteria oparte na zbiorze, zwraca wartość null.

CriteriaValidator.tableExists(sTable)

Zwraca wartość true, jeśli określony folder (tabela) został dodany do analizy przez projektanta zawartości, oraz wartość false, jeśli folder nie został dodany.

CriteriaValidator.columnExists(sTable, sColumn)

Zwraca wartość true, jeśli określona kolumna została dodana do analizy przez projektanta zawartości, oraz wartość false, jeśli kolumna nie została dodana.

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

Sprawdza, czy istnieje kolumna dependentColumn, jeśli występuje kolumna checkColumn. Zwraca wartość true, gdy kolumna "checkColumn" nie występuje albo gdy występują obie kolumny checkColumn i kolumna zależna. Jeśli parametry checkColumn i dependentColumn mają wartość null, foldery są weryfikowane. Jeśli jakakolwiek kolumna z tabeli checkTable występuje, to musi również występować kolumna z tabeli dependentTable.

CriteriaValidator.filterExists(sFilterTable, sFilterColumn)

Zwraca wartość true, jeśli w określonej kolumnie istnieje filtr, oraz wartość false, jeśli żaden filtr nie występuje.

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

Sprawdza, czy istnieje filtr dependentFilter, jeśli kolumna checkColumn znajduje się na liście rzutowania. Zwraca wartość true, gdy kolumna checkColumn nie występuje albo gdy występuje zarówno kolumna checkColumn, jak i filtr zależny.

CriteriaValidator.filterCount(sFilterTable, sFilterColumn)

Zwraca liczbę wartości filtra określonych dla danej kolumny logicznej. Jeśli wartością filtra jest "equals", "null", "notNull" lub "in", funkcja zwraca liczbę wybranych wartości. Jeśli kolumna nie jest używana w filtrze, funkcja zwraca wartość 0. Jeśli kolumna jest objęta monitowaniem, ale nie ma wartości domyślnej, zwracana jest wartość -1. W przypadku wszystkich pozostałych operatorów filtrowania (takich jak "greater than", "begins with" itp.) funkcja zwraca wartość 999, ponieważ nie da się określić liczby wartości.