סקירה כללית על עיבוד אסינכרוני ב-Salesforce

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

מהו עיבוד אסינכרוני?

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

1. שיפור חווית המשתמש וביצועים

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

2. גבולות גבוהים יותר

Salesforce imposes מגבלות מחמירות על עסקאות סינכרוניות, כגון מספר השאילתות או פעולות DML לכל עסקה. עיבוד אסינכרוני מספק מגבלות ביצוע נוספות, מה שנותן לך יותר מקום להרחיב את הפעולות שלך.

3. יכולת סקלציה

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

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

שקפי עיקריות

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

1. עיבוד אסינכרוני אינו מגביל ב- SLA

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

2. בחירת הכלי הנכון עבור העבודה

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

3. Bulkify את הקוד שלך

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

4. ליישם טיפול בשגיאות ומעקב

מאחר שמשימות אסינכרוניות רצות ברקע, חשוב להטמיע טיפול בשגיאות ומעקב יציב. יש להשתמש בבלוקי try-catch ולרשום את השגיאות לאובייקטים מותאמים למעקב קל. בנוסף, יש ליישם לוגיקת ניסיון מחדש על מנת לנהל כשלים חולניים, כגון בעיות בקריאת API, על מנת להבטיח את אמינות התהליכים שלך.

עיון מעמיק בכלי אסינכרוניים

בואו נביט לעומק בכלי האסינכרוניים ב-Salesforce.

Future Methods

שיטות עתידיות משמשות לפעולות שיכולות להרוץ באופן עצמאי בניטורם האישי שלהם. אחת המקרים הנפוצים הוא בביצוע קריאות לשירות חיצוניות בהן המשתמש אינו צריך לחכות להשלמת הפעולה.

כדי להגדיר שיטת עתיד, מספיק לקשור את השיטה בהערה @future.

Java

 

public class FutureClass {
@future
 public static void myFutureMethod(list recordIds){
   //קוד פעולה ארוכה
 }  
}

נקודות מרכזיות על שיטות עתידיות:

  • סטטי. שיטות עתידיות חייבות להיות סטטיות.
  • סוג החזרה ריק. הן יכולות להחזיר רק void.
  • סוגי נתונים פרימיטיביים. שיטות עתידיות יכולות לקבל רק סוגי נתונים פרימיטיביים (למשל, String, Integer, Id). הן לא יכולות לקבל אובייקטים מורכבים כפרמטרים.
  • קריאות. אם השיטה העתידית צריכה לבצע קריאת שירות רשת, עליך לכלול את המאפיין callout=true בהערת האנוטציה כדי לאפשר לשיטה לבצע את הקריאה.
Java

 

public class FutureClass {
@future(callout = true)
 public static void myFutureMethod(){
   //קריאה לשירות כאן
 }  
}

Queueable Apex

דומה לשיטות עתידיות, Queueable Apex מאפשר לך להפעיל פעולות בתהליך משלו, ובכך מהווה פתרון אידיאלי למשימות ארוכות טווח. הוא משתמש בתור העבודות של Apex ומספק גישה גמישה וחזקה יותר לעיבוד אסינכרוני בהשוואה לשיטות עתידיות.

כדי ליישם Queueable Apex, המחלקה שלך חייבת ליישם את ממשק Queueable. על המחלקה להגדיר תמיד שיטת execute, שמכילה את הלוגיקה לפעולה האסינכרונית.

Java

 

public class QueueableClass implements Queueable{
public void execute(QueueableContext context){
  //פעולה ארוכה טווח
}
}

ניתן להריץ את Queueable Apex על ידי קריאה ל־System.enqueueJob(), שמוסיף את המשימה לתור ומחזיר זיהוי משימה. זהו זיהוי המשימה שניתן להשתמש בו לניטור סטטוס המשימה על ידי שאילתת אובייקט AsyncApexJob.

Java

 

ID jobID = System.enqueueJob(new QueueableClass());

נקודות מרכזיות על Queueable Apex:

  • סוגי נתונים לא פרימיטיביים. להבדיל מהשיטות העתידיות, ניתן להשתמש בסוגי נתונים לא פרימיטיביים כמשתנים חברים במחלקה Queueable.
  • שרשור משימות. משימות Queueable יכולות להיות שרשור, מאפשרות לך להתחיל משימה שנייה ממשימה שכבר רצה, ובכך ליצור רצף של פעולות אסינכרוניות.

Batch Apex

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

כדי ליישם Batch Apex, על המחלקה שלך ליישם את הממשק Database.Batchable. מחלקת Batch Apex צריכה להגדיר שלושה שיטות: start, execute, ו- finish.

1. שיטת ההתחלה

שיטה זו מבוצעת בתחילת העבודה בתוך הציוץ. היא צריכה לכלול את שאילתת ה-SOQL לאיסוף קבוצת המידע הגדולה ולהחזיר QueryLocator. הגבולה על מספר הרשומות המבוצעות על ידי שאילתת SOQL נעקם בשיטת start בעת שימוש ב-Batch Apex.

Java

 

public Database.QueryLocator start(Database.BatchableContext bc) {}

2. שיטת הביצוע

השיטה execute מתקבלת לכל צירוף של רשומות. יש לשים לב שלא מובטחת הסדרה בו הרשומות מעובדות.

Java

 

public void execute(Database.BatchableContext bc, list<Object>){}

3. שיטת הסיום

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

כדי להפעיל עבודת ציוץ, יש להשתמש בשיטת Database.executeBatch. פעולה זו מוסיפה את עבודת הציוץ לתוך התור האסינכרוני.

שיטת Database.executeBatch מקבלת שני פרמטרים:

  1. מופע של מחלקת Batch Apex.
  2. פרמטר אופציונלי של גודל הציוץ, שמציין את מספר הרשומות לכל ציוץ. הגודל המרבי של ציוץ שניתן לציין הוא 2000.
Java

 

ID batchprocessid = Database.executeBatch(new BatchApex(),2000);

שיטות מומלצות בשימוש ב-Asynchronous Apex

להימנע מהפעלת שיטות עתידיות או ניתפים בתהליכים בעלי נפח גבוה

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

אופטימיזציה של ביצועים

יש לוודא כי ביצועי שיטות עתידיות או ניתפים מומצאים. כך כולל:

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

שימוש ב-Batch Apex לנפחי נתונים גדולים

לעיבוד מספר רב של רשומות, תמיד עדיף להשתמש ב-Batch Apex מעל שיטות עתידיות או ניתפים. Batch Apex מיועד לטיפול בסטים גדולים של נתונים ביעילות, בעוד ששיטות עתידיות וניתפים מתאימות יותר למשימות קטנות.

Queueable Apex מספק גמישות גדולה יותר

Queueable Apex מציע יותר שליטה על ביצוע המשימות בהשוואה לשיטות עתידיות, כגון היכולת לרכז משימות או לטפל בנפחי נתונים גדולים בצורה יעילה יותר.

Conclusion

לסיכום, ה-Asynchronous Apex ב- Salesforce הוא כלי עז שמשמש לטיפול בתהליכים ארוכי טווח ומאוד משאביים, במהלך שמתוחזקת יעילות המערכת וחוויית המשתמש. על ידי הבנה של השיטות האסינכרוניות השונות הזמינות – כגון Future Methods, Queueable Apex, ו־Batch Apex – ועל ידי עקיבה אחרי המדריכים הטובים, תוכל לעצב פתרונות יעילים ונשקלים שמקסימליזים את הקוד ואת המשאבים של המערכת שלך. זכור לשקול גורמים כמו הגבלות המושל, אופטימיזצית ביצועים, וטיפול בשגיאות כדי להבטיח כי המשימות האסינכרוניות שלך ירוצו בצורה חלקה ואמינה.

Source:
https://dzone.com/articles/asynchronous-processing-salesforce-overview