現在表示中:

一般的に、プロジェクトを実装する場合は、AEM と Adobe Campaign の両方にカスタムコードを含めます。既存の API を使用して、AEM から Adobe Campaign のカスタムコードを呼び出したり、AEM から Adobe Campaign への呼び出しをおこなうことができます。ここでは、その具体的な方法を説明します。

必要条件

以下の製品がインストールされている必要があります。

  • Adobe Experience Manager
  • Adobe Campaign 6.1

詳しくは、AEM と Adobe Campaign 6.1 の統合を参照してください。

例 1:AEM から Adobe Campaign

AEM と Adobe Campaign の標準の統合は、JSON と JSSP(JavaScript Server Page)を基盤としています。この JSSP ファイルはキャンペーンコンソールにあり、すべて「amc」(Adobe Marketing Cloud)で始まります。

chlimage_1

注意:

この例については、Geometrixx を参照してください。これは、パッケージ共有から入手できます。

この例では、新しいカスタム JSSP ファイルを作成し、AEM 側から呼び出して、結果を取得します。例えば、この方法を利用して、Adobe Campaign からデータを取得したり、Adobe Campaign にデータを保存したりできます。

  1. Adobe Campaign で新しい JSSP ファイルを作成するには、新規アイコンをクリックします。

    chlimage_1
  2. この JSSP ファイルの名前を入力します。この例では、「cus:custom.jssp」を使用します(cus 名前空間に配置することを意味します)。

    chlimage_1
  3. 以下のコードを JSSP ファイル内に挿入します。

    <%
    var origin = request.getParameter("origin");
    document.write("Hello from Adobe Campaign, origin : " + origin);
    %>
  4. ファイルを保存します。残りの作業は AEM でおこないます。

  5. この JSSP を呼び出す簡単なサーブレットを AEM 側に作成します。この例では、次のように仮定しています。

    • AEM と Adobe Campaign 間に有効な接続がある
    • Adobe Campaign クラウドサービスが /content/geometrixx-outdoors に設定されている

    この例で最も重要なオブジェクトは GenericCampaignConnector です。このオブジェクトを使用して、Adobe Campaign 側にある JSSP ファイルを呼び出す(GET および POST)ことができます。

    コードの抜粋を以下に示します。

    @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. この例でわかるように、呼び出しに資格情報を渡す必要があります。この資格情報を 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;
		
	}

}

例 2:Adobe Campaign から AEM

AEM には、サイト管理エクスプローラービューのどこでも使用できるオブジェクトを取得するための API がデフォルトで用意されています。

chlimage_1

注意:

この例については、Geometrixx を参照してください。これは、パッケージ共有から入手できます。

エクスプローラーの各ノードには、API がリンクされています。例えば、次のノードの場合、

API は以下のようになります。

URL の末尾の「.1.json」は、取得したいサブレベルの番号に応じて、「.2.json」や「.3.json」に置き換えることができます。すべてのサブレベルを取得するには、キーワード「infinity」を使用します。

API を利用するには、デフォルトでは、AEM が基本認証を使用することを理解する必要があります。

6.1.1(build 8624 以上)では、複数のロジックの中でこのロジックを実装する JS ライブラリ amcIntegration.js を使用できます。

AEM の API 呼び出し

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;

本作品は Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License によってライセンス許可を受けています。  Twitter™ および Facebook の投稿には、Creative Commons の規約内容は適用されません。

法律上の注意   |   プライバシーポリシー