Vous consultez actuellement l'aide de la version:

Généralement, lorsque vous implémentez un projet, vous disposez d’un code personnalisé dans AEM et Adobe Campaign. Grâce à l’API existante, vous pouvez appeler le code personnalisé dans Adobe Campaign à partir d’AEM ou depuis AEM vers Adobe Campaign. Ce document explique comment procéder.

Conditions préalables

Vous devez avoir installé les éléments suivants :

  • Adobe Experience Manager
  • Adobe Campaign 6.1

Pour plus d’informations, reportez-vous à la section Intégration d’AEM à Adobe Campaign 6.1.

Exemple 1 : AEM vers Adobe Campaign

L’intégration standard entre AEM et Campaign est basée sur JSON et JSSP (JavaScript Server Page). Ces fichiers JSSP, disponibles dans la console Campaign, commencent tous par amc (Adobe Marketing Cloud).

chlimage_1

Remarque :

Pour cet exemple, veuillez consulter Geometrixx, disponible à partir de Partage de modules.

Dans cet exemple, nous créons un fichier JSSP personnalisé et l’appelons du côté AEM pour récupérer le résultat. Il peut être utilisé, par exemple, pour extraire des données d’Adobe Campaign ou pour enregistrer des données dans Adobe Campaign.

  1. Dans Adobe Campaign, pour créer un fichier JSSP, cliquez sur l’icône Nouveau.

    chlimage_1
  2. Entrez le nom de ce fichier JSSP. Dans cet exemple, nous utilisons cus:custom.jssp (ce qui signifie qu’il est dans l’espace de noms cus).

    chlimage_1
  3. Placez le code suivant dans le fichier jssp :

    <%
    var origin = request.getParameter("origin");
    document.write("Hello from Adobe Campaign, origin : " + origin);
    %>
  4. Enregistrez votre travail. Le travail restant se fait dans AEM.

  5. Créez un servlet simple du côté AEM pour appeler ce JSSP. Dans cet exemple, nous supposons ce qui suit :

    • Vous avez établi une connexion entre AEM et Campaign
    • Le service cloud de Campaign est configuré sur /content/geometrixx-outdoors

    L’objet le plus important de cet exemple est GenericCampaignConnector. Il permet d’appeler (get et post) des fichiers jssp du côté Adobe Campaign.

    Voici un petit extrait de code :

    @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. Comme vous le voyez dans cet exemple, vous devez transmettre les informations d’identification dans l’appel. Vous pouvez le faire avec la méthode getCredentials() grâce à laquelle les informations d’identification sont transmises dans une page dont le service cloud Campaign est configuré.

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

Le code complet se présente comme suit :

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

}

Exemple 2 : Adobe Campaign vers AEM

AEM propose des API prêtes à l’emploi pour récupérer les objets disponibles n’importe où dans la vue de l’explorateur siteadmin.

chlimage_1

Remarque :

Pour cet exemple, veuillez consulter Geometrixx, disponible à partir de Partage de modules.

Pour chaque nœud de l’explorateur, une API est liée à celui-ci. Par exemple pour le nœud :

l’API est :

La fin de l’URL 1.json peut être remplacée par .2.json, .3.json, selon le nombre de sous-niveaux que vous souhaitez obtenir. Pour tous les récupérer, utilisez le mot-clé infinity :

Pour utiliser l’API, nous devons savoir qu’AEM utilise l’authentification de base par défaut.

Une bibliothèque JS nommée amcIntegration.js est disponible dans 6.1.1 (build 8624 et supérieur) qui implémente cette logique parmi plusieurs autres.

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

Ce produit est distribué sous licence Creative Commons Attribution - Pas d’utilisation commerciale - Partage à l’identique 3.0 non transposé  Les publications Twitter™ et Facebook ne sont pas couvertes par les dispositions Creative Commons.

Mentions légales   |   Politique de confidentialité en ligne