Integración de Salesforce: activadores de Apex personalizados

Si no desea utilizar nuestro conector de Salesforce o necesita configurar una integración rápida sin pasar por su equipo de TI, puede configurar Triggers de Apex personalizados para enviar nuevas entradas de CampaignMember a su evento InEvent.

Para realizar esta tarea, hemos creado dos clases de Apex:

PushLeadToInEventTrigger.apxt

Este es un activador de Apex que se ejecuta cada vez que se agrega una nueva entrada de CampaignMember a su cuenta de Salesforce. Dado que el disparador es universal, necesitamos filtrar solo las entradas que se agregan a nuestra Campaign, y eso está definido por nuestra variable SF_CAMPAIGN_ID También necesitamos definir a qué evento queremos enviar estos clientes potenciales, y eso está definido por nuestra variable IN_EVENT_ID En este ejemplo tenemos los siguientes valores:

  • SF_CAMPAIGN_ID = '7015G000000SZIUQA4' esta es nuestra Campaign en Salesforce;
  • IN_EVENT_ID = '69442441' este es nuestro Event en InEvent;

Aquí está el código fuente completo para este disparador:

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

Esta clase tiene el método future que empuja el contenido recibido de nuestro Apex Trigger a InEvent. Solo necesita realizar cambios en él si desea agregar campos adicionales o si desea sincronizar con un punto final diferente en InEvent.

Este código crea un nuevo participante en InEvent, por lo que consumirá un crédito de registro por envío.

Aquí está el código fuente completo para esta clase:

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


¿Cómo lo hicimos?