Salesforce Apex – Giới hạn Thống đốc

Salesforce Apex Gioi Han Thong Doc



Salesforce cho phép chúng tôi xử lý hoặc thực thi một số câu lệnh/bản ghi cụ thể tại một thời điểm. Có một số giới hạn đối với các câu lệnh DML, lớp Apex, v.v. để thực thi hoặc xử lý. Những giới hạn này được gọi là giới hạn Thống đốc. Trong hướng dẫn này, chúng ta sẽ xem giới hạn của Thống đốc là gì và cách xử lý chúng. Ngoài ra, Salesforce Apex cung cấp lớp “Giới hạn” để biết các giới hạn liên quan đến chú thích, lớp Apex, thành phần web sét, câu lệnh SOSL và SOQL.

Thống đốc giới hạn

Hãy xem xét một tình huống trong đó Alish và Subash là hai người sử dụng tổ chức Salesforce. Alice muốn xử lý hoặc thực thi 1000 câu lệnh DML trong một giao dịch. Song song, Subash muốn tải 5000 bản ghi cùng một lúc. Nếu họ làm song song, Salesforce sẽ không chấp nhận và trở nên bận rộn. Do đó, các giới hạn của Thống đốc đi vào hình ảnh. Trong trường hợp này, Alish có thể xử lý 100 DML cùng một lúc và Subash có thể xử lý 500 bản ghi cùng một lúc. Họ có thể sử dụng Apex AsynchronousBatch để thực hiện từng giao dịch trên một chuỗi riêng biệt mà không làm phiền từng giao dịch và hoàn thành nhiệm vụ của mình.







Về cơ bản, các giới hạn của Thống đốc trong Salesforce giới hạn việc xử lý và thực hiện trong nhiều giao dịch. 'Giới hạn đỉnh cho mỗi giao dịch' được tính cho mỗi giao dịch và 'Giới hạn đỉnh theo kích thước cụ thể' xử lý kích thước của mã. Salesforce hỗ trợ hai quy trình: quy trình đồng bộ và không đồng bộ. Trong quy trình đồng bộ, tập lệnh Apex được thực thi trong một lần duy nhất trong khi ở quy trình không đồng bộ, tập lệnh Apex được thực thi bằng cách chia thành nhiều công việc.



Giới hạn được phép

Hãy thảo luận về số lượng giới hạn cho các tình huống khác nhau:



  1. Có thể xử lý/chạy 100 truy vấn SOQL trong Apex đồng bộ và 200 truy vấn SOQL trong Apex không đồng bộ.
  2. Chỉ 50.000 bản ghi sẽ trả về từ một truy vấn SOQL cho cả apex đồng bộ và không đồng bộ.
  3. Nếu chúng ta sử dụng Database.getQueryLocator(), chỉ có 10.000 được trả về mỗi lần cho cả Apex đồng bộ và không đồng bộ.
  4. Trong cả hai trường hợp, số lượng truy vấn SOSL được đưa ra là 20.
  5. Kích thước heap cần thiết để xử lý Apex đồng bộ là 6 MB. Đối với Apex không đồng bộ, kích thước heap cần thiết là gấp đôi, tức là 12 MB.
  6. Thời gian CPU tối đa được phép cho Apex đồng bộ là 10.000 mili giây và 60.000 mili giây cho Apex không đồng bộ.
  7. Chỉ có 10 phút được phép thực thi cho cả hai Apex.
  8. Trong cả hai trường hợp, chúng ta chỉ có thể sử dụng 10 phương thức sendEmail() với 100 người nhận.
  9. Các ký tự có trong lớp Apex hoặc trong trình kích hoạt Apex phải nằm trong phạm vi 1 triệu.
  10. Trong Batch Apex (không đồng bộ), kích thước là 200. QueryLocator() của lớp “Cơ sở dữ liệu” trả về 50 triệu bản ghi cho mỗi giao dịch.
  11. Chỉ có 5 công việc Apex sẽ được xếp hàng hoặc hoạt động.

Ví dụ về lớp GIỚI HẠN:

Apex có thể chỉ định các giới hạn của Thống đốc trong lớp “GIỚI HẠN”. Lớp này cung cấp một số phương thức cho biết các giới hạn của Thống đốc. Hãy xem ví dụ sau hiển thị một số giới hạn của Thống đốc:





System.debug('Số truy vấn tổng hợp có thể được xử lý: '+ Limits.getLimitAggregateQueries());

System.debug('Số câu lệnh dịch vụ Web có thể được xử lý: '+ Limits.getLimitCallouts());

System.debug('Số bản ghi có thể được xử lý: '+ Limits.getLimitDmlRows());

System.debug('Số câu lệnh DML có thể gọi là: '+Limits.getLimitDmlStatements());

System.debug('Tổng dung lượng bộ nhớ theo byte: '+ Limits.getLimitHeapSize());

System.debug('Số truy vấn SOQL có thể được đưa ra: '+ Limits.getLimitQueries());

System.debug('Số bản ghi có thể cấp: '+Limits.getLimitQueryRows());

System.debug('Số lượng truy vấn SOSL có thể được đưa ra:  '+ Limits.getLimitSoslQueries());

Đầu ra:

Cũng có thể kiểm tra xem có thể trả về bao nhiêu câu lệnh/hàng DML bằng cách sử dụng các phương thức “vòm” có trong lớp “LIMIT”.



  1. Giới hạn.getDMLStatements() trả về tổng số câu lệnh DML được sử dụng tại một phiên bản.
  2. Giới hạn.getDMLRows() trả về tổng số hàng được trả về bởi các câu lệnh DML.
  3. Giới hạn.getCpuTime() trả về thời gian sử dụng CPU cho giao dịch hiện tại tính bằng mili giây.

Ví dụ sử dụng:

Hãy viết một truy vấn SOQL trả về hai bản ghi từ đối tượng “WorkOrder”. Sau đó, xóa hai bản ghi này bằng DML “xóa”.

System.debug('DML Statements:'+Limits.getDMLStatements());

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

System.debug('Thời gian CPU '+Giới hạn.getCpuTime());

// Truy vấn SOQL để chọn 2 hàng từ đối tượng WorkOrder

Danh sách các tài khoản <Đơn hàng công việc> = [Id CHỌN TỪ GIỚI HẠN Đơn hàng công việc 2];

//Dùng xóa DML để xóa hai hàng

xóa tài khoản;

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

System.debug('DML Statements:'+Limits.getDMLStatements());

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

System.debug('Thời gian CPU '+Giới hạn.getCpuTime());

Đầu ra:

Trong ví dụ đã cho, không có câu lệnh DML nào và 0 hàng. Thời gian CPU hiện có là 1 mili giây. Sau khi trả về 2 hàng từ truy vấn SOQL và xóa hai hàng này, tổng số câu lệnh DML được trả về bởi Limits.getDMLStatements() là 1, tổng số hàng được trả về bởi Limits.getDMLRows()  là 2 và CPU thời gian cần thiết để thực hiện giao dịch này là 51 mili giây.

Ví dụ về phương pháp hay nhất: “KHÔNG BAO GIỜ SỬ DỤNG DML TRONG VÒNG ĐẶT”

Hãy xem cách chúng ta có thể chạy mã mà không nhận được giới hạn của bộ điều chỉnh. Trước tiên, chúng tôi tạo một bản ghi trên đối tượng 'Sản phẩm' (API – Product2) từ đối tượng 'WorkOrder' bằng cách chỉ định chủ thể 'WorkOrder' cho 'Tên sản phẩm' trong chính vòng lặp 'for'. Hãy xem đoạn mã sau:

Sản phẩm2 prod_obj;

cho (WorkOrder wo_object : [CHỌN Chủ đề TỪ WorkOrder])

{

prod_obj = new Product2(Name = wo_object.Subject);

chèn prod_obj;

}

Chúng ta có thể làm điều này theo cách tốt hơn bằng cách khai báo một danh sách (prod_s) và sau đó lưu trữ prod_obj trong danh sách. Chúng ta có thể chèn danh sách này vào sản phẩm bên ngoài vòng lặp.

Danh sách prod_s = Danh sách mới();

Sản phẩm2 prod_obj;

cho (WorkOrder wo_object : [CHỌN Chủ đề TỪ WorkOrder])

{

prod_obj = new Product2(Name = wo_object.Subject);

prod_s.add(prod_obj);

}

chèn prod_obj;

Phần kết luận

Bây giờ chúng ta đã biết giới hạn Apex trong Salesforce là gì với phần giải thích chi tiết. Tốt hơn là nên sử dụng quy trình Apex không đồng bộ để đạt được các giới hạn Thống đốc tốt hơn khi so sánh với Apex đồng bộ. Chúng tôi cũng đã tìm hiểu về các giới hạn Thống đốc cho các tình huống khác nhau và đưa ra một minh họa mẫu về số lượng giới hạn từ lớp “Giới hạn”. Chúng tôi cũng đã xác minh số lượng câu lệnh DML, hàng và thời gian CPU bằng cách chạy một câu lệnh DML. Chúng tôi kết thúc hướng dẫn này bằng cách thảo luận về một ví dụ thực tiễn tốt nhất.