Cara Menggunakan Basis Data. Stateful Dalam Batch Apex Di Salesforce

Diterbitkan: 2023-11-21

Pertama, kita harus memahami bahwa jika kita ingin menggunakan Batch Apex, kita harus menulis Kelas Apex yang mengimplementasikan antarmuka Database yang disediakan Salesforce. Dapat di-batch dan kemudian memanggil kelas secara terprogram. Untuk memantau atau menghentikan eksekusi pekerjaan Apex batch, dari Penyiapan, masukkan Pekerjaan Apex di kotak Temukan Cepat, lalu pilih Pekerjaan Apex.

Pada artikel ini, kita mempelajari fitur-fitur canggih dari Database. Stateful di Batch Apex. Memahami Basis Data. Stateful sangat penting untuk mempertahankan status di seluruh eksekusi pekerjaan batch, sehingga memungkinkan pengembang untuk mempertahankan variabel instan dan membuat proses batch yang lebih canggih dan peka terhadap status.

Sintaks untuk Batch:

 kelas global BatchName mengimplementasikan Database.Batchable{}

Metode Kelas Batch:

 global (Database.QueryLocator | Iterable) mulai (Database.BatchableContext bc) {
 //Di sini kita akan menambahkan query dan mengembalikan hasilnya ke metode eksekusi
}

eksekusi kekosongan global (Database.BatchableContext BC, daftar<P>){
 //Logika harus ada di sini
}

kekosongan global selesai (Database.BatchableContext BC){
 //setelah memproses semua batch, metode ini akan dipanggil. Kita dapat menulis kode apa pun di dalamnya. Seperti jika ingin mengirim email ke semua record yang dibuat atau diperbarui dalam metode eksekusi.
}

Baca Juga: Bagaimana Cara Membuat Jenis Laporan Kustom di Salesforce?

Menerapkan Antarmuka Database.Batchable

Contoh:

 kelas global BatchAccountUpdate mengimplementasikan Database.Batchable{
    String query = 'Pilih Nama dari Akun WHERE Nama! = null AND (Nama = \'Perusahaan Virendra\' ATAU Nama = \'Virendra Sharma\') ';
    global Database.QueryLocator mulai (Database.BatchableContext bc) {
        // mengumpulkan kumpulan record atau objek yang akan diteruskan untuk dieksekusi
        return Database.getQueryLocator(kueri);
    }
    
    eksekusi kekosongan global (Database.BatchableContext bc, Daftar catatan) {
        // memproses setiap kumpulan rekaman
        untuk (Akun akun : catatan){
            acc.Name = acc.Name + 'Diperbarui';
        }
        memperbarui catatan;
    }
    
    kekosongan global selesai (Database.BatchableContext bc){
        // menjalankan operasi pasca-pemrosesan apa pun, Memanggil kelas batch.
        BatchUpdateAccountRelatedContacts b = BatchUpdateAccountRelatedContacts() baru;
        Database.executeBatch(b, 200);
    }    
}
database berstatus

Basis Data.Stateful

Kelas contoh berikut menemukan semua catatan akun yang diteruskan oleh metode start() menggunakan QueryLocator dan memperbarui kontak terkait dengan alamat surat akun mereka. Terakhir, ia mengirimkan email berisi hasil pekerjaan massal dan, karena kita menggunakan Database.Stateful untuk melacak status, jumlah catatan diperbarui.

kode stateful basis data
kode stateful basis data

Contoh:

mempekerjakan pengembang tenaga penjualan

Basis Data.AllowsCallout

Database.AllowsCallout di Batch membantu mengintegrasikan Salesforce dengan server eksternal. Untuk menggunakan callout di batch Apex, kita harus menggunakan antarmuka Database.AllowsCallouts dalam definisi kelas kelas batch.

Sintaksis:

 kelas global SearchAndReplace mengimplementasikan Database.Batchable, Database.AllowsCallouts{}

Contoh:
Di sini, saya mengintegrasikan objek Opportunity dengan Razorsync.com
/*
Dapatkan permintaan layanan dari Razorsync dan perbarui ke tenaga penjualan
*/

 kelas global Batch_SR_RazorSyncAPI mengimplementasikan Database.Batchable, Database.AllowsCallouts{
    global Database.QueryLocator mulai (Database.BatchableContext BC){
        String query = 'PILIH Id, Razorsync_Service_Request_Id__c DARI Peluang DIMANA Razorsync_Service_Request_Id__c != null DAN Razorsync_Job_Status__c != \'Pekerjaan Selesai\' DAN RazorSync_Status__c = \'Sukses\'';
        return Database.getQueryLocator(kueri);
    }
   
    eksekusi kekosongan global (Database.BatchableContext BC, Cakupan daftar){
        Status Tali;
        for (Peluang s : cakupan){
            //dapatkan Permintaan Layanan
            Sistem.debug(s.Id);
            Http http1 = Http baru();
            HttpRequest request1 = HttpRequest baru();
            request1.setEndpoint('https://DomainName.0.razorsync.com/ApiService.svc/ServiceRequest/'+ s.Razorsync_Service_Request_Id__c);
            request1.setMethod('DAPATKAN');
            request1.setHeader('Jenis Konten', 'aplikasi/json');
            request1.setHeader('Host', 'NamaDomain.0.razorsync.com');
            request1.setHeader('Panjang Konten', '0');
            request1.setHeader('Koneksi', 'Tetap Hidup');
            request1.setHeader('NamaServer', 'NamaServerDomain');
            request1.setHeader('Token', 'XXXXXXXXXXXXXXXXXXXXXXX');
            
            HttpResponse respon1 = http1.kirim(permintaan1);
            
            if(response1.getStatusCode() == 200) {
                Status;
                Pengurai JSONParser = JSON.createParser(response1.getBody());
                while(parser.nextToken() != null) {
                    if( (parser.getCurrentToken() == JSONToken.FIELD_NAME) && (parser.getText() == 'StatusId') || Test.isRunningTest()) {
                        parser.nextToken();
                        StatusId = parser.getText();
                    }
                }
                Sistem.debug(StatusId);
                if(StatusId == String.valueOf(1) || Tes.isRunningTest()){
                    s.Razorsync_Job_Status__c = 'Pekerjaan Selesai';
                    s.StageName = 'Kemenangan Tertutup';
                }kalau tidak{
                    s.Razorsync_Job_Status__c = 'Bekerja';
                }
            }
        }
        cakupan pembaruan;
    }
    kekosongan global selesai (Database.BatchableContext BC){
    }
}

Baca Juga: Manfaat Salesforce Commerce Cloud dan Cara Memanggil Arus Dari Apex Di Salesforce

Kesimpulan

Menggunakan Database.Stateful di Batch Apex dalam Salesforce memungkinkan untuk mempertahankan status di berbagai metode eksekusi dalam pekerjaan batch. Hal ini penting untuk skenario yang memerlukan pemrosesan data yang kompleks, dan status harus dipertahankan di antara kumpulan batch.

Dengan menerapkan Database.Stateful , pengembang dapat memastikan konsistensi data dan mengelola kumpulan data besar secara efektif. Namun, penting untuk menggunakan fitur ini dengan bijaksana untuk menghindari konsumsi memori yang berlebihan dan potensi masalah kinerja.

Praktik terbaiknya mencakup menjaga variabel status tetap minimal dan berfokus pada data penting, sehingga menjadikan Database.Stateful alat yang ampuh untuk pemrosesan batch yang kompleks dan bergantung pada status di Salesforce.

Untuk bantuan lebih lanjut dalam proyek tenaga penjualan, pekerjakan kami sebagai konsultan tenaga penjualan Anda dan dapatkan manfaatnya.