Abfragen in Analysen mit benutzerdefiniertem JavaScript validieren und blockieren

Sie können Validierungsskripte in JavaScript entwickeln, um Analysekriterien und Spaltenformeln zu validieren und ungültige Abfragen zu blockieren.

Abfragen in Analysen blockieren

Benutzer von Analysen können benutzerdefiniertes JavaScript aufrufen, um Analysekriterien und Spaltenformeln zu validieren. Diese Validierung ermöglicht es, Abfragen beim Bearbeiten einer Analyse zu blockieren. Das benutzerdefinierte JavaScript muss über einen Webserver zugänglich sein. Um dieses Feature zu aktivieren, müssen Administratoren die URL des Webservers in den Systemeinstellungen angeben und den Webserver als sichere Domain registrieren.

  1. Entwickeln Sie benutzerdefinierte Validierungsskripte in JavaScript, speichern Sie sie in einem Webserver, und notieren Sie sich die URL zur JavaScript-(*.JS-)Datei mit den benutzerdefinierten Skripten.
    Beispiel: Sie entwickeln ein Blockierungsskript und speichern dieses in myblocking.js. Dann lautet die URL: http://example.com:8080/mycustomscripts/myblocking.js.
  2. Geben Sie die URL des Webservers in den Systemeinstellungen an:
    1. Klicken Sie auf Konsole und dann auf Systemeinstellungen.
    2. Geben Sie unter URL zum Blockieren von Abfragen in Analysen die URL ein, die Sie in Schritt 1 notiert haben.
  3. Registrieren Sie den Webserver als sichere Domain:
    1. Klicken Sie auf Konsole und dann auf Sichere Domains.
    2. Fügen Sie einen Eintrag für die in Schritt 2 angegebene URL hinzu.
      Beispiel: Sie können example.com:8080 hinzufügen.
    3. Wählen Sie als Optionen Skript und Verbinden aus.
  4. Testen Sie die Validierungsskripte:
    1. Öffnen Sie eine Analyse.
    2. Führen Sie die Analyse sowohl mit gültigen als auch mit ungültigen Kriterien aus.
    3. Stellen Sie sicher, dass Abfragen wie erwartet blockiert werden.

JavaScript zum Blockieren von Analysen auf Kriterienbasis entwickeln

Wenn ein Benutzer eine Analyse ausführt, ruft Oracle Analytics die Funktion validateAnalysisCriteria auf. Sie können validateAnalysisCriteria anpassen, um Abfragen basierend auf Ihren eigenen spezifischen Kriterien zu validieren und zu blockieren. Wenn die Funktion true zurückgibt, wird die Abfrage ausgeführt. Wenn die Funktion false zurückgibt oder eine Meldung anzeigt, wird die Abfrage blockiert.

Der folgende Beispielcode ist für ein JavaScript-Programm namens 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;
}

Wenn die Funktion eine andere Antwort als false zurückgibt, gelten die Kriterien als gültig, und die Analyse wird ausgeführt. Die Funktion wird auch zum Validieren von Kriterien für Vorschau- und Speichervorgänge verwendet.

JavaScript zum Blockieren von Analysen auf Formelbasis entwickeln

Wenn ein Benutzer eine Spaltenformel eingibt oder ändert, ruft Oracle Analytics die Funktion validateAnalysisFormula auf, um den Vorgang zu verifizieren. Sie können validateAnalysisFormula anpassen, um Formeln basierend auf Ihren eigenen spezifischen Kriterien zu validieren und zu blockieren. Wenn die Funktion true zurückgibt, wird die Formel akzeptiert. Wenn die Validierung nicht erfolgreich verläuft, gibt die Funktion false zurück. Dann wird die Formel abgelehnt und Ihre benutzerdefinierte Meldung angezeigt.

Um eine Meldung anzuzeigen und das Fortsetzen des Vorgangs zu ermöglichen, muss die Funktion true zurückgeben. Um die Abfrage zu blockieren, muss die Funktion false zurückgeben oder eine Meldung anzeigen. Mit einer JavaScript-Zeichenfolge und Methoden für reguläre Ausdrücke in der Funktion können Sie die Formel prüfen und validieren.

Helper-Funktionen sind verfügbar, damit die Abfrageblockierungsfunktion nach Filtern, Spalten usw. suchen kann. Siehe Validierungs-Helper-Funktionen.

Beispiel: Der folgende Code zeigt, wie Sie eine Abfrage blockieren, wenn ein Benutzer eine unzulässige Formel eingibt.

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

Validierungs-Helper-Funktionen

Mehrere Validierungs-Helper-Funktionen sind in einer JavaScript-Datei für Sie verfügbar.

Validierungs-Helper-Funktion Beschreibung

CriteriaValidator.getSubjectArea()

Gibt den Namen des von der Analyse referenzierten Themenbereichs zurück. Die Funktion wird im Allgemeinen in einer switch-Anweisung innerhalb der Funktion verwendet, bevor eine andere Validierung ausgeführt wird. Wenn die Analyse setbasierte Kriterien betrifft, wird null zurückgegeben.

CriteriaValidator.tableExists(sTable)

Gibt true zurück, wenn der angegebene Ordner (die Tabelle) vom Inhaltsdesigner zur Analyse hinzugefügt wurde, und false, wenn der Ordner nicht hinzugefügt wurde.

CriteriaValidator.columnExists(sTable, sColumn)

Gibt true zurück, wenn die angegebene Spalte vom Inhaltsdesigner zur Analyse hinzugefügt wurde, und false, wenn die Spalte nicht hinzugefügt wurde.

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

Stellt sicher, dass dependentColumn vorhanden ist, wenn checkColumn vorliegt. Gibt true zurück, wenn checkColumn nicht vorhanden ist oder wenn checkColumn und die abhängige Spalte vorhanden sind. Wenn checkColumn und dependentColumn null sind, werden die Ordner validiert. Wenn eine Spalte von checkTable vorhanden ist, muss auch eine Spalte von dependentTable vorhanden sein.

CriteriaValidator.filterExists(sFilterTable, sFilterColumn)

Gibt true zurück, wenn ein Filter für die angegebene Spalte vorhanden ist, und false, wenn kein Filter vorhanden ist.

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

Stellt sicher, dass dependentFilter vorhanden ist, wenn checkColumn in der Projektionsliste enthalten ist. Gibt true zurück, wenn checkColumn nicht vorhanden ist oder wenn checkColumn und der abhängige Filter vorhanden sind.

CriteriaValidator.filterCount(sFilterTable, sFilterColumn)

Gibt die Anzahl der Filterwerte zurück, die für die jeweilige logische Spalte angegeben sind. Wenn der Filterwert "equals", "null," "notNull" oder "in" lautet, wird die Anzahl der ausgewählten Werte zurückgegeben. Wenn die Spalte in keinem Filter verwendet wird, gibt die Funktion 0 zurück. Wenn die Spalte ohne Standardwert angefordert wird, gibt die Funktion "-1" zurück. Für alle anderen Filteroperatoren (wie "greater than," "begins with" usw.), wird 999 zurückgegeben, da die Anzahl der Werte nicht bestimmt werden kann.