Salesforce-Integration: Benutzerdefinierte Apex-Auslöser

Wenn Sie den Salesforce-Connector nicht verwenden möchten oder eine schnelle Integration ohne die Hilfe Ihres IT-Teams einrichten wollen, können Sie benutzerdefinierte Apex-Auslöser einrichten, um neueCampaignMember Einträge in Ihr InEvent-Event zu übertragen.

Zur Erfüllung dieser Aufgabe haben wir zwei Apex-Klassen erstellt:

PushLeadToInEventTrigger.apxt

Dieser Apex-Trigger wird jedes Mal ausgeführt, wenn ein neuer CampaignMember-Eintrag zu Ihrem Salesforce-Konto hinzugefügt wird. Da dieser Auslöser universell ist, müssen wir nur Einträge filtern, die zu unserCampaignhinzugefügt wurden, und das wird durch unsere VariableSF_CAMPAIGN_IDdefiniert. Außerdem müssen wir festlegen, auf welches Event wir diese Leads schieben wollen, und das wird durch unsere VariableIN_EVENT_IDdefiniert. In diesem Beispiel haben wir die folgenden Werte:

  • SF_CAMPAIGN_ID = '7015G000000SZIUQA4' Das ist unsereCampaign in Salesforce;
  • IN_EVENT_ID = '69442441' Das ist unser Event in InEvent;

Hier finden Sie den vollständigen Quellcode für diesen Auslöser:

trigger PushLeadToInEventTrigger on CampaignMember (after insert) {
// Your settings variables
String SF_CAMPAIGN_ID = '7015G000000SZIUQA4'; // Your Salesforce CampaignId
String IN_EVENT_ID = '69442441'; // Your InEvent eventID

for (CampaignMember cm: Trigger.new) {
// Skip other campaigns
if (cm.CampaignId != SF_CAMPAIGN_ID) continue;

// If you need more fields or custom fields, you can check our API documentation
Map<String, String> body = new Map<String, String>();
body.put('firstName', cm.FirstName);
body.put('lastName', cm.LastName);
body.put('username', cm.Email);
body.put('email', cm.Email);
body.put('password', ''); // leave empty if using block password tool
body.put('role', cm.Title);
body.put('company', cm.CompanyOrAccount);
body.put('telephone', cm.Phone);
body.put('feedbackContent', '[]'); // custom fields would go here (required, even if empty, expects a serialized JSON)

PushLeadToInEvent.push(IN_EVENT_ID, body);
}
}

// MIT License

PushLeadToInEvent.apxc

In dieser Klasse befindet sich die future  Methode, die den Inhalt, der von unserem Apex-Auslöser empfangen wird, an InEvent weiterleitet. Änderungen müssen Sie nur vornehmen, wenn Sie zusätzliche Felder hinzufügen oder mit einem anderen Endpunkt von InEvent synchronisieren möchten.

Da dieser Code einen neuen Teilnehmer auf InEvent anlegt, wird ein Registrierungsguthaben pro Anmeldung verbraucht.

Hier ist der vollständige Quellcode für diese Klasse:

public class PushLeadToInEvent {
@future (callout=true)
public static void push(String eventID, Map<String, String> body) {

// Our HTTP request configuration
Http http = new Http();
HttpRequest request = new HttpRequest();
request.setMethod('POST');
request.setHeader('Content-Type', 'application/x-www-form-urlencoded;charset=UTF-8');

// Our query string builder
Map<String, String> query = new Map<String, String>();
query.put('action', 'form.respondRegistration');
query.put('version', '2');
query.put('eventID', eventID);

String cQuery = '';
for (String key : query.keySet()) {
if (String.isEmpty(cQuery)) {
cQuery += '?' + key + '=' + query.get(key);
} else {
cQuery += '&' + key + '=' + query.get(key);
}
}

String cBody = '';
for (String key : body.keySet()) {
String val = body.get(key);
if (val == null) val = '';
val = EncodingUtil.urlEncode(val, 'UTF-8');

if (String.isEmpty(cBody)) {
cBody += key + '=' + val;
} else {
cBody += '&' + key + '=' + val;
}
}

request.setEndpoint('https://app.inevent.com/api/' + cQuery);
request.setBody(cBody);

HttpResponse response = http.send(request);

System.debug('Calling [POST] ' + 'https://app.inevent.com/api/' + cQuery);
System.debug('Body: ' + cBody);

// Parse the JSON response
if (response.getStatusCode() >= 400) {
System.debug('The status code returned was not expected: ' +
response.getStatusCode() + ' ' + response.getStatus() + ' ' + response.getBody());
} else {
System.debug(response.getBody());
}
}
}

// MIT License


Wie haben wir es gemacht?