Validera och blockera frågor i analyser med hjälp av anpassat JavaScript

Du kan utveckla valideringsskript i JavaScript för att validera analyskriterier och kolumnformler samt blockera ogiltiga frågor.

Blockera frågor i analyser

Användare som arbetar med analyser kan anropa anpassat JavaScript för att validera analyskriterier och kolumnformler. Valideringen gör att frågor kan blockeras vid redigering av en analys. Detta anpassade JavaScript måste vara åtkomligt via en webbserver. En administratör aktiverar funktionen genom att ange URL:en för webbservern i systeminställningarna och registrera webbservern som en säker domän.

  1. Utveckla de anpassade valideringsskripten i JavaScript, lagra dem på en webbserver och gör en anteckning om URL:en som pekar på JavaScript-filen (*.JS) med de anpassade skripten.
    Du skulle till exempel kunna utveckla ett blockeringsskript som du lagrar i myblocking.js och URL:en skulle kunna vara:http://example.com:8080/mycustomscripts/myblocking.js.
  2. Ange URL:en till webbservern i systeminställningarna:
    1. Klicka på Konsol och klicka sedan på Systeminställningar.
    2. I URL för blockering av frågor i analyser anger du URL:en du antecknade i steg 1.
  3. Registrera webbservern som en säker domän:
    1. Klicka på Konsol och klicka sedan på Säkra domäner.
    2. Lägg till en post för domänen i URL:en du angav i Steg 2.
      Du skulle till exempel kunna lägga till: example.com:8080.
    3. Du får åtkomst till alternativen genom att välja Skript och Anslut.
  4. Testa valideringsskripten:
    1. Öppna en analys.
    2. Kör analysen med både giltiga och ogiltiga kriterier.
    3. Verifiera att frågorna blockeras som förväntat.

Utveckla JavaScript för att blockera analyser baserat på kriterier

När en användare försöker köra en analys anropar Oracle Analytics funktionen validateAnalysisCriteria. Du kan anpassa validateAnalysisCriteria så att du kan validera och blockera frågor baserat på dina egna specifika kriterier. Om funktionen returnerar true körs frågan. Om funktionen returnerar false eller ett meddelande visas har frågan blockerats.

Här följer till exempel exempelkod för ett JavaScript-program med namnet 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;
}

Om funktionen returnerar någonting annat än värdet false anses kriterierna vara giltiga och analysen körs. Funktionen används också till att validera kriterier för förhandsgranskning och sparning.

Utveckla JavaScript för att blockera analyser baserat på formler

När en användare försöker ange eller ändra en kolumnformel anropar Oracle Analytics funktionen validateAnalysisFormula för att verifiera åtgärden. Du kan anpassa validateAnalysisFormula så att formler valideras och blockeras baserat på dina egna kriterier. Om funktionen returnerar true har formeln accepterats. Om valideringen misslyckas returnerar funktionen false, formeln avvisas och det anpassade meddelandet visas.

För att ett meddelande ska visas och användarna ska tillåtas fortsätta måste funktionen returnera true. Funktionen måste returnera false eller visa ett meddelande för att frågan ska blockeras. Du kan använda en JavaScript-sträng och teknik för reguljära uttryck i funktionen för att undersöka och validera formeln.

Det finns hjälpfunktioner som gör att frågeblockeringsfunktionen kan söka efter t.ex. filter och kolumner. Se Funktioner för valideringshjälp.

Följande kod visar t.ex. hur en fråga ska blockeras om en användare anger en ej godkänd formel.

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

Funktioner för valideringshjälp

Flera funktioner för valideringshjälp finns i en JavaScript-fil som du kan använda.

Funktion för valideringshjälp Beskrivning

CriteriaValidator.getSubjectArea()

Returnerar namnet på det ämnesområde som refereras av analysen. Den används vanligen i en switch-sats inom funktionen innan annan validering utförs. Om analysen är av uppsättningsbaserade kriterier returneras null.

CriteriaValidator.tableExists(sTable)

Returnerar true om den angivna mappen (tabellen) har lagts till i analysen av innehållskonstruktören och false om mappen inte lagts till.

CriteriaValidator.columnExists(sTable, sColumn)

Returnerar true om den angivna kolumnen har lagts till i analysen av innehållskonstruktören och false om kolumnen inte lagts till.

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

Kontrollerar att dependentColumn finns om checkColumn finns. Funktionen returnerar true om checkColumn inte finns eller om både checkColumn och den beroende kolumnen finns. Om checkColumn och dependentColumn är null valideras mapparna. Om någon kolumn från checkTable finns med måste en kolumn från dependentTable finnas.

CriteriaValidator.filterExists(sFilterTable, sFilterColumn)

Returnerar true om det finns ett filer i den angivna kolumnen och false om det inte finns något filter.

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

Kontrollerar att dependentFilter finns om checkColumn finns med i framskrivningslistan. Funktionen returnerar true om checkColumn inte finns eller om både checkColumn och det beroende filtret finns.

CriteriaValidator.filterCount(sFilterTable, sFilterColumn)

Returnerar det antal filtervärden som har angetts för den givna logiska kolumnen. Om filtervärdet är "equals", "null", "notNull" eller "in" returneras det valda antalet värden. Om kolumnen inte används i ett filer returnerar funktionen noll. Om kolumnen efterfrågas utan standardvärde returnerar den -1. För alla andra filteroperatorer (som "greater than," "begins with" osv.) returneras 999 eftersom antalet värden inte kan fastställas.