Apex - Métodos de banco de dados
Os métodos de classe de banco de dados são outra maneira de trabalhar com instruções DML, que são mais flexíveis do que as instruções DML, como inserir, atualizar, etc.
Diferenças entre métodos de banco de dados e instruções DML
Declarações DML | Métodos de banco de dados |
---|---|
A atualização parcial não é permitida. Por exemplo, se você tiver 20 registros na lista, todos os registros serão atualizados ou nenhum. | A atualização parcial é permitida. Você pode especificar o método Parâmetro no Banco de Dados como verdadeiro ou falso, verdadeiro para permitir a atualização parcial e falso para não permitir a mesma. |
Você não pode obter a lista de registros de sucesso e falha. | Você pode obter a lista de registros de sucesso e falha como vimos no exemplo. |
Example - inserir listName | Example - Database.insert (listName, False), onde false indica que a atualização parcial não é permitida. |
Operação de inserção
A inserção de novos registros por meio de métodos de banco de dados também é bastante simples e flexível. Vamos considerar o cenário anterior em que inserimos novos registros usando as instruções DML. Estaremos inserindo o mesmo usando métodos de banco de dados.
Exemplo
// 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());
}
}
}
Operação de atualização
Vamos agora considerar nosso exemplo de caso de negócios usando os métodos de banco de dados. Suponha que precisemos atualizar o campo de status do objeto Invoice, mas, ao mesmo tempo, também exigimos informações como status de registros, ids de registro com falha, contagem de sucesso, etc. Isso não é possível usando declarações DML, portanto, devemos usar métodos de banco de dados para obter o status de nossa operação.
Exemplo
Estaremos atualizando o campo 'Status' da Fatura se ela estiver com o status 'Pendente' e a data de criação for hoje.
O código fornecido a seguir ajudará na atualização dos registros de fatura usando o método Database.update. Além disso, crie um registro de fatura antes de executar este código.
// 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());
}
}
}
Estaremos examinando apenas as operações de Inserir e Atualizar neste tutorial. As outras operações são bastante semelhantes a essas operações e ao que fizemos no capítulo anterior.