Erstellen benutzerspezifischer Erweiterungen

Im Allgemeinen verwenden Sie beim Implementieren eines Projekts benutzerdefinierten Code in AEM und Adobe Campaign. Mit der vorhandenen API können Sie Ihren benutzerdefinierten Code in Adobe Campaign aus AEM oder aus AEM nach Adobe Campaign aufrufen. Dieses Dokument beschreibt, wie das geht.

Voraussetzungen

Sie müssen Folgendes installiert haben:

  • Adobe Experience Manager
  • Adobe Campaign 6.1

Weitere Informationen finden Sie unter Integrieren von AEM mit Adobe Campaign 6.1.

Beispiel 1: AEM nach Adobe Campaign

Die Standardintegration zwischen AEM und Campaign basiert auf JSON und JSSP (JavaScript Server Page). Diese JSSP-Dateien befinden sich in der Campaign-Konsole und beginnen alle mit amc (Adobe Marketing Cloud).

chlimage_1-15

Hinweis

Für dieses Beispiel sehen Sie bitte Geometrixx, die unter Package Share verfügbar ist.

In diesem Beispiel erstellen wir eine neue benutzerdefinierte JSSP-Datei und rufen diese in AEM ab, um das Ergebnis zu erhalten. So können Sie beispielsweise Daten von Adobe Campaign abrufen oder Daten in Adobe Campaign speichern.

  1. In Adobe Campaign, to create a new JSSP file, click the New icon.

  2. Geben Sie den Namen dieser JSSP-Datei ein. In this example, we use cus:custom.jssp (meaning it will be in the cus namespace).

    chlimage_1-16

  3. Fügen Sie den folgenden Code in die jssp-Datei ein:

    <%
    var origin = request.getParameter("origin");
    document.write("Hello from Adobe Campaign, origin : " + origin);
    %>
    
  4. Speichern Sie Ihre Arbeit. Die verbleibende Arbeit erfolgt in AEM.

  5. Erstellen Sie ein einfaches Servlet in AEM, um dieses JSSP aufzurufen. In diesem Beispiel nehmen wir Folgendes an:

    • Sie haben eine funktionierende Verbindung zwischen AEM und Campaign
    • Der Campaign-Cloud-Service ist auf /content/geometrixx-outdoor konfiguriert

    The most important object in this example is the GenericCampaignConnector, which allows you to call (get and post) jssp files on the Adobe Campaign side.

    Es folgt ein kleines Code-Snippet:

    @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. Wie Sie in diesem Beispiel sehen, müssen Sie die Anmeldeinformationen in den Aufruf eingeben. Sie können dies über die getCredentials()-Methode abrufen, bei der Sie eine Seite übergeben, auf der der Campaign-Cloud-Dienst konfiguriert ist.

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

Der vollständige Code lautet wie folgt:

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;
  
 }

}

Beispiel 2: Adobe Campaign nach AEM

AEM bietet betriebsbereite APIs zum Abrufen der Objekte, die in der siteadmin-Exploreransicht verfügbar sind.

chlimage_1-17

Hinweis

Für dieses Beispiel sehen Sie bitte Geometrixx, die unter Package Share verfügbar ist.

Für jeden Knoten im Explorer gibt es eine API, die mit ihm verknüpft ist. Beispiel:

ist die API:

Das Ende der URL .1.json kann durch .2.json, .3.json ersetzt werden, je nachdem wie viele Unterebenen Sie erhalten möchten. Um alle zu erhalten, kann das Schlüsselwort infinity verwendet werden:

Um die API zu nutzen, müssen wir wissen, dass AEM standardmäßig die Standardauthentifizierung verwendet.

Eine JS-Bibliothek mit dem Namen amcIntegration.js ist in 6.1.1 (Build 8624 und höher) verfügbar und implementiert diese Logik unter mehreren anderen.

AEM-API-Aufruf

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;

Auf dieser Seite