Convalidare e bloccare query nelle analisi utilizzando JavaScript personalizzato

È possibile sviluppare script di convalida in JavaScript per convalidare i criteri di analisi e le formule delle colonne, nonché per bloccare le query non valide.

Bloccare le query nelle analisi

Gli utenti che lavorano con le analisi possono richiamare JavaScript personalizzato per convalidare i criteri di analisi e le formule delle colonne. La convalida consente di bloccare le query durante la modifica di un'analisi. È necessario che JavaScript personalizzato sia accessibile mediante un Web server. Per abilitare questa funzione, gli amministratori specificano l'URL del Web server nelle impostazioni di sistema e registrano il Web server come dominio sicuro.

  1. Sviluppare gli script di convalida personalizzati in JavaScript, memorizzarli in un Web server e prendere nota dell'URL che punta al file JavaScript (*.JS) che contiene gli script personalizzati.
    Ad esempio, è possibile sviluppare uno script di blocco e memorizzarlo nel file myblocking.js; l'URL potrebbe essere http://example.com:8080/mycustomscripts/myblocking.js.
  2. Specificare l'URL del Web server nelle impostazioni di sistema:
    1. Fare clic su Console, quindi su Impostazioni di sistema avanzate.
    2. In URL per il blocco delle query nelle analisi immettere l'URL annotato nel passo 1.
  3. Registrare il Web server come dominio sicuro.
    1. Fare clic su Console, quindi su Domini sicuri.
    2. Aggiungere una voce per il dominio indicato nell'URL specificato nel Passo 2.
      Aggiungere, ad esempio, example.com:8080.
    3. Per le opzioni selezionare Script e Connetti.
  4. Eseguire il test degli script di convalida:
    1. Aprire un'analisi.
    2. Eseguire l'analisi con criteri validi e non validi.
    3. Verificare che le query siano bloccate come previsto.

Sviluppare codice JavaScript per bloccare le analisi in base a criteri

Ogni volta che un utente tenta di eseguire un'analisi, Oracle Analytics richiama la funzione validateAnalysisCriteria. È possibile personalizzare validateAnalysisCriteria per convalidare e bloccare le query in base a criteri specifici. Se la funzione restituisce true, la query viene eseguita. Se la funzione restituisce false o visualizza un messaggio, la query viene bloccata.

Ad esempio, di seguito è riportato un esempio di codice per un programma JavaScript denominato 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;
}

Se la funzione restituisce un valore diverso da false, il criterio viene considerato valido e l'analisi viene eseguita. La funzione viene utilizzata anche per convalidare i criteri per le operazioni di anteprima e salvataggio.

Sviluppare codice JavaScript per bloccare le analisi in base a formule

Ogni volta che un utente tenta di immettere o modificare una formula di colonna, Oracle Analytics richiama la funzione validateAnalysisFormula per verificare l'operazione. È possibile personalizzare validateAnalysisFormula per convalidare e bloccare le formule in base a criteri specifici. Se la funzione restituisce true, la formula viene accettata. Quando la convalida non riesce la funzione restituisce false, la formula viene rifiutata e viene visualizzato il messaggio personalizzato.

Per visualizzare un messaggio e consentire agli utenti di continuare, la funzione deve restituire true. Per bloccare la query, la funzione deve restituire false o visualizzare un messaggio. Nella funzione è possibile usare una stringa JavaScript e tecniche di espressione regolare per esaminare e convalidare la formula.

Le funzioni di supporto disponibili consentono alla funzione di blocco delle query di verificare la presenza di filtri, colonne e così via. Vedere Funzioni di supporto per la convalida.

Ad esempio, il codice riportato di seguito mostra come bloccare una query se un utente immette una formula non accettabile.

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

Funzioni di supporto per la convalida

In un file JavaScript sono disponibili diverse funzioni di supporto per la convalida.

Funzione di supporto per la convalida Descrizione

CriteriaValidator.getSubjectArea()

Restituisce il nome dell'area argomenti a cui fa riferimento l'analisi. In genere viene utilizzata in un'istruzione SWITCH all'interno della funzione prima di eseguire altre convalide. Se l'analisi è un criterio basato su set, restituisce null.

CriteriaValidator.tableExists(sTable)

Restituisce true se la cartella (tabella) specificata è stata aggiunta all'analisi dal designer del contenuto e false se la cartella non è stata aggiunta.

CriteriaValidator.columnExists(sTable, sColumn)

Restituisce true se la colonna specificata è stata aggiunta all'analisi dal designer del contenuto e false se la colonna non è stata aggiunta.

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

Verifica che dependentColumn esista se checkColumn è presente. Restituisce true se checkColumn non è presente oppure se checkColumn e la colonna dipendente sono presenti. Se checkColumn e dependentColumn sono null, le cartelle vengono convalidate. Se una colonna qualsiasi di checkTable è presente, è necessario che sia presente una colonna di dependentTable.

CriteriaValidator.filterExists(sFilterTable, sFilterColumn)

Restituisce true se nella colonna specificata è presente un filtro e false se non è presente alcun filtro.

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

Verifica che dependentFilter esista se checkColumn è presente nella lista di proiezione. Restituisce true se checkColumn non è presente oppure se checkColumn e il filtro dipendente sono presenti.

CriteriaValidator.filterCount(sFilterTable, sFilterColumn)

Restituisce il numero di valori di filtro specificati per la colonna logica indicata. Se il valore di filtro è "equals," "null," "notNull" o "in", restituisce il numero di valori scelti. Se la colonna non è usata in un filtro, restituisce zero. Se la colonna viene richiesta senza alcun valore predefinito, restituisce -1. Per tutti gli altri operatori di filtro (ad esempio "greater than", "begins with" e cos' via) restituisce 999 perché non è possibile determinare il numero di valori.