Creazione di estensioni personalizzate

In genere, quando implementate un progetto, il codice personalizzato è disponibile sia in Adobe Campaign AEM che . Con l'utilizzo dell'API esistente, potete chiamare il codice personalizzato in Adobe Campaign da AEM o da AEM a Adobe Campaign. Questo documento descrive come farlo.

Prerequisiti

Dovete disporre dei seguenti elementi installati:

  • Adobe Experience Manager
  • Adobe Campaign 6.1

See Integrating AEM with Adobe Campaign 6.1 for more information.

Esempio 1: AEM a Adobe Campaign

L'integrazione standard tra AEM e Campaign è basata su JSON e JSSP (pagina JavaScript Server). Questi file JSSP si trovano nella console Campaign e iniziano tutti con amc (Adobe Marketing Cloud).

chlimage_1-15

Nota

Per questo esempio, consultate Geometrixx, disponibile da Package Share.

In questo esempio, creeremo un nuovo file JSSP personalizzato e lo chiameremo dal lato AEM per recuperare il risultato. Può essere utilizzato, ad esempio, per recuperare dati da Adobe Campaign o per salvare dati in Adobe Campaign.

  1. In Adobe Campaign, per creare un nuovo file JSSP, fate clic sull'icona Nuovo .

  2. Immettere il nome del file JSSP. In questo esempio, utilizzeremo cus:custom.jssp (ovvero nello spazio dei nomi cus ).

    chlimage_1-16

  3. Inserite il seguente codice nel file jssp:

    <%
    var origin = request.getParameter("origin");
    document.write("Hello from Adobe Campaign, origin : " + origin);
    %>
    
  4. Salvate il lavoro. Il lavoro rimanente è in AEM.

  5. Create un servlet semplice sul lato AEM per chiamare questo JSSP. In questo esempio, si presuppone quanto segue:

    • La connessione funziona tra AEM e Campaign
    • Il servizio cloud della campagna è configurato in modalità /content/geometrixx-outdoors

    L'oggetto più importante in questo esempio è GenericCampaignConnector, che consente di chiamare (ottenere e pubblicare) i file jssp sul lato Adobe Campaign .

    Segue un piccolo frammento di codice:

    @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. Come illustrato in questo esempio, è necessario trasmettere le credenziali alla chiamata. Potete ottenere questo risultato tramite il metodo getCredentials(), in cui passate una pagina con il servizio cloud Campaign configurato.

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

Il codice completo è il seguente:

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

}

Esempio 2: Adobe Campaign a AEM

AEM offre delle API pronte all'uso per recuperare gli oggetti disponibili in qualsiasi punto della visualizzazione di Siteadmin Explorer.

chlimage_1-17

Nota

Per questo esempio, consultate Geometrixx, disponibile da Package Share.

Per ciascun nodo nell'elenco di cartelle è presente un'API collegata ad essa. Ad esempio per il nodo :

l'API è:

La fine dell'URL .1.json può essere sostituita da .2.json, .3.json, in base al numero di livelli secondari che si è interessati a ottenere Per ottenere tutti loro la parola chiave infinity può essere utilizzata:

Ora, per utilizzare l'API, dobbiamo sapere che AEM, per impostazione predefinita, utilizza l'autenticazione di base.

Una libreria JS denominata amcIntegration.js è disponibile in 6.1.1 (build 8624 e versioni successive) che implementa tale logica tra diverse altre.

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

In questa pagina