Aangepaste extensies maken

Over het algemeen wanneer u een project implementeert, hebt u aangepaste code in zowel AEM als Adobe Campaign. Met het gebruik van de bestaande API kunt u uw aangepaste code in Adobe Campaign aanroepen van AEM of van AEM naar Adobe Campaign. In dit document wordt beschreven hoe u dat doet.

Vereisten

U moet het volgende installeren:

  • Adobe Experience Manager
  • Adobe Campaign 6.1

Zie AEM integreren met Adobe Campaign 6.1 voor meer informatie.

Voorbeeld 1: AEM aan Adobe Campaign

De standaardintegratie tussen AEM en Campagne is gebaseerd op JSON en JSSP (JavaScript Server Page). Deze JSSP dossiers kunnen in de console van de Campagne worden gevonden, en allen beginnen met amc (Adobe Marketing Cloud).

chlimage_1-15

OPMERKING

Voor dit voorbeeld, gelieve te zien Geometrixx, die bij het Aandeel van het Pakket beschikbaar is.

In dit voorbeeld maken we een nieuw aangepast JSSP-bestand en roepen we dat van de AEM aan om het resultaat op te halen. Dit kan bijvoorbeeld worden gebruikt om gegevens op te halen uit Adobe Campaign of om gegevens op te slaan in Adobe Campaign.

  1. Als u in Adobe Campaign een nieuw JSSP-bestand wilt maken, klikt u op het pictogram Nieuw.

  2. Voer de naam van dit JSSP-bestand in. In dit voorbeeld gebruiken we cus:custom.jssp (wat betekent dat deze zich in de naamruimte cus bevindt).

    chlimage_1-16

  3. Plaats de volgende code in het jssp-bestand:

    <%
    var origin = request.getParameter("origin");
    document.write("Hello from Adobe Campaign, origin : " + origin);
    %>
    
  4. Sla uw werk op. Het resterende werk is in AEM.

  5. Creeer een eenvoudige servlet op de AEM kant om dit JSSP te roepen. In dit voorbeeld gaan we uit van het volgende:

    • U hebt de verbinding tussen AEM en Campagne
    • De campagnecloudservice is geconfigureerd op /content/geometrixx-outdoor

    Het belangrijkste object in dit voorbeeld is de GenericCampaignConnector, waarmee u jssp-bestanden aan de Adobe Campaign-zijde kunt aanroepen (ophalen en posten).

    Hier volgt een klein codefragment:

    @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. Zoals u in dit voorbeeld ziet, moet u in de geloofsbrieven in de vraag overgaan. U kunt dit bereiken via de methode getCredentials(), waarbij u een pagina doorgeeft waarvoor de Campagnewolkenservice is geconfigureerd.

    // page containing the cloudservice for Adobe Campaign
    Configuration config = campaignConnector.getWebserviceConfig(page.getContentResource().getParent());
    CampaignCredentials credentials = campaignConnector.retrieveCredentials(config);
    

De volledige code ziet er als volgt uit:

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;

 }

}

Voorbeeld 2: Adobe Campaign naar AEM

AEM biedt API's van de box uit om de objecten op te halen die overal beschikbaar zijn in de browser-weergave van sitebeheer.

chlimage_1-17

OPMERKING

Voor dit voorbeeld, gelieve te zien Geometrixx, die bij het Aandeel van het Pakket beschikbaar is.

Voor elk knooppunt in de verkenner is er een API die eraan is gekoppeld. Bijvoorbeeld voor het knooppunt:

de API is:

Het einde van de URL .1.json kan worden vervangen door .2.json, .3.json, afhankelijk van het aantal subniveaus dat u wilt ophalen Om alle subniveaus te verkrijgen, kunt u het trefwoord infinity gebruiken:

Nu moeten we weten dat AEM standaard basisverificatie gebruikt om de API te gebruiken.

Een bibliotheek JS die amcIntegration.js wordt genoemd is beschikbaar in 6.1.1 (bouwstijl 8624 en hoger) die die logica onder verscheidene andere degenen uitvoert.

AEM API-aanroep

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;

Op deze pagina