Show Menu
TÓPICOS×

Criação de extensões personalizadas

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 seu código personalizado no Adobe Campaign do AEM ou do AEM para o Adobe Campaign. Este documento descreve como fazer isso.

Pré-requisitos

É necessário ter o seguinte instalado:
  • Adobe Experience Manager
  • Adobe Campaign 6.1

Exemplo 1: AEM para o Adobe Campaign

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 Campanha e todos começam com amc (Adobe Marketing Cloud).
Neste 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.
  1. No Adobe Campaign, para criar um novo arquivo JSSP, clique no ícone Novo .
  2. Insira o nome desse arquivo JSSP. Neste exemplo, usamos cus:custom.jssp (ou seja, ele estará no namespace cus ).
  3. Coloque o seguinte código dentro do arquivo jssp:
    <%
    var origin = request.getParameter("origin");
    document.write("Hello from Adobe Campaign, origin : " + origin);
    %>
    
    
  4. Salve seu trabalho. O trabalho restante está no AEM.
  5. Crie um servlet simples no lado do AEM para chamar esse JSSP. Neste exemplo, assumimos o seguinte:
    • A conexão entre o AEM e o Campaign está funcionando
    • O serviço de nuvem de campanha está configurado em /content/geometrixx-outdoors
    O objeto mais importante neste exemplo é o GenericCampaignConnector , que permite chamar (obter e publicar) arquivos jssp no lado do Adobe Campaign.
    Este é um trecho de código pequeno:
    @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();
    
    
  6. Como você vê neste exemplo, é necessário passar as credenciais para a chamada. Você pode obtê-la por meio do método getCredentials(), no qual você passa 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;

 }

}

Exemplo 2: Adobe Campaign para o AEM

O AEM oferece APIs prontas para recuperar os objetos disponíveis em qualquer lugar na exibição do explorador siteadmin.
Neste exemplo, consulte Geometrixx , que está disponível em Compartilhamento de pacotes.
Para cada nó no explorador, há uma API vinculada a ele. Por exemplo, para o nó :
a API é:
O final 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 Para obter todos eles, a palavra-chave infinity pode ser usada:
Agora, para consumir a API, precisamos saber que o AEM, por padrão, usa a autenticação básica.
Uma biblioteca JS chamada amcIntegration.js está disponível na versão 6.1.1 (build 8624 e superior) que implementa essa lógica entre vários outros.

Chamada de API AEM

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;