Hướng dẫn về APEX: Ví dụ về lớp lập trình và mã hóa Apex
Apex trong Salesforce là gì?
Đỉnh là ngôn ngữ lập trình hướng đối tượng và được gõ mạnh do Salesforce phát triển để xây dựng Phần mềm dưới dạng dịch vụ (SaaS) và Quản lý quan hệ khách hàng (CRM). Apex giúp các nhà phát triển tạo các ứng dụng SaaS của bên thứ ba và thêm logic nghiệp vụ vào các sự kiện hệ thống bằng cách cung cấp hỗ trợ cơ sở dữ liệu phụ trợ và giao diện máy khách-máy chủ.
Apex giúp các nhà phát triển thêm logic nghiệp vụ vào các sự kiện hệ thống như nhấp vào nút, cập nhật bản ghi liên quan và trang Visualforce. Apex có cú pháp tương tự như Java. Đăng ký Salesforce để tìm hiểu cách CRM hoạt động
Các tính năng của ngôn ngữ lập trình Apex
Dưới đây là các tính năng quan trọng của Salesforce Apex:
- Apex là một ngôn ngữ không phân biệt chữ hoa chữ thường.
- Bạn có thể thực hiện các thao tác DML như INSERT, UPDATE, UPSERT, DELETE trên các bản ghi sObject bằng cách sử dụng apex.
- Bạn có thể truy vấn các bản ghi sObject bằng SOQL (ngôn ngữ truy vấn đối tượng salesforce) và SOSL (ngôn ngữ tìm kiếm đối tượng salesforce) trong apex.
- Cho phép bạn tạo một kiểm tra đơn vị và thực hiện chúng để xác minh mã số bảo hiểm và hiệu quả của mã trong apex.
- Apex thực thi trong môi trường nhiều người thuê và Salesforce đã xác định một số giới hạn thống đốc ngăn người dùng kiểm soát các tài nguyên được chia sẻ. Bất kỳ mã nào vượt qua giới hạn điều hành lực lượng bán hàng đều không thành công và sẽ xuất hiện lỗi.
- Đối tượng Salesforce có thể được sử dụng làm kiểu dữ liệu trong apex. Ví dụ -
Account acc = new Account();
,ở đây Tài khoản là một đối tượng lực lượng bán hàng tiêu chuẩn.
- Apex tự động nâng cấp với mỗi bản phát hành Salesforce.
Khi nào nhà phát triển nên chọn Apex
Mã Apex chỉ nên được viết nếu kịch bản kinh doanh quá phức tạp và không thể triển khai bằng chức năng dựng sẵn do Salesforce cung cấp.
Sau đây là một số tình huống mà chúng ta cần phải viết mã apex:
- Để tạo các dịch vụ web tích hợp Salesforce với các ứng dụng khác.
- Để triển khai xác thực tùy chỉnh trên các đối tượng.
- Để thực thi logic đỉnh tùy chỉnh khi thực hiện thao tác DML.
- Để triển khai chức năng không thể triển khai bằng cách sử dụng các luồng công việc hiện có và chức năng của trình tạo quy trình.
- Để thiết lập dịch vụ email, bạn cần bao gồm việc xử lý nội dung, tiêu đề và tệp đính kèm của email bằng mã apex.
Cơ cấu làm việc của Apex
Bây giờ trong hướng dẫn Apex này, chúng ta sẽ tìm hiểu về cấu trúc hoạt động của Apex:
Sau đây là luồng hành động của một mã đỉnh:
- Hành động của nhà phát triển: Tất cả mã đỉnh do nhà phát triển viết sẽ được biên dịch thành một bộ hướng dẫn mà trình thông dịch thời gian chạy apex có thể hiểu được khi nhà phát triển lưu mã vào nền tảng và các hướng dẫn này sau đó lưu dưới dạng siêu dữ liệu vào nền tảng.
- Hành động của người dùng cuối: Khi sự kiện của người dùng thực thi mã apex, máy chủ nền tảng sẽ nhận các hướng dẫn được biên dịch từ siêu dữ liệu và chạy chúng thông qua trình thông dịch apex trước khi trả về kết quả.
Cú pháp đỉnh
Sự định nghĩa biến
Vì apex là ngôn ngữ được định kiểu mạnh nên bắt buộc phải khai báo một biến có kiểu dữ liệu trong apex.
Ví dụ:
contact con = new contact();
ở đây biến con được khai báo với contact dưới dạng kiểu dữ liệu.
Truy vấn SOQL
SOQL là viết tắt của ngôn ngữ truy vấn đối tượng lực lượng bán hàng. SOQL được sử dụng để tìm nạp bản ghi sObject từ cơ sở dữ liệu Salesforce. Ví dụ-
Account acc = [select id, name from Account Limit 1];
Truy vấn trên tìm nạp bản ghi tài khoản từ cơ sở dữ liệu lực lượng bán hàng.
Tuyên bố vòng lặp
Câu lệnh vòng lặp được sử dụng để lặp qua các bản ghi trong danh sách. Số lần lặp bằng số lượng bản ghi trong danh sách. Ví dụ:
list<Account>listOfAccounts = [select id, name from account limit 100]; // iteration over the list of accounts for(Account acc : listOfAccounts){ //your logic }
Trong đoạn mã trên, listOfAccounts là một biến có kiểu dữ liệu danh sách.
Tuyên bố kiểm soát luồng
Câu lệnh điều khiển luồng có lợi khi bạn muốn thực thi một số dòng mã dựa trên một số điều kiện.
Ví dụ:
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 }
Đoạn mã trên đang truy vấn các bản ghi tài khoản từ cơ sở dữ liệu và kiểm tra kích thước danh sách.
Tuyên bố DML
DML là viết tắt của ngôn ngữ thao tác dữ liệu. Câu lệnh DML được sử dụng để thao tác dữ liệu trong cơ sở dữ liệu Salesforce. Ví dụ -
Account acc = new Account(Name = ‘ Test Account’); Insert acc; //DML statement to create account record.
Môi trường phát triển Apex
Bây giờ trong hướng dẫn lập trình Apex này, chúng ta sẽ tìm hiểu về Môi trường phát triển Apex:
Mã Apex có thể được phát triển trong phiên bản sandbox và phiên bản dành cho nhà phát triển của Salesforce.
Cách tốt nhất là phát triển mã trong môi trường thử nghiệm rồi triển khai vào môi trường sản xuất.
Công cụ phát triển mã Apex: Sau đây là ba công cụ có sẵn để phát triển mã Apex trong mọi phiên bản của Salesforce.
- Bảng điều khiển dành cho nhà phát triển Force.com
- Force.com IDE
- Trình chỉnh sửa mã trong Giao diện người dùng SalesforceBạn
Kiểu dữ liệu trong Apex
Sau đây là các kiểu dữ liệu được apex hỗ trợ:
Ban sơ
Số nguyên, Double, Long, Date, Date Time, String, ID và Boolean được coi là các kiểu dữ liệu nguyên thủy. Tất cả các kiểu dữ liệu nguyên thủy được truyền theo giá trị, không phải theo tham chiếu.
Các hạng mục
Ba loại bộ sưu tập có sẵn trong Apex
- Danh sách: Đây là một tập hợp có thứ tự gồm các đối tượng nguyên thủy, sObject, bộ sưu tập hoặc đối tượng Apex dựa trên các chỉ mục.
- Tập hợp: Một bộ sưu tập không có thứ tự của các nguyên thủy độc đáo.
- Bản đồ: Đây là tập hợp các khóa nguyên thủy, duy nhất ánh xạ tới các giá trị đơn lẻ có thể là nguyên thủy, sObject, bộ sưu tập hoặc đối tượng Apex.
sĐối tượng
Đây là loại dữ liệu đặc biệt trong Salesforce. Nó tương tự như một bảng trong SQL và chứa các trường tương tự như các cột trong SQL.
liệt kê
Enum là kiểu dữ liệu trừu tượng lưu trữ một giá trị của một tập hợp hữu hạn các mã định danh được chỉ định
Các lớp học
Đối tượng
Nó đề cập đến bất kỳ loại dữ liệu nào được hỗ trợ trong Apex.
Giao diện
Công cụ xác định quyền truy cập Apex
Sau đây là các thông số truy cập được apex hỗ trợ:
Public
Trình xác định quyền truy cập này cung cấp quyền truy cập vào một lớp, phương thức, biến được sử dụng bởi một đỉnh trong một không gian tên.
Riêng
Trình xác định quyền truy cập này cung cấp quyền truy cập vào một lớp, phương thức, biến được sử dụng cục bộ hoặc trong phần mã, nó được xác định. Tất cả các kỹ thuật, biến không có bất kỳ bộ chỉ định truy cập nào được xác định đều có bộ chỉ định truy cập mặc định là riêng tư.
bảo vệ
Trình xác định quyền truy cập này cung cấp quyền truy cập vào một phương thức, biến được sử dụng bởi bất kỳ lớp bên trong nào trong việc xác định lớp Apex.
Toàn cầu
Trình xác định quyền truy cập này cung cấp quyền truy cập vào một lớp, phương thức, biến được sử dụng bởi một đỉnh trong không gian tên cũng như bên ngoài không gian tên. Cách tốt nhất là không sử dụng từ khóa toàn cầu cho đến khi cần thiết.
Từ khóa trong Apex
Với sự chia sẻ
Nếu một lớp được xác định bằng từ khóa này thì tất cả các quy tắc chia sẻ áp dụng cho người dùng hiện tại sẽ được thực thi và nếu từ khóa này vắng mặt thì mã sẽ thực thi trong ngữ cảnh hệ thống.
Ví dụ:
public with sharing class MyApexClass{ // sharing rules enforced when code in this class execute }
Không chia sẻ
Nếu một lớp được xác định bằng từ khóa này thì tất cả các quy tắc chia sẻ áp dụng cho người dùng hiện tại sẽ không được thực thi.
Ví dụ:
public without sharing class MyApexClass{ // sharing rules is not enforced when code in this class execute }
tĩnh
Một biến Method được định nghĩa với từ khóa static được khởi tạo một lần và liên kết với lớp. Các biến, phương thức tĩnh có thể được gọi trực tiếp bằng tên lớp mà không cần tạo thể hiện của lớp.
Cuối cùng
Một hằng số, Phương thức được xác định bằng từ khóa cuối cùng không thể bị ghi đè. Ví dụ:
public class myCls { static final Integer INT_CONST = 10; }
Nếu bạn cố gắng ghi đè giá trị cho biến INT_CONST này, thì bạn sẽ gặp một ngoại lệ – System.FinalException: Biến cuối cùng đã được khởi tạo.
Trả hàng
Từ khóa này trả về một giá trị từ một phương thức. Ví dụ:
public String getName() { return 'Test' ; }
Null
Nó định nghĩa một hằng số null và có thể được gán cho một biến. Ví dụ
Boolean b = null;
ảo
Nếu một lớp được định nghĩa bằng từ khóa ảo, nó có thể được mở rộng và ghi đè.
Tóm tắt
Nếu một lớp được định nghĩa bằng từ khóa trừu tượng thì lớp đó phải chứa ít nhất một phương thức có từ khóa trừu tượng và phương thức đó chỉ được có một chữ ký.
Ví dụ
public abstract class MyAbstrtactClass { abstract Integer myAbstractMethod1(); }
Chuỗi đỉnh
Chuỗi là một tập hợp các ký tự không có giới hạn ký tự. Ví dụ:
String name = 'Test';
Có một số phương thức tích hợp được cung cấp bởi lớp String trong Salesforce. Sau đây là một số hàm thường dùng và được sử dụng nhiều nhất:
viết tắt(maxWidth)
Phương pháp này cắt bớt một chuỗi theo độ dài đã chỉ định và trả về chuỗi đó nếu độ dài của chuỗi đã cho dài hơn độ dài đã chỉ định; nếu không, phương pháp này trả về chuỗi gốc. Nếu giá trị của biến maxWidth nhỏ hơn 4, phương pháp này trả về ngoại lệ thời gian chạy – System.StringException: Chiều rộng viết tắt tối thiểu là 4
Ví dụ:
String s = 'Hello World'; String s2 = s.abbreviate(8); System.debug('s2'+s2); //Hello...
viết hoa ()
Phương thức này chuyển đổi chữ cái đầu tiên của chuỗi thành kiểu chữ tiêu đề và trả về nó.
Ví dụ:
String s = 'hello; String s2 = s.capitalize(); System.assertEquals('Hello', s2);
chứa (chuỗi con)
Phương thức này trả về true nếu Chuỗi gọi phương thức chứa chuỗi con được chỉ định.
String name1 = 'test1'; String name2 = 'test2'; Boolean flag = name.contains(name2); System.debug('flag::',+flag); //true
bằng(stringOrId)
Phương thức này trả về true nếu tham số được truyền không phải là null và biểu thị cùng một chuỗi ký tự nhị phân giống như chuỗi đang gọi phương thức.
Trong khi so sánh các giá trị Id, độ dài của ID có thể không bằng nhau. Ví dụ: nếu một chuỗi đại diện cho id 15 ký tự được so sánh với một đối tượng đại diện cho ID 18 ký tự thì phương thức này trả về true. Ví dụ:
Id idValue15 = '001D000000Ju1zH'; Id idValue18 = '001D000000Ju1zHIAR'; Boolean result4 = stringValue15.equals(IdValue18); System.debug('result4', +result4); //true
Trong ví dụ trên, phương thức bằng đang so sánh Id đối tượng 15 ký tự với Id đối tượng 18 ký tự và nếu cả hai id này đại diện cho cùng một chuỗi nhị phân thì nó sẽ trả về true.
Sử dụng phương pháp này để thực hiện so sánh phân biệt chữ hoa chữ thường.
escapeSingleQuotes(stringToEscape)
Phương thức này thêm ký tự thoát (\) trước bất kỳ trích dẫn đơn nào trong chuỗi và trả về ký tự đó. Phương pháp này ngăn chặn việc chèn SOQL trong khi tạo truy vấn SOQL động. Phương pháp này đảm bảo rằng tất cả các dấu ngoặc đơn được coi là các chuỗi kèm theo, thay vì các lệnh cơ sở dữ liệu.
Ví dụ:
String s = 'Hello Tom'; system.debug(s); // Outputs 'Hello Tom' String escapedStr = String.escapeSingleQuotes(s); // Outputs \'Hello Tom\'
xóa (chuỗi con)
Phương thức này loại bỏ tất cả sự xuất hiện của chuỗi con được đề cập khỏi Chuỗi gọi phương thức và trả về chuỗi kết quả.
Ví dụ
String s1 = 'Salesforce and force.com'; String s2 = s1.remove('force'); System.debug( 's2'+ s2);// 'Sales and .com'
chuỗi con (startIndex)
Phương thức này trả về một chuỗi con bắt đầu từ ký tự tại startIndex kéo dài đến chuỗi cuối cùng.
Ví dụ:
String s1 = 'hamburger'; String s2 = s1.substring(3); System.debug('s2'+s2); //burger
đảo ngược()
Phương thức này đảo ngược tất cả các ký tự của một chuỗi và trả về nó. Ví dụ:
String s = 'Hello'; String s2 = s.reverse(); System.debug('s2::::'+s2);// olleH // Hello
Trim(): Phương thức này loại bỏ tất cả các khoảng trắng ở đầu chuỗi và trả về nó.
valueOf(toConvert)
Phương thức này trả về biểu diễn chuỗi được truyền trong đối tượng.
Giới hạn thống đốc Apex
Giới hạn của bộ điều khiển Apex là giới hạn được thực thi bởi công cụ thời gian chạy Apex để đảm bảo rằng bất kỳ mã và quy trình Apex nào trên đường băng đều không kiểm soát các tài nguyên được chia sẻ và không vi phạm quá trình xử lý cho những người dùng khác trên môi trường đa thuê bao. Các giới hạn này được xác minh đối với mỗi giao dịch Apex. Sau đây là giới hạn của bộ điều khiển do Salesforce xác định trên mỗi giao dịch Apex:
Mô tả | Giới Hạn |
---|---|
Các truy vấn SOQL có thể được thực hiện trong một giao dịch đồng bộ | 100 |
Các truy vấn SOQL có thể được thực hiện trong giao dịch không đồng bộ | 200 |
Các bản ghi có thể được truy xuất bằng truy vấn SOQL | 50000 |
Các bản ghi có thể được truy xuất bởi Database.getQueryLocator | 10000 |
Các truy vấn SOSL có thể được thực hiện trong giao dịch đỉnh | 20 |
Các bản ghi có thể được truy xuất bằng truy vấn SOSL | 2000 |
Câu lệnh DML có thể được thực hiện trong giao dịch đỉnh | 150 |
Các bản ghi có thể được xử lý nhờ câu lệnh DML, Approval.process hoặc cơ sở dữ liệu.emptyRecycleBin | 10000 |
Chú thích có thể được thực hiện trong giao dịch đỉnh. | 100 |
Giới hạn thời gian chờ tích lũy đối với tất cả chú thích đang được thực hiện trong giao dịch đỉnh | 120 giây |
Giới hạn các công việc đỉnh có thể được thêm vào hàng đợi bằng System.enqueueJob | 50 |
Giới hạn thời gian thực hiện cho mỗi giao dịch Apex | 10 phút |
Giới hạn số ký tự có thể được sử dụng trong lớp đỉnh và trình kích hoạt | 1 triệu |
Giới hạn thời gian CPU cho giao dịch đồng bộ | 10,000 mili giây |
Giới hạn thời gian CPU cho giao dịch không đồng bộ | 60,000 mili giây |
Apex Getter và Setter
Thuộc tính Apex tương tự như biến apex. Getter và setter là cần thiết cho thuộc tính apex. Getter và setter có thể được sử dụng để thực thi mã trước khi giá trị thuộc tính được truy cập hoặc thay đổi. Mã trong trình truy cập get sẽ thực thi khi đọc giá trị thuộc tính. Mã trong bộ truy cập sẽ chạy khi giá trị thuộc tính được thay đổi. Bất kỳ thuộc tính nào có bộ truy cập get đều được coi là chỉ đọc, bất kỳ thuộc tính nào có bộ truy cập set được coi là chỉ ghi bất kỳ thuộc tính nào có cả bộ truy cập get và set được coi là đọc-ghi. Cú pháp của thuộc tính apex:
public class myApexClass { // Property declaration access_modifierreturn_typeproperty_name { get { //code } set{ //code } }
Ở đây, access_modifier là công cụ sửa đổi quyền truy cập của thuộc tính. return_type là kiểu dữ liệu của thuộc tính. property_name là tên của thuộc tính.
Dưới đây là ví dụ về thuộc tính apex có cả bộ truy cập get và set.
public class myApex{ public String name{ get{ return name;} set{ name = 'Test';} } }
Ở đây, tên thuộc tính là tên, thuộc tính công cộng và trả về một kiểu dữ liệu chuỗi.
Không bắt buộc phải có một số mã trong khối get và set. Khối này có thể để trống để xác định thuộc tính tự động. Ví dụ:
public double MyReadWriteProp{ get; set; }
Trình truy cập nhận và đặt cũng có thể được xác định bằng công cụ sửa đổi truy cập của chúng. Nếu một trình truy cập được xác định bằng một công cụ sửa đổi thì nó sẽ ghi đè công cụ sửa đổi truy cập cho thuộc tính. Ví dụ:
public String name{private get; set;}// name is private for read and public to write.
Lớp đỉnh cao
Lớp đỉnh là một bản thiết kế hoặc mẫu mà từ đó các đối tượng được tạo ra. Một đối tượng là thể hiện của một lớp.
Có ba cách tạo các lớp đỉnh trong Salesforce:
Ban điêu khiển cải tiên hơn
Force.com IDE
Trang chi tiết lớp Apex.
Trong apex, bạn có thể định nghĩa một lớp bên ngoài còn được gọi là lớp cấp cao nhất và bạn cũng có thể định nghĩa các lớp bên trong lớp bên ngoài được gọi là lớp bên trong.
Bắt buộc phải sử dụng công cụ sửa đổi truy cập như toàn cầu hoặc công khai trong khai báo lớp bên ngoài.
Không cần thiết phải sử dụng công cụ sửa đổi truy cập khi khai báo các lớp bên trong.
Một lớp đỉnh được định nghĩa bằng từ khóa lớp theo sau là tên lớp.
Từ khóa mở rộng được sử dụng để mở rộng một lớp hiện có bằng một lớp apex và từ khóa thực hiện được sử dụng để triển khai giao diện bởi một lớp apex.
Salesforce Apex không hỗ trợ nhiều kế thừa, một lớp apex chỉ có thể mở rộng một lớp apex hiện có nhưng có thể triển khai nhiều giao diện.
Một lớp apex có thể chứa hàm tạo do người dùng định nghĩa và nếu không có hàm tạo do người dùng định nghĩa thì hàm tạo mặc định sẽ được sử dụng. Mã trong hàm tạo sẽ thực thi khi một thể hiện của một lớp được tạo.
Cú pháp của ví dụ về Lớp Apex:
public class myApexClass{ // variable declaration //constructor public myApexClass{ } //methods declaration }
Từ khóa new được sử dụng để tạo một thể hiện của lớp apex. Dưới đây là cú pháp để tạo một thể hiện của lớp apex.
myApexClass obj = new myApexClass();
Kích hoạt đỉnh
Trình kích hoạt Apex cho phép bạn thực thi đỉnh tùy chỉnh trước và sau khi thực hiện thao tác DML.
Apex hỗ trợ hai loại kích hoạt sau:
Trước trình kích hoạt: Các trình kích hoạt này được sử dụng để xác thực và cập nhật giá trị của trường trước khi lưu bản ghi vào cơ sở dữ liệu.
Sau trình kích hoạt: Các trình kích hoạt này được sử dụng để truy cập vào các trường (ID bản ghi, trường LastModifiedDate) do hệ thống đặt sau khi một bản ghi được cam kết vào cơ sở dữ liệu. Giá trị trường này có thể được sử dụng để sửa đổi các bản ghi khác. Các bản ghi kích hoạt sau trình kích hoạt ở dạng chỉ đọc.
Cách tốt nhất là viết các trình kích hoạt cồng kềnh. Trình kích hoạt cồng kềnh có thể xử lý một bản ghi cũng như nhiều bản ghi cùng một lúc.
Cú pháp của trình kích hoạt đỉnh:
trigger TriggerName on ObjectName (trigger_events) { //Code_block }
Ở đây, TriggerName là tên của trình kích hoạt, ObjectName là tên của đối tượng mà trình kích hoạt được ghi vào đó, trigger_events là danh sách các sự kiện được phân tách bằng dấu phẩy.
Sau đây là các sự kiện được hỗ trợ bởi trình kích hoạt apex: trước khi chèn, trước khi cập nhật, trước khi xóa, sau khi chèn, sau khi cập nhật, sau khi xóa, sau khi khôi phục.
Không thể sử dụng từ khóa tĩnh trong trình kích hoạt Apex. Tất cả các từ khóa áp dụng cho các lớp bên trong đều có thể được sử dụng trong trình kích hoạt Apex.
Có biến ngầm được xác định bởi mọi trình kích hoạt trả về bối cảnh thời gian chạy. Các biến này được xác định trong hệ thống. Lớp kích hoạt. Các biến này được gọi là biến bối cảnh. Ảnh chụp màn hình bên dưới hiển thị biến ngữ cảnh được trình kích hoạt apex hỗ trợ.
Sau đây là những cân nhắc về biến ngữ cảnh trong trình kích hoạt đỉnh:
- Không sử dụng trigger.new và trigger.old trong hoạt động DML.
- Không thể xóa trigger.new.
- Trigger.new ở chế độ chỉ đọc.
- Trigger.new chỉ có thể được sử dụng để thay đổi giá trị của các trường trên cùng một đối tượng trước khi kích hoạt.
Ảnh chụp màn hình bên dưới liệt kê những điều cần cân nhắc về các hành động cụ thể trong các sự kiện kích hoạt khác nhau.
Lớp hàng loạt trong Apex
Lớp Batch trong Salesforce được sử dụng để xử lý một số lượng lớn bản ghi có thể vượt quá giới hạn của Apex Governor nếu được xử lý bình thường. Lớp Batch thực thi mã không đồng bộ.
Sau đây là những ưu điểm của lớp học theo lô:
- Lớp hàng loạt xử lý dữ liệu theo từng khối và nếu một khối không xử lý thành công thì tất cả các khối được xử lý thành công sẽ không được khôi phục.
- Mỗi đoạn dữ liệu trong một lớp lô được xử lý bằng một bộ giới hạn bộ điều chỉnh mới để đảm bảo rằng mã thực thi trong giới hạn thực thi của bộ điều chỉnh.
- Cơ sở dữ liệu. Giao diện có thể xử lý hàng loạt phải được lớp apex triển khai để được sử dụng làm lớp hàng loạt. Nó cung cấp ba phương thức phải được lớp batch thực hiện.
Sau đây là ba phương pháp được cung cấp bởi Database. Giao diện có thể xử lý theo lô:
1.bắt đầu()
Phương pháp này tạo ra phạm vi của các bản ghi hoặc đối tượng được xử lý bởi phương thức giao diện execute. Trong quá trình thực thi hàng loạt, nó chỉ được gọi một lần. Phương pháp này trả về một đối tượng Database.QueryLocator hoặc một Iterable. Số lượng bản ghi được truy xuất bởi truy vấn SQL bằng cách sử dụng đối tượng Database.QueryLocator là 50 triệu bản ghi nhưng khi sử dụng một iterable, tổng số bản ghi có thể được truy xuất bởi truy vấn SQL chỉ là 50000. Iterable được sử dụng để tạo phạm vi phức tạp cho lớp hàng loạt.
Cú pháp của phương thức bắt đầu:
global (Database.QueryLocator | Iterable<sObject>) start(Database.BatchableContextbc) {}
2.thực thi()
Phương pháp này được sử dụng để xử lý từng đoạn dữ liệu. Đối với mỗi đoạn bản ghi, phương thức thực thi được gọi. Kích thước lô mặc định để thực thi là 200 bản ghi. Phương thức thực thi có hai đối số:
Một tham chiếu đến đối tượng Database.BatchableContext,
Danh sách các sObject, chẳng hạn như Danh sách hoặc danh sách các loại tham số. Cú pháp của phương thức thực thi:
global void execute(Database.BatchableContext BC, list<P>){}
3.kết thúc()
Phương thức Finish được gọi một lần trong quá trình thực thi lớp batch. Các hoạt động xử lý hậu kỳ có thể được thực hiện trong phương thức Finish. Ví dụ: gửi email xác nhận. Phương thức này được gọi khi tất cả các batch được xử lý. Cú pháp của phương thức Finish:
global void finish(Database.BatchableContext BC){}
Đối tượng Database.BatchableContext
Mỗi phương thức của Cơ sở dữ liệu. Giao diện Batchable có tham chiếu đến đối tượng Database.BatchableContext.
Đối tượng này được sử dụng để theo dõi tiến độ của công việc hàng loạt.
Sau đây là các phương thức thể hiện được cung cấp bởi BatchableContext:
- getChildJobId(): Phương thức này trả về ID của một batch job hiện đang được xử lý.
- getJobId(): Phương thức này trả về ID của batch job.
Dưới đây là cú pháp của một lớp batch:
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 } }
Phương thức Database.executeBatch
Phương thức Database.executeBatch được sử dụng để thực thi một lớp batch.
Phương thức này có hai tham số: Phiên bản của lớp lô cần xử lý, Tham số tùy chọn để chỉ định kích thước lô nếu không được chỉ định, nó có kích thước mặc định là 200.
Cú pháp của Database.executeBatch:
Database.executeBatch(myBatchObject,scope)
Thực thi tên lớp hàng loạt MyBatchClass :
MyBatchClassmyBatchObject = new MyBatchClass(); Id batchId = Database.executeBatch(myBatchObject,100);
Cơ sở dữ liệu.stateful
Lớp Batch theo mặc định là không trạng thái. Mỗi khi phương thức thực thi được gọi là một bản sao mới của một đối tượng được nhận, tất cả các biến của lớp sẽ được khởi tạo.
Database.stateful được triển khai để làm cho một lớp batch có trạng thái.
Nếu lớp bó của bạn đã triển khai Cơ sở dữ liệu , giao diện trạng thái, tất cả các biến thể hiện vẫn giữ nguyên giá trị của chúng, nhưng các biến tĩnh được đặt lại giữa giao dịch.
Tổng kết
- Apex là một ngôn ngữ hướng đối tượng mạnh mẽ ngôn ngữ lập trình biên dịch và chạy trên nền tảng Force.com
- Ngôn ngữ lập trình Apex là ngôn ngữ không phân biệt chữ hoa chữ thường
- Hai loại luồng hành động trong Apex là 1) Hành động của nhà phát triển 2) Hành động của người dùng cuối
- Apex giúp bạn tạo các dịch vụ web tích hợp Salesforce với các ứng dụng khác.
- Các kiểu dữ liệu được apex hỗ trợ là: 1). Nguyên thủy 2) Bộ sưu tập 3) sObject, Enums, 4) Lớp, 5) Đối tượng và Giao diện
- Công khai, Riêng tư, Được bảo vệ và Toàn cầu được Apex chỉ định hỗ trợ
- Các từ khóa sử dụng trong Apex là: 1) Có chia sẻ, 2) Không chia sẻ, 3) Tĩnh, 4) Cuối cùng 5)Trả về, 6)Không, 7) Ảo, 8) Trừu tượng
- Chuỗi là tập hợp các ký tự không có giới hạn ký tự
- Giới hạn của bộ điều chỉnh Apex là các giới hạn được thực thi bởi công cụ thời gian chạy đỉnh để đảm bảo rằng mọi quy trình và mã đỉnh của đường băng
- Getter và setter có thể được sử dụng để thực thi mã trước khi giá trị thuộc tính được truy cập hoặc thay đổi
- Có ba cách tạo lớp apex trong Salesforce: 1)Bảng điều khiển dành cho nhà phát triển 2)Force.com IDE và 3) Trang chi tiết lớp Apex.
- Trình kích hoạt Apex cho phép bạn thực thi đỉnh tùy chỉnh trước và sau khi thực hiện thao tác DML.
- Lớp hàng loạt trong lực lượng bán hàng được sử dụng để xử lý một số lượng lớn các bản ghi có thể vượt quá giới hạn thống đốc đỉnh nếu được xử lý bình thường.