Aangepaste extensies maken creating-custom-extensions
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 prerequisites
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 naar Adobe Campaign example-aem-to-adobe-campaign
De standaardintegratie tussen AEM en Campagne is gebaseerd op JSON en JSSP (JavaScript Server Page). Deze JSSP-bestanden vindt u in de Campagne-console en beginnen allemaal met amc (Adobe Marketing Cloud).
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.
-
Als u in Adobe Campaign een nieuw JSSP-bestand wilt maken, klikt u op de knop Nieuw pictogram.
-
Voer de naam van dit JSSP-bestand in. In dit voorbeeld gebruiken we cus:custom.jssp (in de vorm van cus naamruimte).
-
Plaats de volgende code in het jssp-bestand:
code language-none <% var origin = request.getParameter("origin"); document.write("Hello from Adobe Campaign, origin : " + origin); %>
-
Sla uw werk op. Het resterende werk is in AEM.
-
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 het GenericCampaignConnector, waarmee u jssp-bestanden kunt aanroepen (ophalen en posten) aan de Adobe Campaign-zijde.
Hier volgt een klein codefragment:
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();
-
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.
code language-xml // 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 example-adobe-campaign-to-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.
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, op basis van het aantal subniveaus die u wilt ophalen Het trefwoord oneindig kan worden gebruikt:
Nu moeten we weten dat AEM standaard basisverificatie gebruikt om de API te gebruiken.
Een JS-bibliotheek met een naam amcIntegration.js is beschikbaar in 6.1.1 (build 8624 en hoger) die onder meer die logica implementeert.
API-aanroep 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;