كيفية استخدام قاعدة البيانات. فخم في Batch Apex في Salesforce
نشرت: 2023-11-21أولاً، يجب أن نفهم أنه إذا أردنا استخدام Batch Apex، فيجب علينا كتابة فئة Apex التي تنفذ قاعدة بيانات الواجهة التي توفرها Salesforce. Batchable ثم قم باستدعاء الفصل برمجياً. لمراقبة تنفيذ مهمة Apex المجمعة أو إيقافه، من الإعداد، أدخل Apex Jobs في مربع البحث السريع، ثم حدد Apex Jobs.
في هذه المقالة، نتعمق في الميزات القوية لقاعدة البيانات. دولة في دفعة أبيكس. فهم قاعدة البيانات. يعد Stateful ضروريًا للحفاظ على الحالة عبر عمليات تنفيذ المهام المجمعة، مما يسمح للمطورين بالحفاظ على متغيرات المثيل وإجراء عمليات مجمعة أكثر تعقيدًا ومدركة للحالة.
بناء الجملة للدفعة:
الطبقة العالمية BatchName تنفذ Database.Batchable{}
طرق فئة الدفعة:
العالمية (Database.QueryLocator | Iterable) تبدأ (Database.BatchableContext قبل الميلاد) { // هنا سنضيف الاستعلام ونعيد النتيجة إلى طريقة التنفيذ } تنفيذ الفراغ العام (Database.BatchableContext BC, list<P>){ // يجب أن يكون المنطق هنا } إنهاء الفراغ العالمي (Database.BatchableContext BC) { // بعد معالجة جميع الدفعات، سيتم استدعاء هذه الطريقة. يمكننا كتابة أي كود داخله. كما لو كنت تريد إرسال بريد إلكتروني إلى جميع السجلات التي تم إنشاؤها أو تحديثها في طريقة التنفيذ. }
اقرأ أيضًا: كيفية إنشاء نوع تقرير مخصص في Salesforce؟
تنفيذ واجهة Database.Batchable
مثال:
الطبقة العالمية BatchAccountUpdate تنفذ Database.Batchable{ استعلام السلسلة = 'اختر اسمًا من الحساب حيث الاسم! = null AND (Name = \'Virendra Company\' OR Name = \'Virendra Sharma\') '; بداية Database.QueryLocator العالمية (Database.BatchableContext قبل الميلاد) { // تجميع دفعات السجلات أو الكائنات التي سيتم تمريرها للتنفيذ إرجاع Database.getQueryLocator(query); } تنفيذ الفراغ العام (Database.BatchableContext قبل الميلاد، قائمة السجلات) { // معالجة كل دفعة من السجلات لـ (حساب الحساب: السجلات){ acc.Name = acc.Name + 'تم التحديث'; } تحديث السجلات؛ } إنهاء الفراغ العالمي (Database.BatchableContext قبل الميلاد) { // تنفيذ أي عمليات ما بعد المعالجة، استدعاء فئة الدفعة. BatchUpdateAccountRelatedContacts b = new BatchUpdateAccountRelatedContacts(); Database.executeBatch(b, 200); } }
Database.Stateful
تبحث الفئة النموذجية التالية عن كافة سجلات الحساب التي تم تمريرها بواسطة أسلوب start() باستخدام QueryLocator وتقوم بتحديث جهات الاتصال المقترنة بالعنوان البريدي الخاص بحسابهم. وأخيرًا، يرسل بريدًا إلكترونيًا يتضمن نتائج المهمة المجمعة، وبما أننا نستخدم Database.Stateful لتتبع الحالة، فقد تم تحديث عدد السجلات.
مثال:
Database.AllowsCallout
يساعد Database.AllowsCallout in Batch في دمج Salesforce مع خادم خارجي. لاستخدام وسيلة شرح في دفعة Apex، يجب علينا استخدام واجهة Database.AllowsCallouts في تعريف فئة فئة الدفعة.
بناء الجملة:
فئة عالمية SearchAndReplace تنفذ Database.Batchable، Database.AllowsCallouts{}
مثال:
هنا، أقوم بدمج كائن الفرصة مع Razorsync.com
/*
احصل على طلب الخدمة من razorsync وقم بتحديثه إلى فريق المبيعات
*/
الطبقة العالمية Batch_SR_RazorSyncAPI تنفذ Database.Batchable، Database.AllowsCallouts{ بداية Database.QueryLocator العالمية (Database.BatchableContext BC){ استعلام السلسلة = 'معرف التحديد، Razorsync_Service_Request_Id__c من الفرصة حيث Razorsync_Service_Request_Id__c != null AND Razorsync_Job_Status__c != \'تم إنجاز المهمة\' AND RazorSync_Status__c = \'Success\''; إرجاع Database.getQueryLocator(query); } تنفيذ الفراغ العالمي (Database.BatchableContext BC، نطاق القائمة) { حالة السلسلة؛ لـ (الفرصة: النطاق){ // احصل على طلب الخدمة System.debug(s.Id); Http http1 = new Http(); HttpRequest request1 = new HttpRequest(); request1.setEndpoint('https://DomainName.0.razorsync.com/ApiService.svc/ServiceRequest/'+ s.Razorsync_Service_Request_Id__c); request1.setMethod('GET'); request1.setHeader('نوع المحتوى', 'application/json'); request1.setHeader('Host', 'DomainName.0.razorsync.com'); request1.setHeader('Content-Length', '0'); request1.setHeader('Connection', 'Keep-Alive'); request1.setHeader('ServerName', 'DomainServerName'); request1.setHeader('Token', 'XXXXXXXXXXXXXXXXXXXXXXXX'); HttpResponse Response1 = http1.send(request1); إذا (response1.getStatusCode() == 200) { حالة؛ JSONParser parser = JSON.createParser(response1.getBody()); بينما (parser.nextToken() != null) { إذا( (parser.getCurrentToken() == JSONToken.FIELD_NAME) && (parser.getText() == 'StatusId') || Test.isRunningTest()) { parser.nextToken(); StatusId = parser.getText(); } } System.debug(StatusId); إذا (StatusId == String.valueOf(1) || Test.isRunningTest()){ s.Razorsync_Job_Status__c = 'تم إنجاز المهمة'; s.StageName = 'الفوز المغلق'; }آخر{ s.Razorsync_Job_Status__c = 'العمل'; } } } نطاق التحديث؛ } إنهاء الفراغ العالمي (Database.BatchableContext BC) { } }
اقرأ أيضًا: فوائد Salesforce Commerce Cloud وكيفية استدعاء التدفقات من Apex في Salesforce
خاتمة
يسمح استخدام Database.Stateful في Batch Apex داخل Salesforce بالحفاظ على الحالة عبر طرق تنفيذ مختلفة في مهمة مجمعة. يعد هذا أمرًا بالغ الأهمية بالنسبة للسيناريوهات التي تتطلب معالجة بيانات معقدة، ويجب الاحتفاظ بالحالة بين مجموعات الدُفعات.
من خلال تطبيق Database.Stateful ، يمكن للمطورين ضمان اتساق البيانات وإدارة مجموعات البيانات الكبيرة بشكل فعال. ومع ذلك، من المهم استخدام هذه الميزة بحكمة لتجنب الاستهلاك الزائد للذاكرة ومشكلات الأداء المحتملة.
تتضمن أفضل الممارسات إبقاء متغيرات الحالة في حدها الأدنى والتركيز على البيانات الأساسية، مما يجعل Database.Stateful أداة قوية لمعالجة الدُفعات المعقدة التي تعتمد على الحالة في Salesforce.
للحصول على مزيد من المساعدة في مشروع فريق المبيعات، قم بتعييننا كمستشار فريق المبيعات الخاص بك وجني الفوائد.