Salesforce Apex – מגבלות המושל

Salesforce Apex Mgblwt Hmwsl



Salesforce מאפשרת לנו לעבד או לבצע מספר מסוים של הצהרות/רשומות בכל פעם. יש כמה מגבלות לביצוע או עיבוד של הצהרות DML, מחלקות Apex וכו'. מגבלות אלו ידועות כגבולות המושל. במדריך זה נראה מהן מגבלות הנגיד וכיצד ניתן לטפל בהן. כמו כן, Salesforce Apex מספקת את המחלקה 'Limit' כדי לדעת את המגבלות הקשורות להסברים, מחלקות Apex, רכיבי Web Lightning, הצהרות SOSL ו-SOQL.

גבולות המושל

שקול תרחיש שבו Alish ו-Subash הם שני אנשים המשתמשים בארגון Salesforce. אליס רוצה לעבד או לבצע 1000 הצהרות DML בעסקה אחת. במקביל, סובאש רוצה לטעון 5000 רשומות בכל פעם. אם הם עושים את זה במקביל, Salesforce לא יסכים והופך לקדחתני. מכאן שמגבלות הנגיד נכנסות לתמונה. במקרה זה, אליש יכולה לעבד 100 DML בכל פעם ו- Subash יכולה לעבד 500 רשומות בכל פעם. הם יכולים להשתמש ב-AsynchronousBatch Apex כדי לבצע כל עסקה בשרשור נפרד מבלי להפריע לכל אחד מהם ולהשלים את המשימה שלהם.







בעיקרון, מגבלות הנגיד ב-Salesforce מגבילות את העיבוד והביצוע במספר עסקאות. 'מגבלות קצה לפי עסקה' סופרות עבור כל עסקה ו'מגבלה ספציפית לגודל' עוסקת בגודל הקוד. Salesforce תומך בשני תהליכים: תהליכים סינכרוניים וא-סינכרוניים. בתהליך הסינכרוני, הסקריפט של Apex מבוצע במכה אחת ואילו בתהליך האסינכרוני, הסקריפט של Apex מבוצע על ידי פיצול למספר עבודות.



גבולות מותרים

בואו נדון בספירת המגבלה עבור תרחישים שונים:



  1. ניתן לעבד/להריץ 100 שאילתות SOQL ב-Apex סינכרוני ו-200 שאילתות SOQL ב-Apex אסינכרוני.
  2. רק 50,000 רשומות יחזרו משאילתת SOQL עבור קודקוד סינכרוני ואסינכרוני כאחד.
  3. אם אנו משתמשים ב-Database.getQueryLocator(), רק 10,000 מוחזרים בכל פעם עבור Apex סינכרוני וגם אסינכרוני.
  4. בשני התרחישים, מספר שאילתות ה-SOSL שהונפקו הוא 20.
  5. גודל הערימה הנדרש לעיבוד ה- Apex הסינכרוני הוא 6 MB. עבור Apex אסינכרוני, גודל הערימה הנדרש הוא כפול מה שהופך אותו ל-12 MB.
  6. זמן ה-CPU המרבי המותר עבור Apex סינכרוני הוא 10,000 מילישניות ו-60,000 מילישניות עבור Apex אסינכרוני.
  7. מותרות רק 10 דקות לביצוע עבור שני Apex.
  8. בשני המקרים, אנו יכולים להשתמש רק בשיטת 10 sendEmail() עם 100 נמענים.
  9. התווים שקיימים במחלקת Apex או בטריגר של Apex חייבים להיות בטווח של מיליון אחד.
  10. ב-Batch Apex (אסינכרוני), הגודל הוא 200. QueryLocator() של מחלקת 'Database' מחזיר 50 מיליון רשומות לכל עסקה.
  11. רק 5 משרות Apex יהיו בתור או פעילות.

דוגמה לכיתה LIMIT:

Apex יכול לציין את מגבלות המושל במחלקת 'LIMIT'. מחלקה זו מספקת כמה שיטות שמספרות על גבולות המושל. הבה נסתכל על הדוגמה הבאה המציגה כמה מגבלות של נגיד:





System.debug('ניתן לעבד את מספר השאילתות המצטברות: '+ Limits.getLimitAggregateQueries());

System.debug('ניתן לעבד מספר הצהרות שירות האינטרנט: '+ Limits.getLimitCallouts());

System.debug('ניתן לעבד מספר רשומות: '+ Limits.getLimitDmlRows());

System.debug('ניתן לקרוא למספר הצהרות DML: '+ Limits.getLimitDmlStatements());

System.debug('כמות הזיכרון הכוללת בבתים: '+ Limits.getLimitHeapSize());

System.debug('ניתן להנפיק מספר שאילתות SOQL: '+ Limits.getLimitQueries());

System.debug('ניתן להנפיק מספר רשומות: '+ Limits.getLimitQueryRows());

System.debug('ניתן להנפיק מספר שאילתות SOSL:  '+ Limits.getLimitSoslQueries());

תְפוּקָה:

כמו כן, ניתן לבדוק כמה הצהרות/שורות DML ניתן להחזיר באמצעות שיטות ה-'dome' הקיימות במחלקה 'LIMIT'.



  1. Limits.getDMLStatements() מחזיר את סך הצהרות ה-DML המשמשות במופע.
  2. Limits.getDMLRows() מחזירה את המספר הכולל של שורות שמוחזרות על ידי הצהרות DML.
  3. Limits.getCpuTime() מחזירה את הזמן המנוצל במעבד עבור העסקה הנוכחית באלפיות שניות.

דוגמה לשימוש:

בוא נכתוב שאילתת SOQL שמחזירה את שתי הרשומות מהאובייקט 'WorkOrder'. לאחר מכן, מחק את שתי הרשומות הללו באמצעות 'מחק' DML.

System.debug('DML Statements:'+Limits.getDMLStatements());

System.debug('Rows: '+Limits.getDmlRows());

System.debug('CPU Time '+Limits.getCpuTime());

// SOQL שאילתה לבחירת 2 שורות מאובייקט WorkOrder

List accounts = [SELECT Id FROM WorkOrder LIMIT 2];

//השתמש ב-delete DML כדי למחוק שתי שורות

מחיקת חשבונות;

System.debug('**After SOQL:**');

System.debug('DML Statements:'+Limits.getDMLStatements());

System.debug('Rows: '+Limits.getDmlRows());

System.debug('CPU Time '+Limits.getCpuTime());

תְפוּקָה:

בדוגמה הנתונה, אין הצהרות DML ו-0 שורות. זמן המעבד הקיים הוא 1 אלפית שנייה. לאחר החזרת 2 שורות משאילתת SOQL ומחיקת שתי שורות אלו, המספר הכולל של משפטי DML שמוחזר על ידי Limits.getDMLStatements() הוא 1, סך השורות המוחזר על ידי Limits.getDMLRows()  הוא 2, וה-CPU הזמן הדרוש לביצוע עסקה זו הוא 51 מילישניות.

דוגמה לשיטות עבודה מומלצות: 'לעולם אל תשתמש ב-DML בתוך הלולאה'

בואו נראה כיצד נוכל להפעיל את הקוד מבלי לקבל את מגבלת המושל. ראשית, אנו יוצרים רשומה על האובייקט 'מוצר' (API - מוצר2) מהאובייקט 'WorkOrder' על ידי הקצאת הנושא 'WorkOrder' ל-'Product Name' בלולאת 'for' עצמה. בוא נראה את הקוד הבא:

Product2 prod_obj;

עבור (WorkOrder wo_object : [SELECT Subject FROM WorkOrder])

{

prod_obj = מוצר חדש2(שם = wo_object.Subject);

הכנס prod_obj;

}

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

List prod_s = new List();

Product2 prod_obj;

עבור (WorkOrder wo_object : [SELECT Subject FROM WorkOrder])

{

prod_obj = מוצר חדש2(שם = wo_object.Subject);

prod_s.add(prod_obj);

}

הכנס prod_obj;

סיכום

כעת למדנו מהן מגבלות Apex ב-Salesforce עם הסבר מפורט. עדיף ללכת עם תהליך ה-Asynchronous Apex כדי להשיג גבולות נגיד טובים יותר בהשוואה ל-Synchronous Apex. למדנו גם על מגבלות הנגיד עבור תרחישים שונים ונתנו הדגמה לדוגמה לגבי ספירת המגבלות משיעור 'הגבלה'. אימתנו גם את ספירת הצהרות DML, שורות וזמן CPU על ידי הפעלת משפט DML אחד. סיימנו את המדריך הזה על ידי דיון בדוגמה אחת של שיטות עבודה מומלצות.