متى تستخدم قبل المشغلات قبل مقابل بعد في Salesforce؟

المُقدّمة

المشغل هو رمز قمة يتم تنفيذه قبل أو بعد وقوع أحداث DML. المشغل عبارة عن فئة خلف الكواليس ولها متغيرات مثل New و NewMap و Old و OldMap. يجب أن تكون المشغلات متضخمة. يجب أن يعمل مع سجلات فردية بالإضافة إلى سجلات متعددة بنفس الطريقة.

مفهوم المشغلات في Salesforce

المشغل هو مكون Apex يتم تنفيذه تلقائيًا بمجرد تشغيل DML على أي كائن. لنفترض أن لدينا مشغلًا مكتوبًا على كائن الحساب قبل إدخال الأحداث وقبل تحديثها. ثم إذا كان المستخدم يحاول إدخال أو تحديث سجل الحساب ، فسيتم إطلاق المشغل بناءً على الحالة المقدمة.

هذا يعني أن المشغلات خاصة بالكائن (يمكن إنشاء المشغل على كائن واحد في كل مرة) ومتمحور حول الحدث.

أنواع المشغلات في Salesforce

لدينا في المقام الأول نوعان من المشغلات في Salesforce

1. قبل الزناد

يستخدم هذا بشكل أساسي إذا أردنا تحديث قيم السجل أو التحقق من صحتها قبل حفظ السجل في قاعدة البيانات. هذا يعني أنه سيتم التحقق من صحة السجل الأول ، ثم يتم حفظه قبل المشغل. لسنا مطالبين بكتابة أي أحداث DML قبل بدء التشغيل.

2. بعد الزناد

يتم استخدام هذا النوع من المشغل عادةً عندما تحتاج البيانات إلى التحديث في كائن منفصل بسبب التغيير.

يتم تنفيذها بعد إجراء التغييرات النهائية على قاعدة البيانات.

بعد تشغيل Trigger بمجرد تنفيذ DML في أي كائن ، تكون السجلات التي تطلق "After Trigger" للقراءة فقط.

متى تستخدم المشغلات قبل مقابل ما بعد في Salesforce؟

عندما نحتاج إلى التحقق من صحة البيانات أو قيم السجل أو تحديثها قبل حفظ السجل ، فاستخدم قبل التشغيل. عندما نريد الوصول إلى قيم الحقول التي تم تعيينها بواسطة النظام مثل حقل LastModifiedDate وللتأثير على التغييرات في السجلات الأخرى ، استخدم After Trigger.

تكون السجلات التي بدأت عملية قاعدة البيانات للقراءة فقط في "بعد التشغيل". إذا بدأ هذا السجل في تنفيذ المشغل ، فلن نتمكن من تعديل أي قيم حقل في After Trigger. على سبيل المثال ، لدينا مشغل على كائن الحساب مع حدث بعد التحديث DML ، ونريد تحديث قيمة الحقل في كائن الحساب. في هذه الحالة ، لن يتمكن المستخدمون من تغيير قيمة الحقل كما لو كانت في وضع القراءة فقط. لذلك ، استخدم قبل Trigger في هذا السيناريو بدلاً من استخدام After Trigger.

أمثلة

مثال 1

مشغل ContactDeletion on Contact (قبل الحذف) {//Trigger.old يحتوي على قائمة جهات الاتصال التي يتم حذفها لـ (Contact cc: Trigger.old) {if (cc.AccountId! = null) {cc.addError ('لا يمكنك الحذف جهة اتصال لها حساب مرتبط ') ؛ }}}

 

مثال 2

trigger AccOppTrigger on Account (بعد الإدراج) {List oppRec = new List ()؛ لـ (Account acc: Trigger.new) {if (acc.Industry == 'Banking') {Opportunity opp = new Opportunity (Name = acc.Name، StageName = 'Prospecting'، AccountId = acc.Id، CloseDate = Date. اليوم addDays (15)) ؛ oppRec.add (مقابل) ، }} إذا (! oppRec.isEmpty ()) {insert oppRec؛ }}

 

اترك تعليقا

يستخدم هذا الموقع نظام Akismet لتقليل الرسائل الضارة. تعرف كيف تتم معالجة بيانات تعليقك.