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());
      }
   }
}

このチュートリアルでは、挿入と更新の操作のみを見ていきます。 他の操作は、これらの操作と最後の章で行った操作に非常に似ています。