Apex-database-methods
提供:Dev Guides
Apex-データベースメソッド
データベースクラスメソッドは、挿入、更新などのDMLステートメントよりも柔軟なDMLステートメントを操作する別の方法です。
データベースメソッドとDMLステートメントの違い
DML Statements | Database Methods |
---|---|
Partial Update is not allowed. For example, if you have 20 records in list, then either all the records will be updated or none. | Partial update is allowed. You can specify the Parameter in Database method as true or false, true to allow the partial update and false for not allowing the same. |
You cannot get the list of success and failed records. | You can get the list of success and failed records as we have seen in the example. |
Example − insert listName | Example − Database.insert(listName, False), where false indicate that partial update is not allowed. |
挿入操作
データベースメソッドを介して新しいレコードを挿入することも非常に簡単で柔軟です。 DMLステートメントを使用して新しいレコードを挿入した前のシナリオを考えてみましょう。 データベースメソッドを使用して同じものを挿入します。
例
//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());
}
}
}
更新操作
データベースメソッドを使用したビジネスケースの例を考えてみましょう。 Invoiceオブジェクトのステータスフィールドを更新する必要があると仮定しますが、同時に、レコードのステータス、失敗したレコードID、成功カウントなどの情報も必要です。 DMLステートメントを使用してこれを行うことはできないため、データベースメソッドを使用して操作のステータスを取得する必要があります。
例
請求書のステータスが「保留中」で、作成日が今日の場合、請求書の「ステータス」フィールドを更新します。
以下に示すコードは、Database.updateメソッドを使用して請求書レコードを更新するのに役立ちます。 また、このコードを実行する前に請求書レコードを作成します。
//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());
}
}
}
このチュートリアルでは、挿入と更新の操作のみを見ていきます。 他の操作は、これらの操作と最後の章で行った操作に非常に似ています。