عند تشغيل عملية في Salesforce، يجب أن يكون السؤال الأول الذي تطرحه هو ما إذا كان يجب تنفيذها بشكل متزامن أو غير متزامن. إذا كان يمكن تأجيل المهمة ولا تتطلب نتيجة فورية، فمن المفيد دائمًا الاستفادة من العمليات غير المتزامنة في Salesforce، حيث إنها تقدم مزايا كبيرة لهندستك التقنية.
ما هي المعالجة غير المتزامنة؟
تعمل العمليات غير المتزامنة في خيطها الخاص، مما يسمح للمهمة بالاكتمال دون إبقاء المستخدم في انتظار. إليك الفوائد الرئيسية:
1. تحسين تجربة المستخدم والأداء
نظرًا لأن العمليات غير المتزامنة تعمل في الخلفية، فلا يتعين على المستخدمين الانتظار حتى تنتهي. هذا يمكّن المستخدمين من مواصلة عملهم دون انقطاع بينما يحسن أيضًا من أوقات تحميل الصفحات والأداء العام للنظام.
2. حدود أعلى
تفرض Salesforce حدودًا صارمة على المعاملات المتزامنة، مثل عدد الاستعلامات أو عمليات DML لكل معاملة. توفر المعالجة غير المتزامنة حدود تنفيذ إضافية، مما يمنحك مزيدًا من المساحة لتوسيع عملياتك.
3. قابلية التوسع
من خلال تحميل المهام المعقدة أو التي تتطلب موارد كبيرة لتعمل في الخلفية، تساعد المعالجة غير المتزامنة عملك على التوسع بكفاءة دون المساس بأداء النظام.
ها هي الأدوات المختلفة التي توفرها Salesforce لمعالجة البيانات غير المتزامنة.
اعتبارات رئيسية
حتى الآن، قمنا باستكشاف معالجة البيانات غير المتزامنة، فوائدها، والأدوات المختلفة التي توفرها Salesforce لهذه المهام. ومع ذلك، هناك عدة عوامل مهمة يجب مراعاتها قبل اختيار معالجة البيانات غير المتزامنة لاحتياجات عملك.
1. لا يوجد SLA لمعالجة البيانات غير المتزامنة
تذكر أن عمليات المعالجة غير المتزامنة ليس لها اتفاقية مستوى الخدمة (SLA) مضمونة. تعمل في خيوطها الخاصة عندما تتوفر الموارد، مما يعني عدم وجود ضمان بأن المهمة ستكتمل خلال إطار زمني محدد. لذلك، من المهم تجنب استخدام المعالجة غير المتزامنة لعمليات الأعمال التي تتطلب الالتزام بالوقت.
2. اختر الأداة المناسبة للمهمة
كما ذكر سابقًا، يقدم Salesforce مجموعة متنوعة من الأدوات لمعالجة البيانات غير المتزامنة، تم تصميم كل منها لحالات استخدام مختلفة. فهم قواها وقيودها سيساعدك على اختيار الأداة الأنسب لاحتياجاتك الخاصة.
3. جعل الكود خاصًا بالتجميع
على الرغم من أن Salesforce يوفر حدود تنفيذية أعلى لعمليات المعالجة غير المتزامنة، فمن الأهمية البالغة جعل عملياتك جاهزة للتجميع. ذلك يضمن أن يتمكن الكود الخاص بك من التعامل بكفاءة مع عدة سجلات، مع البقاء داخل حدود المنصة والحفاظ على الأداء.
4. تنفيذ إدارة الأخطاء والمراقبة
نظرًا لأن الوظائف الغير متزامنة تعمل في الخلفية، فإن إدارة الأخطاء والمراقبة القوية ضرورية. استخدم كتل try-catch
وسجّل الأخطاء في كائنات مخصصة لتتمكن من تتبعها بسهولة. بالإضافة إلى ذلك، قم بتنفيذ منطق إعادة المحاولة لإدارة الأخطاء العابرة، مثل مشكلات استدعاء واجهة برمجة التطبيقات، لضمان موثوقية عملياتك.
استكشاف عميق لأدوات الوظائف الغير متزامنة
لنلقي نظرة أقرب على كل من أدوات الوظائف الغير متزامنة في Salesforce.
Future Methods
تُستخدم طرق المستقبل لعمليات يمكن أن تعمل بشكل مستقل في خيطها الخاص. أحد الحالات الاستخدامية الشائعة هو تنفيذ استدعاءات خدمات الويب الخارجية حيث لا يحتاج المستخدم إلى انتظار اكتمال العملية.
لتحديد طريقة مستقبلية، قم بتعليق الطريقة ببساطة باستخدام العلامة التوضيحية @future
.
public class FutureClass {
@future
public static void myFutureMethod(list recordIds){
//كود العملية طويلة المدى
}
}
نقاط رئيسية حول طرق المستقبل:
- ثابت. يجب أن تكون طرق المستقبل ثابتة.
- نوع العودة فارغ. يمكنها فقط إرجاع
void
. - أنواع البيانات الأساسية. يمكن لطرق المستقبل قبول أنواع بيانات أساسية فقط (على سبيل المثال،
String
،Integer
،Id
). لا يمكنها قبول الكائنات المعقدة كمعلمات. - الاستدعاءات. إذا كانت الطريقة المستقبلية بحاجة إلى إجراء استدعاء لخدمة ويب، يجب عليك تضمين السمة
callout=true
في التوضيحية للسماح للطريقة بإجراء الاستدعاء.
public class FutureClass {
@future(callout = true)
public static void myFutureMethod(){
//استدعاء هنا
}
}
Queueable Apex
مماثلة لطرق المستقبل، يتيح لك Queueable Apex تشغيل العمليات في خيطها الخاص، مما يجعلها مثالية للمهام طويلة الأمد. إنها تستغل طابور الوظائف Apex وتوفر نهجًا أكثر مرونة وقوة لمعالجة البيانات الغير متزامنة مقارنة بطرق المستقبل.
لتنفيذ Queueable Apex، يجب على صنفك تنفيذ واجهة Queueable
. يجب على الصنف تحديد دائمًا طريقة execute
، التي تحتوي على منطق العملية غير المتزامنة.
public class QueueableClass implements Queueable{
public void execute(QueueableContext context){
// عملية طويلة
}
}
يمكنك تنفيذ Queueable Apex عن طريق استدعاء System.enqueueJob()
، الذي يضيف الوظيفة إلى الطابور ويُرجع معرف وظيفة. يمكن استخدام هذا المعرف لمراقبة حالة الوظيفة عن طريق استعلام كائن AsyncApexJob
.
ID jobID = System.enqueueJob(new QueueableClass());
نقاط رئيسية حول Queueable Apex:
- أنواع البيانات غير الأساسية. على عكس طرق المستقبل، يمكنك استخدام أنواع بيانات غير أساسية كمتغيرات أعضاء في صنف Queueable.
- ربط الوظائف. يمكن ربط الوظائف القابلة للتنفيذ، مما يتيح لك بدء وظيفة ثانية من وظيفة تنفيذية بالفعل، مما يخلق سلسلة من العمليات غير المتزامنة.
Batch Apex
عندما تحتاج إلى تشغيل عمليات غير متزامنة على عدد كبير من السجلات، Batch Apex هو الحل المثالي. إنه يقسم مجموعة البيانات الكبيرة إلى أجزاء أصغر قابلة للإدارة للمعالجة.
لتنفيذ Batch Apex، يجب أن تقوم فئتك بتنفيذ واجهة Database.Batchable
. يجب أن تحدد فئة Batch Apex ثلاثة أساليب: start
، execute
، وfinish
.
1. أسلوب البدء
يتم تنفيذ هذا الأسلوب في بداية وظيفة الدفعة. يجب أن يحتوي على استعلام SOQL لجمع مجموعة البيانات الكبيرة وإرجاع QueryLocator
. يتم تجاوز حدود الحاكم على العدد الإجمالي للسجلات المسترجعة بواسطة استعلام SOQL في أسلوب start
عند استخدام Batch Apex.
public Database.QueryLocator start(Database.BatchableContext bc) {}
2. أسلوب التنفيذ
يتم استدعاء أسلوب execute
لكل دفعة من السجلات. لاحظ أن ترتيب معالجة السجلات غير مضمون.
public void execute(Database.BatchableContext bc, list<Object>){}
3. أسلوب الانتهاء
يتم استدعاء أسلوب finish
بعد معالجة جميع دفعات السجلات. يُستخدم عادةً لمهام المعالجة اللاحقة، مثل إرسال رسائل البريد الإلكتروني للإشعارات. تعتبر كل عملية تنفيذ لوظيفة الدفعة معاملة واحدة، ويتم إعادة تعيين حدود الحاكم لكل دفعة.
لتحفيز وظيفة دفعة، استخدم أسلوب Database.executeBatch
. هذا يضيف وظيفة الدفعة إلى قائمة الانتظار غير المتزامنة.
يأخذ أسلوب Database.executeBatch
معاملين:
- مثال على فئة Batch Apex.
- معامل حجم الدفعة الاختياري، الذي يحدد عدد السجلات لكل دفعة. الحد الأقصى لحجم الدفعة الذي يمكنك تحديده هو 2000.
ID batchprocessid = Database.executeBatch(new BatchApex(),2000);
أفضل الممارسات عند استخدام Apex غير المتزامن
تجنب تنشيط الطرق المستقبلية أو القابلة للتنفيذ في العمليات ذات الحجم الكبير
كن حذرًا عند تنشيط الطرق المستقبلية أو القابلة للتنفيذ من العمليات التي يمكن أن تنفد من حدود العمليات اللا متزامنة اليومية، مثل مشغلات Apex. يمكن لهذه العمليات استهلاك موارد العمليات اللا متزامنة المتاحة بسرعة.
تحسين الأداء
تأكد من أن أداء الطرق المستقبلية أو القابلة للتنفيذ مُحسن. ويشمل ذلك:
- تحسين الاستعلامات لتقليل وقت المعالجة.
- تقليل مدة استدعاء خدمة الويب.
- تبسيط أي منطق مرتبط، مثل المشغلات أو التدفقات، لمنع حدوث تكدس.
استخدم Batch Apex لحجوم بيانات كبيرة
لمعالجة أعداد كبيرة من السجلات، يُفضل دائمًا Batch Apex على الطرق المستقبلية أو القابلة للتنفيذ. تم تصميم Batch Apex للتعامل مع مجموعات بيانات ضخمة بكفاءة، بينما تكون الطرق المستقبلية والقابلة للتنفيذ أكثر مناسبة للمهام الأصغر.
يوفر Queueable Apex مرونة أكبر
يقدم Queueable Apex مزيدًا من التحكم في تنفيذ المهام مقارنة بالطرق المستقبلية، مثل القدرة على ربط المهام معًا أو التعامل بكفاءة مع حجوم بيانات أكبر.
الختام
في الختام، تعتبر Apex اللازمة في سيلزفورس أداة قوية لمعالجة العمليات طويلة الأمد والمستهلكة للموارد مع الحفاظ على أداء النظام وتجربة المستخدم. من خلال فهم الطرق اللازمة المتاحة بشكل غير متزامن – مثل أساليب المستقبل، Queueable Apex، و Batch Apex – واتباع أفضل الممارسات، يمكنك تصميم حلول فعالة وقابلة للتوسيع تحسن كل من كودك وموارد نظامك. تذكر أن تأخذ في الاعتبار عوامل مثل حدود المحافظ، تحسين الأداء، ومعالجة الأخطاء لضمان سلسلة تشغيل وموثوقية الوظائف غير المتزامنة الخاصة بك.
Source:
https://dzone.com/articles/asynchronous-processing-salesforce-overview