אשר תקינות וחסום שאילתות בניתוחים באמצעות JavaScript מותאם אישית

תוכל לפתח תסריטי בדיקת תקינות ב-JavaScript כדי לאשר תקינות לקריטריוני ניתוח ונוסחאות עמודות וכדי לחסום שאילתות לא תקפות.

חסום שאילתות בניתוחים

משתמשים העובדים עם ניתוחים יכולים להפעיל JavaScript מותאם אישית כדי לאשר את תקינותם של קריטריוני ניתוח ונוסחאות עמודות. בדיקת התקינות מאפשרת חסימת שאילתות בעת עריכת ניתוח. ה-JavaScript המותאם אישית חייב להיות נגיש דרך שרת אינטרנט. כדי לאפשר תכונה זו, מנהלנים מציינים את כתובת ה-URL של שרת האינטרנט בהגדרות המערכת ורושמים את שרת האינטרנט כדומיין בטוח.

  1. תוכל לפתח תסריטי בדיקת תקינות מותאמים אישית משלך ב-JavaScript, לאחסן אותם בשרת האינטרנט ולרשום לפניך את כתובת ה-URL שמפנה אל קובץ ה-JavaScript (*.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. ודא שהשאילתות חסומות כצפוי.

פתח JavaScript כדי לחסום ניתוחים על סמך קריטריונים

בכל פעם שמשתמש מנסה להריץ ניתוח, Oracle Analytics מפעיל את הפונקציה validateAnalysisCriteria. תוכל להתאים אישית את validateAnalysisCriteria כדי לאשר תקינות של שאילתות ולחסום אותן בהתבסס על הקריטריונים הספציפיים שלך. אם הפונקציה מחזירה true, השאילתא רצה. אם הפונקציה מחזירה שקר או מציגה הודעה, השאילתא חסומה.

לדוגמה, להלן קוד לדוגמה לתוכנית JavaScript בשם 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;
}

אם הפונקציה מחזירה משהו אחר מלבד שקר, הקריטריונים נחשבים לתקפים והניתוח רץ. הפונקציה משמשת גם לאימות קריטריונים לתצוגה מקדימה ופעולות שמירה.

פתח JavaScript כדי לחסום ניתוחים על סמך נוסחה

בכל פעם שמשתמש מנסה להזין או לשנות נוסחת עמודה, Oracle Analytics מפעיל את הפונקציה validateAnalysisFormula כדי לאמת את הפעולה. תוכל להתאים אישית את validateAnalysisFormula כדי לאשר תקינות של נוסחות ולחסום אותן בהתבסס על הקריטריונים הספציפיים שלך. אם הפונקציה מחזירה אמת, הנוסחה מתקבלת. אם בדיקת התקינות נכשלת, הפונקציה מחזירה שקר, הנוסחה נדחית וההודעה המותאמת אישית שלך מוצגת.

כדי להציג הודעה ולאפשר למשתמשים להמשיך, הפונקציה שלך צריכה להחזיר אמת. כדי לחסום את השאילתא, על הפונקציה שלך להחזיר שקר או להציג הודעה. תוכל להשתמש במחרוזת 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()

מחזירה את שם תחום הנושא שאליו הניתוח מתייחס. הוא משמש בדרך כלל במשפט switch בתוך הפונקציה לפני ביצוע בדיקת תקינות אחרת. אם הניתוח הוא קריטריונים מבוססי סל, אז הוא מחזיר null.

CriteriaValidator.tableExists(sTable)

מחזירה אמת אם התיקייה (טבלה) שצוינה נוספה לניתוח על-ידי מעצב התוכן, ושקר אם התיקייה לא נוספה.

CriteriaValidator.columnExists(sTable, sColumn)

מחזירה אמת אם העמודה שצוינה נוספה לניתוח על-ידי מעצב התוכן, ושקר אם העמודה לא נוספה.

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

בודק כדי לוודא ש-dependentColumn קיים אם checkColumn קיים. מחזירה את אמת אם checkColumn אינו קיים, או ש-checkColumn והעמודה התלויה קיימים. אם checkColumn ו-dependentColumn הם null, אז התיקיות מאומתות. אם קיימת עמודה כלשהי מ-checkTable, אז חייבת להיות עמודה מ-dependentTable.

CriteriaValidator.filterExists(sFilterTable, sFilterColumn)

מחזירה אמת אם קיים מסנן בעמודה שצוינה, ושקר אם לא קיים מסנן.

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

בודק כדי לוודא ש-dependentFilter קיים אם checkColumn קיים ברשימת הצפי. מחזירה אמת אם checkColumn אינו קיים, או אם checkColumn והמסנן התלוי קיימים.

CriteriaValidator.filterCount(sFilterTable, sFilterColumn)

מחזירה את מספר ערכי המסנן שצוינו בשביל העמודה הלוגית הנתונה. אם ערך המסנן הוא "שווה ל-", "null", "notNull", או "ב-", לאחר מכן היא מחזירה את מספר הערכים שנבחרו. אם העמודה אינה בשימוש במסנן, היא מחזירה אפס. אם ניתנה הנחיה לעמודה ללא ברירת מחדל, היא מחזירה -1. לכל שאר אופרטורי המסנן (כגון "גדול מ-", "מתחיל ב-," וכן הלאה) היא מחזרה 999, מכיוון שלא ניתן לקבוע את מספר הערכים.