التحقق من الاستعلامات وحظرها في التحليلات باستخدام JavaScript المخصص

يمكنك تطوير اسكربتات للتحقق في جافا سكربت للتحقق من صحة معايير التحليل ومعادلات الأعمدة، وحظر الاستعلامات غير الصالحة.

حظر الاستعلامات في التحليلات

يمكن للمستخدمين الذين يعملون مع التحليلات استدعاء JavaScript مخصص للتحقق من صحة معايير التحليل ومعادلات الأعمدة. يسمح التحقق من الصحة بحظر الاستعلامات عند تحرير التحليل. يجب أن يكون الوصول إلى JavaScript المخصص متاحًا من خلال خادم الويب. ولتمكين هذه الميزة، يتعين على المسؤولين تحديد عنوان URL لخادم الويب في "إعدادات النظام" مع تسجيل خادم الويب كمجال آمن.

  1. قم بتطوير اسكربتات مخصصة للتحقق من الصحة بلغة جافا اسكربت، مع تخزينها في خادم ويب، وتدوين عنوان URL الذي يشير إلى ملف جافا اسكربت (*.JS) المشتمل على الاسكربتات المخصصة.
    على سبيل المثال، يمكنك تطوير اسكربت للحظر تقوم بتخزينه في myblocking.js، ويكون عنوان URL الخاص به:http://example.com:8080/mycustomscripts/myblocking.js.
  2. حدد عنوان URL لخادم الويب في "إعدادات النظام":
    1. انقر على وحدة التحكم، ثم انقر على إعدادات النظام المتقدمة.
    2. في عنوان URL الخاص بحظر الاستعلامات في التحليلات، أدخل عنوان URL الذي لاحظته في الخطوة 1.
  3. سجل خادم الويب كمجال آمن:
    1. انقر على وحدة التحكم ثم انقر على المجالات الآمنة.
    2. أضف إدخالاً للمجال في عنوان URL الذي حددته في الخطوة رقم 2.
      على سبيل المثال، يمكنك إضافة: example.com:8080.
    3. بالنسبة للخيارات، حدد الاسكربت والاتصال.
  4. اختبار اسكربتات التحقق من الصحة:
    1. افتح تحليل.
    2. قم بتشغيل التحليل باستخدام المعايير الصالحة وغير الصالحة.
    3. تحقق من حظر الاستعلامات كما هو متوقع.

تطوير جافا سكربت لمنع التحليلات بناءً على المعايير

عندما يحاول مستخدم تشغيل تحليل، يقوم Oracle Analytics باستدعاء الوظيفة validateAnalogyCriteria. يمكنك تخصيص validateAnalationCriteria للتحقق من صحة الاستعلامات وحظرها بناءً على معاييرك المحددة. إذا قامت الوظيفة بإرجاع true، فسيتم تشغيل الاستعلام. إذا قامت الوظيفة بإرجاع false أو عرضت رسالة، فسيتم حظر الاستعلام.

على سبيل المثال، ما يلي هو نموذج للتعليمات البرمجية لبرنامج جافا سكربت بالاسم 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;
}

إذا قامت الوظيفة بإرجاع أي شيء آخر غير false، فسيتم اعتبار المعايير صالحة وسيتم تشغيل التحليل. تُستخدم الوظيفة أيضًا للتحقق من صحة معايير عمليات المعاينة والحفظ.

تطوير JavaScript لمنع التحليلات المستندة إلى المعادلة

عندما يحاول مستخدم إدخال معادلة عمود أو تعديلها، يستدعي Oracle Analytics الوظيفة validateAnalogyFormula للتحقق من العملية. يمكنك تخصيص validateAnalogyFormula للتحقق من صحة المعادلات وحظرها بناءً على معاييرك المحددة. إذا أرجعت الدالة true، فسيتم قبول المعادلة. إذا فشل التحقق من الصحة، فستقوم الوظيفة بإرجاع false، وسيتم رفض المعادلة ثم سيتم عرض رسالتك المخصصة.

لعرض رسالة والسماح للمستخدمين بالاستمرار، يجب أن تُرجع وظيفتك القيمة true. لحظر الاستعلام، يجب أن تُرجع وظيفتك القيمة false أو عرض رسالة. يمكنك استخدام سلسلة JavaScript وتقنيات التعبيرات العادية في وظيفتك للتحقيق والتحقق من صحة المعادلة.

تتوفر الوظائف المساعدة حتى تتمكن وظيفة حظر الاستعلام من التحقق من المرشحات والأعمدة وما إلى ذلك. يُرجى الاطلاع على وظائف مساعد التحقق من الصحة.

على سبيل المثال، توضح التعليمة البرمجية التالية كيفية حظر استعلام إذا قام مستخدم بإدخال معادلة غير مقبولة.

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

وظائف مساعد التحقق من الصحة

تتوفر العديد من وظائف مساعد التحقق من الصحة في ملف JavaScript لتتمكن من استخدامها.

وظيفة مساعد التحقق من الصحة الوصف

CriteriaValidator.getSubjectArea()

إرجاع اسم مجال الموضوع المُشار إليه بواسطة التحليل. يتم استخدامه عمومًا في عبارة التبديل داخل الوظيفة قبل إجراء عمليات التحقق الأخرى. إذا كان التحليل عبارة عن معايير قائمة على مجموعة، فإنه يُرجع null.

CriteriaValidator.tableExists(sTable)

يتم إرجاع true إذا تمت إضافة المجلد المحدد (الجدول) إلى التحليل بواسطة مصمم المحتوى، وإرجاع false إذا لم تتم إضافة المجلد.

CriteriaValidator.columnExists(sTable, sColumn)

يتم إرجاع true إذا تمت إضافة العمود المحدد إلى التحليل بواسطة مصمم المحتوى، وإرجاع false إذا لم تتم إضافة العمود.

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

يتم إجراء عمليات التحقق للتأكد من وجود dependColumn في حالة وجود checkColumn. إرجاع true إذا لم يكن عمود الاختيار موجودًا، أو كان عمود الاختيار والعمود التابع موجودين. إذا كانت قيمة checkColumn وdependentColumn خالية، فسيتم التحقق من صحة المجلدات. في حالة وجود أي عمود من checkTable، فيجب أن يكون هناك عمود من dependentTable.

CriteriaValidator.filterExists(sFilterTable, sFilterColumn)

إرجاع true في حالة وجود مرشح في العمود المحدد، وإرجاع false في حالة عدم وجود مرشح.

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

يتم التحقق للتأكد من وجود dependentFilter في حالة وجود checkColumn في قائمة العرض. إرجاع true إذا لم يكن checkColumn موجودًا، أو كان checkColumn والمرشح التابع موجودين.

CriteriaValidator.filterCount(sFilterTable, sFilterColumn)

إرجاع عدد قيم الترشيح المحددة للعمود المنطقي المحدد. إذا كانت قيمة التصفية هي "يساوي" أو "null" أو "notNull" أو "in"، ثم تقوم بإرجاع عدد القيم المختارة. إذا لم يتم استخدام العمود في المرشح، فإنه يُرجع صفرًا. إذا تمت مطالبة العمود بدون أي إعدادات افتراضية، فسيتم إرجاع -1. بالنسبة لجميع المرشحات الأخرى (مثل "أكبر من"، و"يبدأ بـ"، وما إلى ذلك) فإنها ستُرجع 999، لأنه لا يمكن تحديد عدد القيم.