Creazione di estensioni personalizzate creating-custom-extensions
In genere, quando implementi un progetto, hai un codice personalizzato sia in AEM che in Adobe Campaign. Con l’utilizzo dell’API esistente, puoi richiamare il codice personalizzato in Adobe Campaign dall’AEM o dall’AEM ad Adobe Campaign. Questo documento descrive come farlo.
Prerequisiti prerequisites
Devi avere installato quanto segue:
- Adobe Experience Manager
- Adobe Campaign 6.1
Per ulteriori informazioni, vedere Integrazione dell'AEM con Adobe Campaign 6.1.
Esempio 1: da AEM ad Adobe Campaign example-aem-to-adobe-campaign
L’integrazione standard tra AEM e Campaign si basa su JSON e JSSP (JavaScript Server Page). Questi file JSSP si trovano nella console Campaign e iniziano tutti con aec (Adobe Experience Cloud).
In questo esempio, è stato creato un nuovo file JSSP personalizzato e lo chiama dal lato AEM per recuperare il risultato. Può essere utilizzato, ad esempio, per recuperare dati da Adobe Campaign o per salvarli in Adobe Campaign.
-
In Adobe Campaign, per creare un file JSSP, fai clic sull'icona Nuovo.
-
Immetti il nome di questo file JSSP. In questo esempio, viene utilizzato cus:custom.jssp (ovvero è incluso nello spazio dei nomi cus).
-
Inserisci il seguente codice nel file jssp:
code language-none <% var origin = request.getParameter("origin"); document.write("Hello from Adobe Campaign, origin : " + origin); %>
-
Salvare i dati. Il lavoro rimanente è svolto dall'AEM.
-
Crea un semplice servlet sul lato AEM che puoi chiamare JSSP. In questo esempio, puoi assumere quanto segue:
- È attiva la connessione tra AEM e Campaign
- Il servizio cloud di Campaign è configurato su /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.
Ecco un piccolo frammento di codice:
code language-none @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();
-
In questo esempio, devi passare le credenziali nella chiamata di. Puoi ottenerli tramite il metodo getCredentials() in cui passi in una pagina in cui è configurato il servizio cloud Campaign.
code language-xml // 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: da Adobe Campaign a AEM example-adobe-campaign-to-aem
AEM offre API pronte all’uso per recuperare gli oggetti disponibili in qualsiasi punto della vista di SiteAdmin Explorer.
Per ogni nodo dell’Explorer è presente un’API ad esso collegata. 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 sottolivelli che si è interessati a ottenere. Per ottenerli tutti è possibile utilizzare la parola chiave infinity:
Per utilizzare l’API, l’AEM utilizza per impostazione predefinita l’autenticazione di base.
Una libreria JS denominata amcIntegration.js è disponibile nella versione 6.1.1 (build 8624 e successive) che implementa tale logica tra diverse altre.
Chiamata API AEM aem-api-call
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;