البرنامج التعليمي لـ APEX: فئة برمجة Apex وأمثلة على الترميز
ما هو أبيكس في Salesforce؟
قمة Apex هي لغة برمجة موجهة للكائنات وذات نوع قوي طورتها شركة Salesforce لبناء البرمجيات كخدمة (SaaS) وإدارة علاقات العملاء (CRM). تساعد Apex المطورين على إنشاء تطبيقات SaaS من جهات خارجية وإضافة منطق العمل إلى أحداث النظام من خلال توفير دعم قاعدة البيانات الخلفية وواجهات العميل والخادم.
تساعد Apex المطورين على إضافة منطق الأعمال إلى أحداث النظام مثل نقرات الأزرار وتحديثات السجلات ذات الصلة وصفحات Visualforce. Apex لديه بناء جملة مشابه لـ Java. قم بالتسجيل في Salesforce للتعرف على كيفية عمل نظام إدارة علاقات العملاء (CRM).
مميزات لغة البرمجة أبيكس
فيما يلي الميزات المهمة لبرنامج Salesforce Apex:
- Apex هي لغة غير حساسة لحالة الأحرف.
- يمكنك إجراء عمليات DML مثل INSERT وUPDATE وUPSERT وDELETE على سجلات sObject باستخدام apex.
- يمكنك الاستعلام عن سجلات sObject باستخدام SOQL (لغة استعلام كائن Salesforce) وSOSL (لغة بحث كائن Salesforce) في apex.
- يسمح لك بإنشاء ملف اختبار الوحدة وتنفيذها للتحقق من مدونة التغطية وكفاءة الكود في القمة.
- يتم تنفيذ Apex في بيئة متعددة المستأجرين، و ساليسفورسي قام بتعريف بعض حدود المحافظ التي تمنع المستخدم من التحكم في الموارد المشتركة. يفشل أي رمز يتجاوز حد حاكم Salesforce، ويظهر خطأ.
- يمكن استخدام كائن Salesforce كنوع بيانات في apex. على سبيل المثال -
Account acc = new Account();
، هنا الحساب هو كائن قياسي لقوة المبيعات.
- يتم ترقية Apex تلقائيًا مع كل إصدار من Salesforce.
متى يجب على المطور اختيار Apex
يجب كتابة كود Apex فقط إذا كان سيناريو الأعمال معقدًا للغاية ولا يمكن تنفيذه باستخدام الوظائف المعدة مسبقًا التي توفرها Salesforce.
فيما يلي بعض السيناريوهات التي نحتاج فيها إلى كتابة كود Apex:
- لإنشاء خدمات ويب تدمج Salesforce مع التطبيقات الأخرى.
- لتنفيذ التحقق المخصص على الكائنات.
- لتنفيذ منطق القمة المخصص عند إجراء عملية DML.
- لتنفيذ الوظائف التي لا يمكن تنفيذها باستخدام تدفقات سير العمل الحالية ووظائف منشئي العمليات.
- للإعداد خدمات البريد الإلكتروني، يجب عليك تضمين معالجة المحتويات والرؤوس والمرفقات الخاصة بالبريد الإلكتروني باستخدام كود Apex.
هيكل العمل للقمة
الآن في هذا البرنامج التعليمي لـ Apex، سنتعرف على بنية عمل Apex:
فيما يلي تدفق الإجراءات لكود Apex:
- إجراء المطور: يتم تجميع كل التعليمات البرمجية التي كتبها المطور في مجموعة من الإرشادات التي يمكن فهمها بواسطة مترجم وقت تشغيل Apex عندما يحفظ المطور التعليمات البرمجية على النظام الأساسي ثم يتم حفظ هذه التعليمات كبيانات تعريفية على النظام الأساسي.
- إجراء المستخدم النهائي: عندما ينفذ حدث المستخدم رمزًا علويًا، يحصل خادم النظام الأساسي على التعليمات المجمعة من بيانات التعريف ويقوم بتشغيلها من خلال المترجم الرئيسي قبل إرجاع النتيجة.

بناء جملة أبيكس
إعلان متغير
نظرًا لأن apex هي لغة ذات نوع قوي، فمن الضروري إعلان متغير بنوع البيانات في apex.
فمثلا:
contact con = new contact();
هنا يتم الإعلان عن المتغير con مع جهة الاتصال كنوع بيانات.
استعلام SOQL
SOQL تعني لغة استعلام كائن Salesforce. يتم استخدام SOQL لجلب سجلات sObject من قاعدة بيانات Salesforce. على سبيل المثال-
Account acc = [select id, name from Account Limit 1];
يقوم الاستعلام أعلاه بجلب سجل الحساب من قاعدة بيانات Salesforce.
بيان الحلقة
يتم استخدام عبارة Loop للتكرار على السجلات الموجودة في القائمة. عدد التكرار يساوي عدد السجلات في القائمة. على سبيل المثال:
list<Account>listOfAccounts = [select id, name from account limit 100];
// iteration over the list of accounts
for(Account acc : listOfAccounts){
//your logic
}
في مقتطف التعليمات البرمجية أعلاه، يعد listOfAccounts متغيرًا لنوع بيانات القائمة.
بيان التحكم في التدفق
يعد بيان التحكم في التدفق مفيدًا عندما تريد تنفيذ بعض أسطر التعليمات البرمجية بناءً على بعض الشروط.
فمثلا:
list<Account>listOfAccounts = [select id, name from account limit 100];
// execute the logic if the size of the account list is greater than zero
if(listOfAccounts.size() >0){
//your logic
}
يقوم مقتطف الكود أعلاه بالاستعلام عن سجلات الحساب من قاعدة البيانات والتحقق من حجم القائمة.
بيان DML
DML لتقف على لغة معالجة البيانات. تُستخدم عبارات DML لمعالجة البيانات في قاعدة بيانات Salesforce. على سبيل المثال -
Account acc = new Account(Name = ‘ Test Account’); Insert acc; //DML statement to create account record.
بيئة تطوير أبيكس
الآن في هذا البرنامج التعليمي لبرمجة Apex، سنتعرف على بيئة تطوير Apex:
يمكن تطوير كود Apex إما في إصدار Sandbox أو إصدار المطور من Salesforce.
من الأفضل تطوير الكود في بيئة الاختبار ثم نشره في بيئة الإنتاج.
أدوات تطوير الكود Apex: فيما يلي الأدوات الثلاثة المتاحة لتطوير الكود Apex في جميع إصدارات Salesforce.
- وحدة تحكم مطور Force.com
- بيئة تطوير فورس.كوم
- محرر التعليمات البرمجية في واجهة مستخدم Salesforce
نوع البيانات في أبيكس
فيما يلي أنواع البيانات التي يدعمها apex:
بدائي
عدد صحيح، Doubleتعتبر الأنواع الطويلة والتاريخ والتاريخ والوقت والسلسلة والمعرف والمنطقية من أنواع البيانات البدائية. ويتم تمرير جميع أنواع البيانات البدائية حسب القيمة، وليس حسب المرجع.
المجموعات
تتوفر ثلاثة أنواع من المجموعات في Apex
- القائمة: هي مجموعة مرتبة من العناصر الأولية أو الكائنات الفرعية أو المجموعات أو كائنات Apex بناءً على المؤشرات.
- المجموعة: مجموعة غير مرتبة من الأوليات الفريدة.
- الخريطة: عبارة عن مجموعة من المفاتيح البدائية الفريدة التي يتم تعيينها لقيم فردية يمكن أن تكون أولية أو كائنات أو مجموعات أو كائنات Apex.
كائن
هذا نوع بيانات خاص في Salesforce. إنه مشابه لجدول في SQL ويحتوي على حقول تشبه الأعمدة في SQL.
تتضمن التعدادات
التعداد هو نوع بيانات مجردة يخزن قيمة واحدة لمجموعة محدودة من المعرفات المحددة
الحصص
الأجسام
يشير إلى أي نوع بيانات مدعوم في Apex.
واجهات
محدد الوصول أبيكس
فيما يلي مواصفات الوصول المدعومة بواسطة apex:
عام
يتيح محدد الوصول هذا الوصول إلى فئة أو طريقة أو متغير ليتم استخدامه بواسطة قمة داخل مساحة الاسم.
خاص
يتيح محدد الوصول هذا الوصول إلى فئة أو طريقة أو متغير ليتم استخدامه محليًا أو ضمن قسم التعليمات البرمجية الذي تم تعريفه. كل التقنيات والمتغيرات التي ليس لها أي محدد وصول محدد لها محدد الوصول الافتراضي الخاص.
محمي
يتيح محدد الوصول هذا الوصول إلى أسلوب ومتغير ليتم استخدامه من قبل أي فئات داخلية ضمن تعريف فئة Apex.
تجوال حول العالم
يتيح محدد الوصول هذا الوصول إلى فئة أو طريقة أو متغير ليتم استخدامه بواسطة قمة داخل مساحة الاسم وكذلك خارج مساحة الاسم. من أفضل الممارسات عدم استخدام الكلمة الرئيسية العامة إلا عند الضرورة.
الكلمات الرئيسية في أبيكس
مع المشاركة
إذا تم تعريف فئة باستخدام هذه الكلمة الأساسية، فسيتم فرض جميع قواعد المشاركة المطبقة على المستخدم الحالي، وإذا كانت هذه الكلمة الأساسية غائبة، فسيتم تنفيذ التعليمات البرمجية ضمن سياق النظام.
على سبيل المثال:
public with sharing class MyApexClass{
// sharing rules enforced when code in this class execute
}
بدون مشاركة
إذا تم تعريف فئة باستخدام هذه الكلمة الأساسية، فلن يتم فرض جميع قواعد المشاركة المطبقة على المستخدم الحالي.
على سبيل المثال:
public without sharing class MyApexClass{
// sharing rules is not enforced when code in this class execute
}
ساكن
متغير، يتم تعريف الطريقة باستخدام الكلمة الأساسية الثابتة التي تتم تهيئتها مرة واحدة وربطها بالفئة. المتغيرات الثابتة، يمكن استدعاء الأساليب من خلال اسم الفئة مباشرة دون إنشاء مثيل للفئة.
نهائي
يتم تعريف الطريقة بشكل ثابت مع عدم إمكانية تجاوز الكلمة الأساسية النهائية. على سبيل المثال:
public class myCls {
static final Integer INT_CONST = 10;
}
إذا حاولت تجاوز قيمة المتغير INT_CONST، فستحصل على استثناء - System.FinalException: تمت تهيئة المتغير النهائي بالفعل.
الإرجاع
ترجع هذه الكلمة الأساسية قيمة من إحدى الطرق. على سبيل المثال:
public String getName() {
return 'Test' ;
}
فارغة
يحدد ثابتًا فارغًا ويمكن تعيينه لمتغير. على سبيل المثال
Boolean b = null;
افتراضي
إذا تم تعريف فئة باستخدام كلمة رئيسية افتراضية، فيمكن توسيعها وتجاوزها.
الملخص
إذا تم تعريف فئة باستخدام كلمة أساسية مجردة، فيجب أن تحتوي على طريقة واحدة على الأقل تحتوي على كلمة أساسية مجردة، ويجب أن تحتوي هذه الطريقة على توقيع فقط.
مثلا
public abstract class MyAbstrtactClass {
abstract Integer myAbstractMethod1();
}
سلسلة أبيكس
السلسلة عبارة عن مجموعة من الأحرف بدون حدود لعدد الأحرف. على سبيل المثال:
String name = 'Test';
هناك العديد من الطرق المضمنة التي توفرها فئة String في Salesforce. فيما يلي بعض الوظائف الأكثر استخدامًا والأكثر استخدامًا:
اختصار (العرض الأقصى)
تقوم هذه الطريقة بقص السلسلة إلى الطول المحدد وإعادتها إذا كان طول السلسلة المحددة أطول من الطول المحدد؛ وإلا، فإنها تعيد السلسلة الأصلية. إذا كانت قيمة المتغير maxWidth أقل من 4، فإن هذه الطريقة تعيد استثناء وقت التشغيل - System.StringException: الحد الأدنى لعرض الاختصار هو 4
فمثلا:
String s = 'Hello World';
String s2 = s.abbreviate(8);
System.debug('s2'+s2); //Hello...
تكبير ()
تقوم هذه الطريقة بتحويل الحرف الأول من السلسلة إلى حالة عنوان وإرجاعه.
فمثلا:
String s = 'hello;
String s2 = s.capitalize();
System.assertEquals('Hello', s2);
يحتوي على (سلسلة فرعية)
ترجع هذه الطريقة صحيحًا إذا كانت السلسلة التي تستدعي الطريقة تحتوي على السلسلة الفرعية المحددة.
String name1 = 'test1';
String name2 = 'test2';
Boolean flag = name.contains(name2);
System.debug('flag::',+flag); //true
يساوي (stringOrId)
ترجع هذه الطريقة صحيحًا إذا لم تكن المعلمة التي تم تمريرها فارغة وتشير إلى نفس التسلسل الثنائي للأحرف مثل السلسلة التي تستدعي الطريقة.
أثناء مقارنة قيم المعرفات، قد لا يكون طول المعرفات متساويًا. على سبيل المثال: إذا تمت مقارنة سلسلة تمثل معرفًا مكونًا من 15 حرفًا بكائن يمثل معرفًا مكونًا من 18 حرفًا، فإن هذه الطريقة تُرجع صحيحة. على سبيل المثال:
Id idValue15 = '001D000000Ju1zH';
Id idValue18 = '001D000000Ju1zHIAR';
Boolean result4 = stringValue15.equals(IdValue18);
System.debug('result4', +result4); //true
في المثال أعلاه، تقوم طريقة المساواة بمقارنة معرف الكائن المكون من 15 حرفًا بمعرف الكائن المكون من 18 حرفًا، وإذا كان كلا المعرفين يمثلان نفس التسلسل الثنائي فسوف يعود صحيحًا.
استخدم هذا الأسلوب لإجراء مقارنات حساسة لحالة الأحرف.
escapeSingleQuotes(stringToEscape)
تضيف هذه الطريقة حرف هروب (\) قبل أي اقتباس مفرد في سلسلة ما وتعيده. تمنع هذه الطريقة حقن SOQL أثناء إنشاء استعلام SOQL ديناميكي. تضمن هذه الطريقة اعتبار جميع علامات الاقتباس المفردة بمثابة سلاسل مضمنة، بدلاً من أوامر قاعدة البيانات.
فمثلا:
String s = 'Hello Tom'; system.debug(s); // Outputs 'Hello Tom' String escapedStr = String.escapeSingleQuotes(s); // Outputs \'Hello Tom\'
إزالة (سلسلة فرعية)
تزيل هذه الطريقة كل تكرارات السلسلة الفرعية المذكورة من السلسلة التي تستدعي الطريقة وترجع السلسلة الناتجة.
مثلا
String s1 = 'Salesforce and force.com';
String s2 = s1.remove('force');
System.debug( 's2'+ s2);// 'Sales and .com'
سلسلة فرعية (startIndex)
تقوم هذه الطريقة بإرجاع سلسلة فرعية تبدأ من الحرف الموجود في startIndex وتمتد إلى آخر السلسلة.
على سبيل المثال:
String s1 = 'hamburger';
String s2 = s1.substring(3);
System.debug('s2'+s2); //burger
عكس ()
تقوم هذه الطريقة بعكس كافة أحرف السلسلة وإرجاعها. على سبيل المثال:
String s = 'Hello';
String s2 = s.reverse();
System.debug('s2::::'+s2);// olleH // Hello
Trim (): تزيل هذه الطريقة جميع المسافات البيضاء البادئة من السلسلة وتعيدها.
قيمة (لتحويل)
تقوم هذه الطريقة بإرجاع تمثيل السلسلة للكائن الذي تم تمريره.
حدود حاكم أبيكس
حدود الحاكم Apex هي الحدود التي يفرضها محرك تشغيل Apex لضمان عدم سيطرة أي كود أو عمليات Apex على الموارد المشتركة وعدم انتهاك المعالجة للمستخدمين الآخرين في بيئة متعددة المستأجرين. يتم التحقق من هذه الحدود مقابل كل معاملة Apex. فيما يلي حدود الحاكم التي حددتها Salesforce في كل معاملة Apex:
| الوصف | قصر |
|---|---|
| استعلامات SOQL التي يمكن إجراؤها في معاملة متزامنة | 100 |
| استعلامات SOQL التي يمكن إجراؤها في معاملة غير متزامنة | 200 |
| السجلات التي يمكن استرجاعها بواسطة استعلام SOQL | 50000 |
| السجلات التي يمكن استردادها بواسطة Database.getQueryLocator | 10000 |
| استعلامات SOSL التي يمكن إجراؤها في معاملة القمة | 20 |
| السجلات التي يمكن استرجاعها عن طريق استعلام SOSL | 2000 |
| عبارات DML التي يمكن إجراؤها في معاملة القمة | 150 |
| السجلات التي يمكن معالجتها كنتيجة لبيان DML، أو Approval.process، أو data.emptyRecycleBin | 10000 |
| وسائل الشرح التي يمكن إجراؤها في معاملة القمة. | 100 |
| حد المهلة التراكمي لجميع وسائل الشرح التي يتم تنفيذها في معاملة القمة | 120 ثانية |
| الحد من المهام الرئيسية التي يمكن إضافتها إلى قائمة الانتظار باستخدام System.enqueueJob | 50 |
| الحد الزمني للتنفيذ لكل معاملة Apex | 10 دقائق |
| الحد من الأحرف التي يمكن استخدامها في فئة القمة والمشغل | 1 مليون |
| حد زمني لوحدة المعالجة المركزية للمعاملات المتزامنة | 10,000 ميلي ثانية |
| حد زمني لوحدة المعالجة المركزية للمعاملات غير المتزامنة | 60,000 ميلي ثانية |
أبيكس جيتر وسيتر
خاصية Apex تشبه متغير Apex. يعد Getter وSetter ضروريين لخاصية القمة. يمكن استخدام Getter وSetter لتنفيذ التعليمات البرمجية قبل الوصول إلى قيمة الخاصية أو تغييرها. يتم تنفيذ التعليمات البرمجية الموجودة في get accessor عند قراءة قيمة خاصية. يتم تشغيل التعليمات البرمجية الموجودة في مجموعة الملحقات عند تغيير قيمة خاصية. تعتبر أي خاصية تحتوي على موصل وصول للقراءة فقط، وأي خاصية لها موصل وصول محدد تعتبر للكتابة فقط أي خاصية تحتوي على موصل الوصول وتعيين تعتبر للقراءة والكتابة. بناء جملة خاصية القمة:
public class myApexClass {
// Property declaration
access_modifierreturn_typeproperty_name {
get {
//code
}
set{
//code
}
}
هنا، access_modifier هو معدل الوصول للخاصية. return_type هو نوع بيانات الخاصية. property_name هو اسم الخاصية.
فيما يلي مثال لخاصية apex التي تحتوي على كل من ملحق الوصول (get) وضبطه (set Accessor).
public class myApex{
public String name{
get{ return name;}
set{ name = 'Test';}
}
}
هنا، اسم الخاصية هو الاسم، وهي ملكية عامة، وتقوم بإرجاع نوع بيانات السلسلة.
ليس من الضروري وجود بعض التعليمات البرمجية في كتلة الحصول والتعيين. يمكن ترك هذه الكتلة فارغة لتحديد خاصية تلقائية. على سبيل المثال:
public double MyReadWriteProp{ get; set; }
يمكن أيضًا تحديد الوصول وتعيينه باستخدام معدّل الوصول الخاص به. إذا تم تعريف موصل باستخدام معدّل، فإنه يتجاوز معدّل الوصول الخاص بالخاصية. على سبيل المثال:
public String name{private get; set;}// name is private for read and public to write.
ابيكس كلاس
فئة القمة عبارة عن مخطط أو قالب يتم إنشاء الكائنات منه. الكائن هو مثيل للفئة.
هناك ثلاث طرق لإنشاء فئات القمة في Salesforce:
وحدة تحكم المطور
بيئة تطوير فورس.كوم
صفحة تفاصيل فئة أبيكس.
في القمة، يمكنك تحديد فئة خارجية تسمى أيضًا فئة المستوى الأعلى، ويمكنك أيضًا تحديد فئات داخل فئة خارجية تسمى الفئات الداخلية.
من الضروري استخدام معدّل الوصول مثل العمومي أو العام في إعلان الطبقة الخارجية.
ليس من الضروري استخدام معدّل الوصول في إعلان الفئات الداخلية.
يتم تعريف فئة القمة باستخدام الكلمة الأساسية للفئة متبوعة باسم الفئة.
يتم استخدام الكلمة الأساسية الممتدة لتوسيع فئة موجودة بواسطة فئة قمة، ويتم استخدام الكلمة الأساسية لتنفيذ واجهة بواسطة فئة قمة.
لا يدعم Salesforce Apex عمليات توريث متعددة، ويمكن لفئة apex توسيع فئة apex واحدة فقط ولكن يمكنها تنفيذ واجهات متعددة.
يمكن أن تحتوي فئة القمة على مُنشئ محدد من قبل المستخدم، وإذا لم يكن المُنشئ المحدد من قبل المستخدم متاحًا، فسيتم استخدام مُنشئ افتراضي. يتم تنفيذ التعليمات البرمجية الموجودة في المنشئ عند إنشاء مثيل للفئة.
بناء جملة مثال فئة Apex:
public class myApexClass{
// variable declaration
//constructor
public myApexClass{
}
//methods declaration
}
يتم استخدام الكلمة الأساسية الجديدة لإنشاء مثيل لفئة القمة. يوجد أدناه بناء الجملة لإنشاء مثيل لفئة أبيكس.
myApexClass obj = new myApexClass();
قمة الزناد
تتيح لك مشغلات Apex تنفيذ Apex مخصص قبل وبعد تنفيذ عملية DML.
يدعم Apex النوعين التاليين من المحفزات:
قبل المشغلات: يتم استخدام هذه المشغلات للتحقق من صحة قيمة الحقل وتحديثها قبل حفظ السجل في قاعدة البيانات.
بعد المشغلات: يتم استخدام هذه المشغلات للوصول إلى الحقول (معرف السجل، حقل LastModifiedDate) التي حددها النظام بعد تسجيل سجل في قاعدة البيانات. يمكن استخدام قيمة هذه الحقول لتعديل السجلات الأخرى. السجلات التي يتم تشغيلها بعد المشغلات تكون للقراءة فقط.
من أفضل الممارسات كتابة مشغلات ضخمة. يمكن للمشغل الضخم معالجة سجل واحد بالإضافة إلى سجلات متعددة في وقت واحد.
بناء جملة مشغل القمة:
trigger TriggerName on ObjectName (trigger_events) {
//Code_block
}
هنا، TriggerName هو اسم المشغل، وObjectName هو اسم الكائن الذي سيتم كتابة المشغل عليه، وTrigger_events هي قائمة الأحداث المفصولة بفواصل.
فيما يلي الأحداث التي تدعمها مشغلات apex: قبل الإدراج، قبل التحديث، قبل الحذف، بعد الإدراج، بعد التحديث، بعد الحذف، بعد إلغاء الحذف.
لا يمكن استخدام الكلمات الأساسية الثابتة في مشغل Apex. يمكن استخدام جميع الكلمات الأساسية المطبقة على الفئات الداخلية في مشغل Apex.
هناك متغير ضمني يتم تحديده بواسطة كل مشغل يقوم بإرجاع سياق وقت التشغيل. يتم تعريف هذه المتغيرات في النظام. فئة الزناد. تسمى هذه المتغيرات متغيرات السياق. تُظهر لقطة الشاشة أدناه متغير السياق المدعوم بواسطة مشغل القمة.
فيما يلي اعتبارات متغير السياق في المشغل الأعلى:
- لا تستخدم trigger.new وtrigger.old في عمليات DML.
- لا يمكن حذف Trigger.new.
- Trigger.new للقراءة فقط.
- يمكن استخدام Trigger.new لتغيير قيم الحقول الموجودة على نفس الكائن قبل التشغيل فقط.
تسرد لقطات الشاشة أدناه الاعتبارات المتعلقة بإجراءات محددة في أحداث التشغيل المختلفة.
فئة دفعة في أبيكس
تُستخدم فئة الدفعة في Salesforce لمعالجة عدد كبير من السجلات التي قد تتجاوز حدود الحاكم الأعلى إذا تمت معالجتها بشكل طبيعي. تنفذ فئة الدفعة التعليمات البرمجية بشكل غير متزامن.
فيما يلي مزايا فئة الدفعة:
- تقوم فئة الدُفعات بمعالجة البيانات في أجزاء، وإذا فشلت عملية معالجة القطعة بنجاح، فلن يتم التراجع عن جميع القطع التي تمت معالجتها بنجاح.
- تتم معالجة كل جزء من البيانات في فئة الدُفعات باستخدام مجموعة جديدة من حدود الحاكم والتي تضمن تنفيذ التعليمات البرمجية ضمن حدود تنفيذ الحاكم.
- قاعدة البيانات. يجب تنفيذ الواجهة القابلة للدفع بواسطة فئة apex لاستخدامها كفئة دفعية. يوفر ثلاث طرق يجب تنفيذها بواسطة فئة الدُفعات.
فيما يلي الطرق الثلاث التي توفرها قاعدة البيانات. واجهة قابلة للدفع:
1.ابدأ ()
تولد هذه الطريقة نطاق السجلات أو الكائنات التي سيتم معالجتها بواسطة طريقة الواجهة execute. أثناء تنفيذ الدفعة، يتم استدعاؤها مرة واحدة فقط. تقوم هذه الطريقة إما بإرجاع كائن Database.QueryLocator أو Iterable. يبلغ عدد السجلات المستردة بواسطة استعلام SQL باستخدام كائن Database.QueryLocator 50 مليون سجل ولكن باستخدام كائن قابل للتكرار، يبلغ العدد الإجمالي للسجلات التي يمكن استردادها بواسطة استعلام SQL 50000 فقط. يتم استخدام Iterable لإنشاء نطاق معقد لفئة الدفعة.
بناء جملة طريقة البدء:
global (Database.QueryLocator | Iterable<sObject>) start(Database.BatchableContextbc) {}
2. تنفيذ ()
يتم استخدام هذه الطريقة لمعالجة كل جزء من البيانات. يتم استدعاء طريقة التنفيذ لكل جزء من السجلات. حجم الدفعة الافتراضي للتنفيذ هو 200 سجل. تأخذ طريقة التنفيذ وسيطتين:
إشارة إلى كائن Database.BatchableContext،
قائمة sObjects، مثل القائمة أو قائمة الأنواع ذات المعلمات. بناء جملة طريقة التنفيذ:
global void execute(Database.BatchableContext BC, list<P>){}
3.إنهاء ()
يتم استدعاء طريقة الإنهاء مرة واحدة أثناء تنفيذ فئة الدفعة. يمكن إجراء عمليات ما بعد المعالجة في طريقة الإنهاء. على سبيل المثال: إرسال بريد إلكتروني للتأكيد. يتم استدعاء هذه الطريقة عند معالجة كل الدفعة. بناء جملة طريقة الإنهاء:
global void finish(Database.BatchableContext BC){}
كائن Database.BatchableContext
كل طريقة من قواعد البيانات. تحتوي الواجهة القابلة للدفع على إشارة إلى كائن Database.BatchableContext.
يتم استخدام هذا الكائن لتتبع تقدم المهمة المجمعة.
فيما يلي طرق المثيلات التي يوفرها BatchableContext:
- getChildJobId(): تقوم هذه الطريقة بإرجاع معرف المهمة الدفعية التي تتم معالجتها حاليًا.
- getJobId(): تقوم هذه الطريقة بإرجاع معرف المهمة المجمعة.
فيما يلي بناء جملة فئة الدُفعات:
global class MyBatchClass implements Database.Batchable<sObject> {
global (Database.QueryLocator | Iterable<sObject>) start(Database.BatchableContextbc) {
// collect the batches of records or objects to be passed to execute
}
global void execute(Database.BatchableContextbc, List<P> records){
// process each batch of records
}
global void finish(Database.BatchableContextbc){
// execute any post-processing operations
}
}
طريقة Database.executeBatch
يتم استخدام أسلوب Database.executeBatch لتنفيذ فئة دفعية.
تأخذ هذه الطريقة معلمتين: مثيل فئة الدُفعة المراد معالجتها، ومعلمة الخيارات لتحديد حجم الدُفعة إذا لم يتم تحديدها، فإنها تأخذ الحجم الافتراضي وهو 200.
بناء جملة Database.executeBatch :
Database.executeBatch(myBatchObject,scope)
تنفيذ اسم فئة الدفعة MyBatchClass :
MyBatchClassmyBatchObject = new MyBatchClass(); Id batchId = Database.executeBatch(myBatchObject,100);
Database.stateful
فئة الدفعة عديمة الحالة بشكل افتراضي. في كل مرة يتم فيها استدعاء طريقة التنفيذ، يتم استلام نسخة جديدة من الكائن، وتتم تهيئة كافة متغيرات الفئة.
يتم تطبيق Database.stateful لجعل فئة الدفعة ذات حالة.
إذا قام فصلك الدفعي بتنفيذ قاعدة البيانات ، واجهة ذات حالة تحتفظ جميع متغيرات المثيل بقيمها، ولكن يتم إعادة تعيين المتغيرات الثابتة بين المعاملة.
ملخص
- Apex هو برنامج موجه نحو الكائنات وذو نوع قوي لغة برمجة الذي يجمع ويعمل على منصة force.com
- لغة برمجة Apex هي لغة غير حساسة لحالة الأحرف
- هناك نوعان من تدفق الإجراءات في Apex هما 1) إجراء المطور 2) إجراء المستخدم النهائي
- يساعدك Apex على إنشاء خدمات ويب تدمج Salesforce مع التطبيقات الأخرى.
- أنواع البيانات التي تدعمها القمة هي: 1).بدائية 2) المجموعات 3) sObject، Enums، 4) Classes، 5) Objects and Interfaces
- يتم تحديد الدعم العام والخاص والمحمي والعالمي بواسطة Apex
- الكلمات الرئيسية المستخدمة في Apex هي: 1) مع مشاركة، 2) بدون مشاركة، 3) ثابت، 4) نهائي 5) عودة، 6) لاغية، 7) افتراضية، 8) ملخص
- السلسلة عبارة عن مجموعة من الأحرف بدون حدود لعدد الأحرف
- حدود محافظ Apex هي الحدود التي يفرضها محرك وقت التشغيل Apex للتأكد من أن أي كود وعمليات قمة للمدرج
- يمكن استخدام Getter وSetter لتنفيذ التعليمات البرمجية قبل الوصول إلى قيمة الخاصية أو تغييرها
- هناك ثلاث طرق لإنشاء فئات Apex في Salesforce: 1) Developer Console 2) Force.com IDE و3) صفحة تفاصيل فئة Apex.
- تتيح لك مشغلات Apex تنفيذ Apex مخصص قبل وبعد تنفيذ عملية DML.
- يتم استخدام فئة الدفعة في Salesforce لمعالجة عدد كبير من السجلات التي قد تتجاوز حدود حاكم القمة إذا تمت معالجتها بشكل طبيعي.





