سیلز فورس اپیکس – گورنر کی حدود

Sylz Fwrs Apyks Gwrnr Ky Hdwd



سیلز فورس ہمیں ایک وقت میں بیانات/ریکارڈ کی ایک خاص تعداد پر کارروائی یا عمل کرنے کی اجازت دیتی ہے۔ ڈی ایم ایل اسٹیٹمنٹس، اپیکس کلاسز وغیرہ کے لیے کچھ حدود ہیں، جن پر عمل درآمد یا عمل کیا جائے۔ ان حدود کو گورنر کی حدود کے نام سے جانا جاتا ہے۔ اس ٹیوٹوریل میں، ہم دیکھیں گے کہ گورنر کی حدود کیا ہیں اور انہیں کیسے سنبھالا جا سکتا ہے۔ نیز، سیلز فورس اپیکس ان حدود کو جاننے کے لیے 'حد' کلاس فراہم کرتا ہے جو کال آؤٹس، ایپیکس کلاسز، لائٹنگ ویب اجزاء، SOSL اور SOQL اسٹیٹمنٹس سے متعلق ہیں۔

گورنر کی حدود

ایک ایسے منظر نامے پر غور کریں جہاں علیش اور سباش دو افراد ہیں جو Salesforce org استعمال کرتے ہیں۔ ایلس ایک ٹرانزیکشن میں 1000 DML سٹیٹمنٹس پر کارروائی یا عمل کرنا چاہتی ہے۔ متوازی طور پر، سباش ایک وقت میں 5000 ریکارڈ لوڈ کرنا چاہتا ہے۔ اگر وہ اسے متوازی طور پر کرتے ہیں تو سیلز فورس قبول نہیں کرے گی اور مصروف ہو جائے گی۔ لہذا، گورنر کی حدود تصویر میں آتی ہیں۔ اس صورت میں، علیش ایک وقت میں 100 ڈی ایم ایل پر کارروائی کر سکتا ہے اور سباش ایک وقت میں 500 ریکارڈ پر کارروائی کر سکتا ہے۔ وہ AsynchronousBatch Apex کا استعمال کرتے ہوئے ان میں سے ہر ایک کو پریشان کیے بغیر ایک الگ تھریڈ پر ہر ٹرانزیکشن کر سکتے ہیں اور اپنا کام مکمل کر سکتے ہیں۔







بنیادی طور پر، Salesforce میں گورنر کی حدود متعدد لین دین میں پروسیسنگ اور عمل درآمد کو محدود کرتی ہیں۔ ہر ٹرانزیکشن کے لیے 'فی ٹرانزیکشن ایپیکس لمٹس' کا شمار ہوتا ہے اور 'سائز-مخصوص ایپیکس لمیٹ' کوڈ کے سائز سے متعلق ہے۔ سیلز فورس دو عملوں کی حمایت کرتی ہے: ہم وقت ساز اور غیر مطابقت پذیر عمل۔ مطابقت پذیری کے عمل میں، Apex اسکرپٹ کو ایک ہی وقت میں عمل میں لایا جاتا ہے جبکہ غیر مطابقت پذیر عمل میں، Apex اسکرپٹ کو متعدد کاموں میں تقسیم کرکے عمل میں لایا جاتا ہے۔



اجازت شدہ حدود

آئیے مختلف منظرناموں کے لیے حد کی گنتی پر بات کریں:



  1. ہم وقت ساز Apex میں 100 SOQL سوالات اور 200 SOQL استفسارات کو غیر مطابقت پذیر Apex میں پروسیس کرنا/چلانا ممکن ہے۔
  2. صرف 50,000 ریکارڈ ہی ایک SOQL استفسار سے مطابقت پذیر اور غیر مطابقت پذیر دونوں کے لیے واپس آئیں گے۔
  3. اگر ہم Database.getQueryLocator() استعمال کرتے ہیں تو ہم وقت ساز اور غیر مطابقت پذیر اپیکس دونوں کے لیے ایک وقت میں صرف 10,000 واپس کیے جاتے ہیں۔
  4. دونوں منظرناموں میں، جاری کردہ SOSL سوالات کی تعداد 20 ہے۔
  5. سنکرونس اپیکس پر کارروائی کرنے کے لیے جس ہیپ کا سائز درکار ہے وہ 6 MB ہے۔ غیر مطابقت پذیر Apex کے لیے، ہیپ کا سائز دوگنا ہے جو اسے 12 MB بناتا ہے۔
  6. ہم وقت ساز اپیکس کے لیے زیادہ سے زیادہ CPU وقت 10,000 ملی سیکنڈز اور غیر مطابقت پذیر اپیکس کے لیے 60,000 ملی سیکنڈز ہے۔
  7. دونوں اپیکس کے لیے پھانسی کے لیے صرف 10 منٹ کی اجازت ہے۔
  8. دونوں صورتوں میں، ہم 100 وصول کنندگان کے ساتھ صرف 10 sendEmail() طریقہ استعمال کر سکتے ہیں۔
  9. Apex کلاس میں یا Apex ٹرگر میں موجود کردار 1 ملین کے اندر ہونے چاہئیں۔
  10. Batch Apex (asynchronous) میں، سائز 200 ہے۔ 'Database' کلاس کا QueryLocator() فی ٹرانزیکشن 50 ملین ریکارڈ واپس کرتا ہے۔
  11. صرف 5 Apex نوکریاں قطار میں ہوں گی یا فعال ہوں گی۔

LIMIT کلاس کی مثال:

Apex 'LIMIT' کلاس میں گورنر کی حدود کی وضاحت کر سکتا ہے۔ یہ کلاس کچھ طریقے مہیا کرتی ہے جو گورنر کی حدود بتاتی ہے۔ آئیے درج ذیل مثال کو دیکھتے ہیں جو کچھ گورنر کی حدود کو ظاہر کرتی ہے:





System.debug('مجموعی سوالات کی تعداد پر کارروائی کی جا سکتی ہے:'+ Limits.getLimitAggregateQueries())؛

System.debug('ویب سروس کے بیانات کی تعداد پر کارروائی کی جا سکتی ہے:'+ Limits.getLimitCallouts())؛

System.debug('ریکارڈز کی تعداد پر کارروائی کی جا سکتی ہے:'+ Limits.getLimitDmlRows())؛

System.debug('DML بیانات کی تعداد کو کہا جا سکتا ہے:'+ Limits.getLimitDmlStatements())؛

System.debug('بائٹس میں میموری کی کل مقدار:'+ Limits.getLimitHeapSize())؛

System.debug('SOQL سوالات کی تعداد جاری کی جا سکتی ہے:'+ Limits.getLimitQueries());

System.debug('ریکارڈز کی تعداد جاری کی جا سکتی ہے:'+ Limits.getLimitQueryRows())؛

System.debug('SOSL سوالات کی تعداد جاری کی جا سکتی ہے: '+ Limits.getLimitSoslQueries())؛

آؤٹ پٹ:

یہ چیک کرنا بھی ممکن ہو سکتا ہے کہ کتنے DML سٹیٹمنٹس/روز کو 'گنبد' کے طریقوں سے واپس کیا جا سکتا ہے جو 'LIMIT' کلاس میں موجود ہیں۔



  1. Limits.getDMLSstatements() کل DML بیانات لوٹاتا ہے جو ایک مثال میں استعمال ہوتے ہیں۔
  2. Limits.getDMLRows() قطاروں کی کل تعداد لوٹاتا ہے جو DML بیانات کے ذریعے لوٹائی جاتی ہیں۔
  3. Limits.getCpuTime() موجودہ لین دین کے لیے CPU استعمال شدہ وقت کو ملی سیکنڈز میں لوٹاتا ہے۔

استعمال کی مثال:

آئیے ایک SOQL استفسار لکھتے ہیں جو 'WorkOrder' آبجیکٹ سے دو ریکارڈ واپس کرتا ہے۔ اس کے بعد، 'ڈیلیٹ' ڈی ایم ایل کا استعمال کرتے ہوئے ان دو ریکارڈوں کو حذف کریں۔

System.debug('DML بیانات:'+Limits.getDMLSstatements());

System.debug('Rows:'+Limits.getDmlRows());

System.debug('CPU ٹائم'+Limits.getCpuTime())؛

// ورک آرڈر آبجیکٹ سے 2 قطاریں منتخب کرنے کے لیے SOQL سوال

فہرست اکاؤنٹس = [WorkOrder LIMIT 2 سے آئی ڈی منتخب کریں]؛

// دو قطاروں کو حذف کرنے کے لیے ڈیلیٹ ڈی ایم ایل کا استعمال کریں۔

اکاؤنٹس کو حذف کریں؛

System.debug('**After SOQL:**');

System.debug('DML بیانات:'+Limits.getDMLSstatements());

System.debug('Rows:'+Limits.getDmlRows());

System.debug('CPU ٹائم'+Limits.getCpuTime())؛

آؤٹ پٹ:

دی گئی مثال میں، کوئی DML بیانات اور 0 قطاریں نہیں ہیں۔ موجودہ CPU وقت 1 ملی سیکنڈ ہے۔ SOQL استفسار سے 2 قطاریں واپس کرنے اور ان دو قطاروں کو حذف کرنے کے بعد، Limits.getDMLStatements() کے ذریعے لوٹائے جانے والے DML سٹیٹمنٹس کی کل تعداد 1 ہے، Limits.getDMLRows()  کے ذریعے لوٹائی گئی کل قطاریں 2 ہیں، اور CPU اس لین دین کو انجام دینے کے لیے جو وقت درکار ہے وہ 51 ملی سیکنڈ ہے۔

بہترین پریکٹس کی مثال:  'لوپ کے اندر DML کا استعمال نہ کریں'

آئیے دیکھتے ہیں کہ ہم گورنر کی حد حاصل کیے بغیر کوڈ کو کیسے چلا سکتے ہیں۔ ہم سب سے پہلے 'WorkOrder' آبجیکٹ سے 'پروڈکٹ' آبجیکٹ (API – Product2) پر 'WorkOrder' کو 'for' لوپ میں ہی 'Product Name' کے تحت تفویض کرکے ایک ریکارڈ بناتے ہیں۔ آئیے درج ذیل کوڈ کو دیکھتے ہیں:

پروڈکٹ2 prod_obj;

کے لیے (WorkOrder wo_object : [WorkOrder سے موضوع منتخب کریں])

{

prod_obj = نیا پروڈکٹ 2 (نام = wo_object.Subject)؛

prod_obj داخل کریں؛

}

ہم ایک فہرست (prod_s) کا اعلان کرکے اور پھر فہرست میں prod_obj کو ذخیرہ کرکے یہ بہتر طریقے سے کرسکتے ہیں۔ ہم اس فہرست کو لوپ کے باہر پروڈکٹ میں داخل کر سکتے ہیں۔

فہرست prod_s = نئی فہرست()؛

پروڈکٹ2 prod_obj;

کے لیے (WorkOrder wo_object : [WorkOrder سے موضوع منتخب کریں])

{

prod_obj = نیا پروڈکٹ 2 (نام = wo_object.Subject)؛

prod_s.add(prod_obj)؛

}

prod_obj داخل کریں؛

نتیجہ

اب ہم نے تفصیلی وضاحت کے ساتھ سیکھا ہے کہ سیلز فورس میں اپیکس کی حدود کیا ہیں۔ Synchronous Apex کے مقابلے میں بہتر گورنر کی حدیں حاصل کرنے کے لیے Asynchronous Apex عمل کے ساتھ جانا بہتر ہے۔ ہم نے مختلف منظرناموں کے لیے گورنر کی حدود کے بارے میں بھی سیکھا اور 'حد' کلاس سے حد کی گنتی کے حوالے سے ایک نمونہ مظاہرہ کیا۔ ہم نے ایک DML سٹیٹمنٹ چلا کر DML سٹیٹمنٹس، قطاروں اور CPU ٹائم کی گنتی کی بھی تصدیق کی۔ ہم نے اس گائیڈ کو ایک بہترین پریکٹس مثال پر بحث کرکے ختم کیا۔