Özel JavaScript Kullanarak Analizlerdeki Sorguları Doğrulama ve Engelleme

Analiz ölçütlerini ve sütun formüllerini doğrulamak ve geçersiz sorguları engellemek için JavaScript'te doğrulama komut listeleri geliştirebilirsiniz.

Analizlerde Sorguları Engelleme

Analiz ölçütlerini ve sütun formüllerini doğrulamak için özel JavaScript çağırabilen analizler ile çalışan kullanıcılar. Bir analiz düzenlenirken doğrulama sorguların engellenmesine olanak tanır. Özel JavaScript bir web sunucusu yoluyla erişilebilir olmalıdır. Bu özelliği etkinleştirmek için yöneticiler web sunucusunun URL'sini sistem ayarlarında belirtir ve web sunucusunu güvenli bir etki alanı olarak kaydederler.

  1. JavaScript ile özel doğrulama komut listelerinizi geliştirin, komut listelerini bir web sunucusuna saklayın ve özel komut listelerini içeren JavaScript (*.JS) dosyasına işaret eden URL için not hazırlayın.
    Örneğin, myblocking.js içinde sakladığınız bir engelleme komut listesi geliştirebilirsiniz ve URL şu olabilir:http://example.com:8080/mycustomscripts/myblocking.js.
  2. Sistem ayarlarında web sunucunuzun URL'sini belirleyin:
    1. Konsol'a tıklayın, ardından Sistem Ayarları'na tıklayın.
    2. Analizlerde Sorguları Engelleme URL'sinde Adım 1'de belirlediğiniz URL'yi girin.
  3. Web sunucusunu güvenli etki alanı olarak kaydedin:
    1. Konsol'a tıklayın, ardından Güvenli Etki Alanları'na tıklayın.
    2. Adım 2'de belirttiğiniz URL'deki etki alanı için bir giriş ekleyin.
      Örneğin, şunu ekleyebilirsiniz: example.com:8080.
    3. Seçenekler için, Komut Listesi ve Bağlan seçin.
  4. Doğrulama komut listelerinizi test edin:
    1. Bir analiz açın.
    2. Analizi hem geçerli hem de geçersiz ölçütler ile çalıştırın.
    3. Sorgularınızın beklendiği gibi engellendiğini doğrulayın.

Ölçütleri Esas Alarak Analizleri Engellemek İçin JavaScript Geliştirme

Kullanıcı bir analiz çalıştırmayı her denediğinde Oracle Analitik validateAnalysisCriteria fonksiyonunu çağırır. Kendi belirli ölçütlerinizi esas alarak sorguları doğrulamak ve engellemek üzere validateAnalysisCriteria uyarlayabilirsiniz. Fonksiyon doğru döndürürse sorgu çalışır. Fonksiyon false döndürürse veya bir mesaj görüntülerse sorgu engellenir.

Örneğin, şu myblocking.js adlı bir JavaScript programına ilişkin örnek bir koddur.

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

Fonksiyon false dışında herhangi bir değer döndürürse ölçütler geçerli olarak değerlendirilir ve analiz çalışır. Fonksiyon aynı zamanda önizleme ve kaydetme işlemlerine ilişkin ölçütleri doğrulamak için de kullanılır.

Formülü Esas Alarak Analizleri Engellemek İçin JavaScript Geliştirme

Bir kullanıcı bir sütun formülü girmeye veya değiştirmeye çalıştığında Oracle Analitik işlemi doğrulamak üzere validateAnalysisFormula fonksiyonunu çağırır. Kendi belirli ölçütlerinizi esas alarak formülleri doğrulamak ve engellemek üzere validateAnalysisFormula uyarlayabilirsiniz. Fonksiyon true döndürürse formül kabul edilir. Doğrulama başarısız olursa fonksiyon false döndürür, formül reddedilir ve özel mesajınız görüntülenir.

Mesaj görüntülemek ve kullanıcıların devam etmesine izin vermek için fonksiyonunuz true döndürmelidir. Sorguyu engellemek için fonksiyonunuz yanlış döndürmeli veya bir mesaj görüntülemelidir. Formülü incelemek ve doğrulamak için fonksiyonunuzda bir JavaScript dizesi ve düzenli ifade teknikleri kullanabilirsiniz.

Sorgu engelleme fonksiyonunun filtreleri, sütunlar vb. kontrol edebilmesi için yardımcı fonksiyonlar kullanılabilir. Bkz. Doğrulama Yardımcı Fonksiyonları.

Örneğin, aşağıdaki kod bir kullanıcı kabul edilemeyen bir formül girerse bir sorgunun nasıl engelleneceğini göstermektedir.

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

Doğrulama Yardımcı Fonksiyonları

Bazı doğrulama yardımcı fonksiyonları kullanmanız için bir JavaScript dosyasında mevcuttur.

Doğrulama Yardımcı Fonksiyonu Açıklama

CriteriaValidator.getSubjectArea()

Analizin referans aldığı konu alanının adını döndürür. Genel olarak diğer doğrulama öncesinde fonksiyon içindeki switch komutunda kullanılır. Analiz küme esaslı ölçüt ise null döndürür.

CriteriaValidator.tableExists(sTable)

Belirtilen klasör (tablo) analize içerik tasarımcısı tarafından eklenmişse true döndürür ve klasör eklenmemişse false döndürür.

CriteriaValidator.columnExists(sTable, sColumn)

Belirtilen sütun analize içerik tasarımcısı tarafından eklenmişse true döndürür ve sütun eklenmemişse false döndürür.

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

checkColumn varsa dependentColumn mevcut olduğunu emin olmak üzere kontrol eder. checkColumn mevcut değilse veya checkColumn ve bağımlı sütun mevcutsa doğru döndürür. checkColumn ve dependentColumn null ise klasörler doğrulanır. checkTable öğesinden herhangi bir sütun mevcutsa dependentTable öğesinden herhangi bir sütun da mevcut olmalıdır.

CriteriaValidator.filterExists(sFilterTable, sFilterColumn)

Belirtilen sütunda bir filtre varsa true döndürür ve filtre yoksa false döndürür.

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

Projeksiyon listesinde checkColumn varsa dependentFilter mevcut olduğunu emin olmak üzere kontrol edin. checkColumn mevcut değilse veya checkColumn ve bağımlı filtre mevcutsa true döndürür.

CriteriaValidator.filterCount(sFilterTable, sFilterColumn)

Belirtilen mantıksal sütun için filtre değerlerinin sayısını döndürür. Filtre değeri "equals" (eşittir), "null" (boş), "notNull" (boş değil) veya "in" (içinde) ise seçilen değer sayısını döndürür. Sütun bir filtrede kullanılmazsa sıfır döndürür. Sütun öndeğer olmadan istenirse -1 döndürür. Diğer tüm filtre işleçleri için (örneğin "greater than" (büyüktür), "begins with" (şununla başlar) vb.) değer sayısı belirlenemediğinden 999 döndürür.