Geralmente, ao implementar um projeto, você tem um código personalizado no AEM e no Adobe Campaign. Com o uso da API existente, você pode chamar o código personalizado no Adobe Campaign de AEM ou de AEM para Adobe Campaign. Este documento descreve como fazer isso.
Você precisa ter o seguinte instalado:
Consulte Integração de AEM com o Adobe Campaign 6.1 para obter mais informações.
A integração padrão entre o AEM e o Campaign é baseada em JSON e JSSP (JavaScript Server Page). Esses arquivos JSSP podem ser encontrados no console do Campaign e todos começam com amc (Adobe Marketing Cloud).
Para este exemplo, consulte Geometrixx, que está disponível em Compartilhamento de pacotes.
Neste exemplo, criamos um novo arquivo JSSP personalizado e o chamamos do lado do AEM para recuperar o resultado. Isso pode ser usado, por exemplo, para recuperar dados do Adobe Campaign ou para salvar dados no Adobe Campaign.
No Adobe Campaign, para criar um novo arquivo JSSP, clique no botão Novo ícone .
Insira o nome desse arquivo JSSP. Neste exemplo, usamos cus:custom.jssp (o que significa que estará no cus namespace).
Coloque o seguinte código no arquivo jssp:
<%
var origin = request.getParameter("origin");
document.write("Hello from Adobe Campaign, origin : " + origin);
%>
Salve o trabalho. O trabalho restante está em AEM.
Crie um servlet simples no AEM para chamar este JSSP. Neste exemplo, assumimos o seguinte:
O objeto mais importante neste exemplo é o GenericCampaignConnector, que permite chamar (obter e publicar) arquivos jssp no lado do Adobe Campaign.
Este é um pequeno trecho de código:
@Reference
private GenericCampaignConnector campaignConnector;
...
Map<String, String> params = new HashMap<String, String>();
params.put("origin", "AEM");
CallResults results = campaignConnector.callGeneric("/jssp/cus/custom.jssp", params, credentials);
return results.bodyAsString();
Como você vê neste exemplo, é necessário transmitir as credenciais na chamada do . Você pode obter isso por meio do método getCredentials() , onde é passado uma página que tem o serviço de nuvem do Campaign configurado.
// page containing the cloudservice for Adobe Campaign
Configuration config = campaignConnector.getWebserviceConfig(page.getContentResource().getParent());
CampaignCredentials credentials = campaignConnector.retrieveCredentials(config);
O código completo é o seguinte:
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletException;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.sling.SlingServlet;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.servlets.SlingSafeMethodsServlet;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.day.cq.mcm.campaign.CallResults;
import com.day.cq.mcm.campaign.CampaignCredentials;
import com.day.cq.mcm.campaign.GenericCampaignConnector;
import com.day.cq.wcm.api.Page;
import com.day.cq.wcm.api.PageManager;
import com.day.cq.wcm.api.PageManagerFactory;
import com.day.cq.wcm.webservicesupport.Configuration;
@SlingServlet(paths="/bin/campaign", methods="GET")
public class CustomServlet extends SlingSafeMethodsServlet {
private final Logger log = LoggerFactory.getLogger(this.getClass());
@Reference
private GenericCampaignConnector campaignConnector;
@Reference
private PageManagerFactory pageManagerFactory;
@Override
protected void doGet(SlingHttpServletRequest request,
SlingHttpServletResponse response) throws ServletException,
IOException {
PageManager pm = pageManagerFactory.getPageManager(request.getResourceResolver());
Page page = pm.getPage("/content/geometrixx-outdoors");
String result = null;
if ( page != null) {
result = callCustomFunction(page);
}
if ( result != null ) {
PrintWriter pw = response.getWriter();
pw.print(result);
}
}
private String callCustomFunction(Page page ) {
try {
Configuration config = campaignConnector.getWebserviceConfig(page.getContentResource().getParent());
CampaignCredentials credentials = campaignConnector.retrieveCredentials(config);
Map<String, String> params = new HashMap<String, String>();
params.put("origin", "AEM");
CallResults results = campaignConnector.callGeneric("/jssp/cus/custom.jssp", params, credentials);
return results.bodyAsString();
} catch (Exception e ) {
log.error("Something went wrong during the connection", e);
}
return null;
}
}
AEM oferece APIs prontas para recuperar os objetos disponíveis em qualquer lugar na visualização do siteadmin explorer.
Para este exemplo, consulte Geometrixx, que está disponível em Compartilhamento de pacotes.
Para cada nó no explorador, há uma API vinculada a ela. Por exemplo, para o nó :
a API é:
O fim do URL .1.json pode ser substituído por .2.json, .3.json, de acordo com o número de subníveis que você está interessado em obter a palavra-chave para todos eles infinito pode ser usada:
Agora, para consumir a API, devemos saber que o AEM, por padrão, usa autenticação básica.
Uma biblioteca JS chamada de amcIntegration.js O está disponível na versão 6.1.1 (build 8624 e superior) que implementa essa lógica entre vários outros.
loadLibrary("nms:amcIntegration.js");
var cmsAccountId = sqlGetInt("select iExtAccountId from NmsExtAccount where sName=$(sz)","aemInstance")
var cmsAccount = nms.extAccount.load(String(cmsAccountId));
var cmsServer = cmsAccount.server;
var request = new HttpClientRequest(cmsServer+"/content/campaigns/geometrixx.infinity.json")
aemAddBasicAuthentication(cmsAccount, request);
request.method = "GET"
request.header["Content-Type"] = "application/json; charset=UTF-8";
request.execute();
var response = request.response;