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 unserCampaign
hinzugefügt wurden, und das wird durch unsere VariableSF_CAMPAIGN_ID
definiert. Außerdem müssen wir festlegen, auf welches Event wir diese Leads schieben wollen, und das wird durch unsere VariableIN_EVENT_ID
definiert. In diesem Beispiel haben wir die folgenden Werte:
SF_CAMPAIGN_ID = '7015G000000SZIUQA4'
Das ist unsereCampaign
in Salesforce;IN_EVENT_ID = '69442441'
Das ist unserEvent
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