通常、プロジェクトを実装する場合、AEM と Adobe Campaign の両方にカスタムコードが存在します。既存の API を使用して、AEM から Adobe Campaign で、または AEM から Adobe Campaign にカスタムコードを呼び出すことができます。このドキュメントでは、その方法について説明します。
次をインストールする必要があります。
詳しくは、AEM と Adobe Campaign 6.1 の統合を参照してください。
AEM と Campaign の標準的な統合は、JSON と JSSP(JavaScript Server Page)に基づいています。JSSP ファイルは Campaign コンソールにあり、すべてが aec(Adobe Experience Cloud)で始まります。
この例については、Package Share から入手できる Geometrixx を参照してください。
この例では、新しいカスタム JSSP ファイルが作成され、結果を取得するために AEM 側から呼び出します。例えば、Adobe Campaign からデータを取得したり、Adobe Campaign にデータを保存したりするために使用できます。
Adobe Campaign で新しい JSSP ファイルを作成するには、新規アイコンをクリックします。
この JSSP ファイルの名前を入力します。この例では、cus:custom.jssp が使用されています(cus 名前空間内にあることを意味する)。
次のコードを jssp ファイル内に配置します。
<%
var origin = request.getParameter("origin");
document.write("Hello from Adobe Campaign, origin : " + origin);
%>
作業内容を保存します。残りの作業は AEM で行います。
この JSSP を呼び出せるように、AEM 側でシンプルなサーブレットを作成します。この例では、次のような場合を想定できます。
この例で最も重要なオブジェクトは、 GenericCampaignConnector:Adobe Campaign側で jssp ファイルを呼び出す(取得および投稿する)ことができます。
次に、小さなコードスニペットを示します。
@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();
この例では、資格情報を呼び出しに渡す必要があります。この資格情報を getCredentials() メソッドを使用して取得し、Adobe Campaign クラウドサービスが設定されているページに渡すことができます。
// page containing the cloudservice for Adobe Campaign
Configuration config = campaignConnector.getWebserviceConfig(page.getContentResource().getParent());
CampaignCredentials credentials = campaignConnector.retrieveCredentials(config);
完全なコードは以下のようになります。
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;
}
}
AEM には、サイト管理エクスプローラービューの任意の場所で使用できるオブジェクトを取得するための API がデフォルトで用意されています。
この例については、Package Share から入手できる Geometrixx を参照してください。
エクスプローラーの各ノードには、API がリンクされています。例えば、以下のノードの場合、
API は以下のようになります。
URL の末尾の「.1.json」は、取得したいサブレベルの番号に応じて、「.2.json」や「.3.json」に置き換えることができます。すべてのサブレベルを取得するには、キーワード「infinity」を使用します。
API を利用するには、デフォルトでは、AEM が基本認証を使用します。
6.1.1(8624 以降のビルド)では、複数のロジックの中でこのロジックを実装する JS ライブラリ amcIntegration.js を使用できます。
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;