icon picker
C. Outbound (Apex REST Callouts)

by
@Muhammad Bustamil Adam
image.png

C.1. Step – Step for Create Callout Method Integration Based on Triggers


1. Buat Class Apex untuk Mendapatkan Access Token

Buka Visual Studio Code Atau Developer Console di Salesforce org
Buat Apex Class baru yang akan mengirim HTTP Request ke token endpoint Salesforce dan mendapatkan Access Token.

Gunakan kode berikut:
public class REST_CallOut_SalesforceOAuth {

// Metode untuk mendapatkan Access Token dari org tujuan
public static String getAccessToken() {
// URL Endpoint untuk OAuth 2.0 token
String tokenEndpoint = 'https://login.salesforce.com/services/oauth2/token';
// Setup HTTP Request
HttpRequest req = new HttpRequest();
req.setEndpoint(tokenEndpoint);
req.setMethod('POST');
req.setHeader('Content-Type', 'application/x-www-form-urlencoded');
// OAuth 2.0 credentials dari Connected App di org tujuan
String clientId = 'YOUR_CONSUMER_KEY'; // Ganti dengan Client ID (Consumer Key)
String clientSecret = 'YOUR_CONSUMER_SECRET'; // Ganti dengan Client Secret (Consumer Secret)
String username = 'YOUR_ORG_TUJUAN_USERNAME'; // Ganti dengan username org tujuan
String password = 'YOUR_ORG_TUJUAN_PASSWORD_AND_SECURITY_TOKEN'; // Gabungan password + security token dari org tujuan
// Set body untuk request, sesuai dengan format OAuth 2.0
String body = 'grant_type=password'
+ '&client_id=' + EncodingUtil.urlEncode(clientId, 'UTF-8')
+ '&client_secret=' + EncodingUtil.urlEncode(clientSecret, 'UTF-8')
+ '&username=' + EncodingUtil.urlEncode(username, 'UTF-8')
+ '&password=' + EncodingUtil.urlEncode(password, 'UTF-8');
req.setBody(body);
// Eksekusi HTTP Request
Http http = new Http();
HttpResponse res = http.send(req);
// Jika responsenya sukses (status 200), ambil token dari response body
if (res.getStatusCode() == 200) {
// Parsing JSON response untuk mendapatkan access token
Map<String, Object> responseBody = (Map<String, Object>) JSON.deserializeUntyped(res.getBody());
String accessToken = (String) responseBody.get('access_token');
// Log token untuk debugging (jangan gunakan ini di produksi)
System.debug('Access Token: ' + accessToken);
// Kembalikan access token
return accessToken;
} else {
// Log jika terjadi kesalahan dan return null
System.debug('Error Response: ' + res.getBody());
return null;
}
}
}


info

Credentials


CONSUMER_KEY : 3MVG9VMBZCsTL9hna9QaiPuFBAPG4StUl9CkTR0xdSvQBoHmThkUn_UhnTB0k3qZQxcupYINLjheLWe5SU1b0
CONSUMER_SECRET : BB1E7ECC5ACDEA2D7DFD680ACDCECA2360C8AD8E59E2880AC2CBB58041AD7176
USER_NAME : devorg1@saasten.com
PASSWORD : demo1234
SECURITY TOKEN : 7cZapUnBJBo0di1buBHlNvxp

2. Buat Class Apex untuk Melakukan Callout ke Org Tujuan

Setelah mendapatkan token, kita akan menggunakan token tersebut untuk memanggil Salesforce REST API di org tujuan dan mengirimkan data.
Buat Apex Class baru untuk melakukan HTTP callout ke org tujuan menggunakan token yang telah didapatkan.

Berikut Contoh Codingannya:
public class REST_Callout_Contact {
@future(callout=true)
public static void InsertContactDataToOrg2(Id contactId) {
// Ambil data Contact yang akan dikirim
Contact con = [SELECT Id, FirstName, LastName, Email FROM Contact WHERE Id = :contactId];
// Dapatkan Access Token menggunakan metode yang dibuat sebelumnya
String accessToken = REST_CallOut_SalesforceOAuth.getAccessToken();
if (accessToken == null) {
System.debug('Failed to get access token');
return;
}
String EndPoint= 'https://saastentechnologies65-dev-ed.develop.my.salesforce.com';
// URL Endpoint Salesforce REST API di org tujuan
String URLendpoint = EndPoint + '/services/data/v54.0/sobjects/Contact/';

// Siapkan HTTP Request
HttpRequest req = new HttpRequest();
req.setEndpoint(URLendpoint);
req.setMethod('POST');
req.setHeader('Authorization', 'Bearer ' + accessToken);
req.setHeader('Content-Type', 'application/json');
// Format data Contact ke dalam JSON
String jsonBody = '{"FirstName": "' + con.FirstName + '", "LastName": "' + con.LastName + '", "Email": "' + con.Email + '"}';
req.setBody(jsonBody);
// Eksekusi HTTP Request
Http http = new Http();
HttpResponse res = http.send(req);
// Log hasil response
System.debug('Response Status: ' + res.getStatus());
System.debug('Response Body: ' + res.getBody());
}



}


Buat trigger yang akan memanggil class Apex di atas setiap kali ada perubahan (insert atau update) pada object Contact.

Berikut Contoh Codingannya
trigger ContactTrigger on Contact (after insert) {
for (Contact con : Trigger.new) {
// Panggil metode untuk mengirim data ke org tujuan
REST_Callout_Contact.sendContactDataToOrg2(con.Id);
}
}



3. Testing dan Verifikasi

Buat Contact Baru di Org Sumber:
Buka Salesforce org sumber dan buat Contact baru.
Salesforce org sumber akan melakukan HTTP callout ke org tujuan untuk mengirim data kontak.
Periksa Org Tujuan:
Masuk ke Salesforce org tujuan.
Buka Object Manager untuk Contact dan periksa apakah data kontak yang baru telah ditambahkan.
Lihat Debug Log:
Buka Developer Console di Salesforce org sumber dan lihat Debug Log untuk memastikan bahwa request dan response berjalan dengan benar.


C.2. Step – Step for Create Callout Method Integration Based on Button Using Invocable Metode


1. Membuat Invocable Method untuk Pengiriman Data Contact

Contoh Kode:

public with sharing class ContactIntegrationService {
@InvocableMethod(label='Send Contact Data')
public static List<String> sendContactData(List<Id> contactIds) {
List<String> resultMessages = new List<String>();
String accessToken = REST_CallOut_SalesforceOAuth.getAccessToken() //Mendapatkan Access Token

for (Id contactId : contactIds) {
try {
Contact contact = [SELECT Id, FirstName, LastName, Email FROM Contact WHERE Id = :contactId LIMIT 1];

HttpRequest req = new HttpRequest();
req.setEndpoint('https://target-org.my.salesforce.com/services/data/v52.0/sobjects/Contact/');
req.setMethod('POST');
req.setHeader('Authorization', 'Bearer ' + accessToken);
req.setHeader('Content-Type', 'application/json');
Map<String, Object> contactData = new Map<String, Object>();
contactData.put('FirstName', contact.FirstName);
contactData.put('LastName', contact.LastName);
contactData.put('Email', contact.Email);
req.setBody(JSON.serialize(contactData));

Http http = new Http();
HttpResponse res = http.send(req);

if (res.getStatusCode() == 201) {
resultMessages.add('Contact ' + contact.FirstName + ' ' + contact.LastName + ' berhasil dikirim!');
} else {
resultMessages.add('Gagal mengirim Contact ' + contact.FirstName + ': ' + res.getBody());
}
} catch (Exception e) {
resultMessages.add('Error mengirim Contact Id: ' + contactId + '. Pesan error: ' + e.getMessage());
}
}
return resultMessages;
}

}


megaphone
Poin Penting:
Method ini mengirim data Contact ke Salesforce Org target.
Pesan status akan diberikan untuk setiap Contact yang berhasil atau gagal dikirim.

2. Membuat Button untuk Memanggil Invocable Method

Langkah-langkah Membuat Button:

Buat Flow di Salesforce:
Buat Flow yang memanggil Apex Class dengan Invocable Method sendContactData.
Buat Custom Button:
Gunakan tombol custom untuk memicu Flow atau langsung memanggil metode Apex dari UI.
Want to print your doc?
This is not the way.
Try clicking the ⋯ next to your doc name or using a keyboard shortcut (
CtrlP
) instead.