Apex - Phương thức cơ sở dữ liệu
Phương thức lớp cơ sở dữ liệu là một cách khác để làm việc với các câu lệnh DML linh hoạt hơn các câu lệnh DML như chèn, cập nhật, v.v.
Sự khác biệt giữa phương thức cơ sở dữ liệu và câu lệnh DML
Tuyên bố DML | Phương pháp cơ sở dữ liệu |
---|---|
Cập nhật một phần không được phép. Ví dụ: nếu bạn có 20 bản ghi trong danh sách, thì tất cả các bản ghi sẽ được cập nhật hoặc không có bản ghi nào. | Cập nhật một phần được cho phép. Bạn có thể chỉ định Phương thức Tham số trong Cơ sở dữ liệu là true hoặc false, true để cho phép cập nhật một phần và false để không cho phép cập nhật tương tự. |
Bạn không thể lấy danh sách các bản ghi thành công và thất bại. | Bạn có thể lấy danh sách các bản ghi thành công và thất bại như chúng ta đã thấy trong ví dụ. |
Example - chèn listName | Example - Database.insert (listName, False), trong đó false cho biết rằng không được phép cập nhật một phần. |
Chèn hoạt động
Việc chèn các bản ghi mới thông qua các phương thức cơ sở dữ liệu cũng khá đơn giản và linh hoạt. Chúng ta hãy xem xét kịch bản trước, trong đó, chúng ta đã chèn các bản ghi mới bằng cách sử dụng các câu lệnh DML. Chúng tôi sẽ chèn tương tự bằng cách sử dụng các phương pháp Cơ sở dữ liệu.
Thí dụ
// Insert Operation Using Database methods
// Insert Customer Records First using simple DML Statement. This Customer Record will be
// used when we will create Invoice Records
APEX_Customer__c objCust = new APEX_Customer__C();
objCust.Name = 'Test';
insert objCust; // Inserting the Customer Records
// Insert Operation Using Database methods
APEX_Invoice__c objNewInvoice = new APEX_Invoice__c();
List<apex_invoice__c> InvoiceListToInsert = new List<apex_invoice__c>();
objNewInvoice.APEX_Status__c = 'Pending';
objNewInvoice.APEX_Customer__c = objCust.id;
objNewInvoice.APEX_Amount_Paid__c = 1000;
InvoiceListToInsert.add(objNewInvoice);
Database.SaveResult[] srList = Database.insert(InvoiceListToInsert, false);
// Database method to insert the records in List
// Iterate through each returned result by the method
for (Database.SaveResult sr : srList) {
if (sr.isSuccess()) {
// This condition will be executed for successful records and will fetch the ids
// of successful records
System.debug('Successfully inserted Invoice. Invoice ID: ' + sr.getId());
// Get the invoice id of inserted Account
} else {
// This condition will be executed for failed records
for(Database.Error objErr : sr.getErrors()) {
System.debug('The following error has occurred.');
// Printing error message in Debug log
System.debug(objErr.getStatusCode() + ': ' + objErr.getMessage());
System.debug('Invoice oject field which are affected by the error:'
+ objErr.getFields());
}
}
}
Cập nhật hoạt động
Bây giờ chúng ta hãy xem xét ví dụ trường hợp kinh doanh của chúng ta bằng cách sử dụng các phương pháp cơ sở dữ liệu. Giả sử chúng ta cần cập nhật trường trạng thái của đối tượng Hóa đơn nhưng đồng thời, chúng ta cũng yêu cầu thông tin như trạng thái của bản ghi, id bản ghi không thành công, số lượng thành công, v.v. Điều này không thể thực hiện được bằng cách sử dụng Câu lệnh DML, do đó chúng ta phải sử dụng phương thức Cơ sở dữ liệu để có được tình trạng hoạt động của chúng tôi.
Thí dụ
Chúng tôi sẽ cập nhật trường 'Trạng thái' của Hóa đơn nếu nó ở trạng thái 'Đang chờ xử lý' và ngày tạo là hôm nay.
Đoạn mã được cung cấp bên dưới sẽ giúp cập nhật các bản ghi Hóa đơn bằng phương pháp Database.update. Ngoài ra, hãy tạo bản ghi Hóa đơn trước khi thực thi mã này.
// Code to update the records using the Database methods
List<apex_invoice__c> invoiceList = [SELECT id, Name, APEX_Status__c,
createdDate FROM APEX_Invoice__c WHERE createdDate = today];
// fetch the invoice created today
List<apex_invoice__c> updatedInvoiceList = new List<apex_invoice__c>();
for (APEX_Invoice__c objInvoice: invoiceList) {
if (objInvoice.APEX_Status__c == 'Pending') {
objInvoice.APEX_Status__c = 'Paid';
updatedInvoiceList.add(objInvoice); //Adding records to the list
}
}
Database.SaveResult[] srList = Database.update(updatedInvoiceList, false);
// Database method to update the records in List
// Iterate through each returned result by the method
for (Database.SaveResult sr : srList) {
if (sr.isSuccess()) {
// This condition will be executed for successful records and will fetch
// the ids of successful records
System.debug('Successfully updated Invoice. Invoice ID is : ' + sr.getId());
} else {
// This condition will be executed for failed records
for(Database.Error objErr : sr.getErrors()) {
System.debug('The following error has occurred.');
// Printing error message in Debug log
System.debug(objErr.getStatusCode() + ': ' + objErr.getMessage());
System.debug('Invoice oject field which are affected by the error:'
+ objErr.getFields());
}
}
}
Chúng tôi sẽ chỉ xem xét các thao tác Chèn và Cập nhật trong hướng dẫn này. Các thao tác khác khá giống với các thao tác này và những gì chúng ta đã làm trong chương trước.