所有API方法都以Web services的形式呈現。 這可讓您透過SOAP呼叫管理所有Adobe Campaign功能,而SOAP呼叫是Adobe Campaign應用程式伺服器的原生入口點。 Adobe Campaign主控台本身僅使用SOAP呼叫。
Web services可讓您從協力廠商系統建立許多應用程式:
Adobe Campaign應用程式伺服器上實作的網站服務定義可從資料結構描述中取得。
Web服務在資料結構描述的語法中描述,可從<methods>
元素中獲得。
<methods>
<method name="GenerateForm" static="true">
<help>Generates the form in Mail or Web mode</help>
<parameters>
<param name="formName" type="string" desc="Name of form"/>
<param name="mailMode" type="boolean" desc="Generate a form of type Mail"/>
<param name="result" type="string" inout="out" desc="Result "/>
</parameters>
</method>
</methods>
這裡有一個名為GenerateForm的方法定義示例。
服務的說明從<method>
元素開始。 從<parameters>
元素中完成方法的參數清單。 每個參數都由名稱、類型(布林值、字串、DOMElement等)指定 和說明。 具有"out"值的"inout"屬性可讓您指定"result"參數位於SOAP呼叫輸出。
存在"static"屬性(值為"true")將此方法描述為static,這表示必須聲明方法的所有參數。
「const」方法隱式地將XML文檔以其相關模式的格式作為輸入。
Method下的「架構參考」一章中,提供Adobe Campaign架構之<method>
元素的完整說明
"xtk:queryDef"架構中的"const"類型"ExecuteQuery"方法範例:
<method name="ExecuteQuery" const="true">
<help>Retrieve data from a query</help>
<parameters>
<param desc="Output xml document" name="output" type="DOMDocument" inout="out"/>
</parameters>
</method>
此方法的輸入參數是XML文檔,格式為"xtk:queryDef"模式。
每個服務都有一個WSDL(Web服務說明庫)檔案。 此XML檔案使用元語言來描述服務,並指定可用的方法、參數和伺服器,以便與其聯繫以執行服務。
要生成WSDL檔案,必須從Web瀏覽器輸入以下URL:
https://<server>
/nl/jsp/schemawsdl.jsp?schema=<schema>
使用:
<server>
:Adobe Campaign應用程式伺服器(nlserver web)<schema>
:方案標識鍵(namespace:schema_name)WSDL檔案是從URL生成的:
https://localhost/nl/jsp/schemawsdl.jsp?schema=xtk:queryDef
WSDL說明首先定義用於形成消息的類型,這些消息與"ports"關聯,通過"bindings"形成Web服務,與協定連接。
類型定義基於XML結構描述。 在我們的範例中,"ExecuteQuery"方法會使用"s:string"字串和XML檔案(<s:complextype>
)做為參數。 方法的返回值("ExecuteQueryResponse")是XML文檔(<s:complextype>
)。
<types>
<s:schema elementFormDefault="qualified" targetNamespace="urn:xtk:queryDef">
<s:element name="ExecuteQuery">
<s:complexType>
<s:sequence>
<s:element maxOccurs="1" minOccurs="1" name="sessiontoken" type="s:string"/>
<s:element maxOccurs="1" minOccurs="1" name="entity">
<s:complexType>
<s:sequence>
<s:any/>
</s:sequence>
</s:complexType>
</s:element>
</s:sequence>
</s:complexType>
</s:element>
<s:element name="ExecuteQueryResponse">
<s:complexType>
<s:sequence>
<s:element maxOccurs="1" minOccurs="1" name="pdomOutput">
<s:complexType mixed="true">
<s:sequence>
<s:any/>
</s:sequence>
</s:complexType>
</s:element>
</s:sequence>
</s:complexType>
</s:element>
<message>
說明要發送的一組欄位的名稱和類型。 該方法使用兩條消息作為參數("ExecuteQueryIn")和返回值("ExecuteQueryOut")進行傳遞。
<message name="ExecuteQueryIn">
<part element="tns:ExecuteQuery" name="parameters"/>
</message>
<message name="ExecuteQueryOut">
<part element="tns:ExecuteQueryResponse" name="parameters"/>
</message>
<porttype>
會將查詢("input")觸發的"ExecuteQuery"操作中的消息關聯起來,生成響應("output")。
<portType name="queryDefMethodsSoap">
<operation name="ExecuteQuery">
<input message="tns:ExecuteQueryIn"/>
<output message="tns:ExecuteQueryOut"/>
</operation>
</portType>
<binding>
部分指定SOAP通信協定(<soap:binding>
)、HTTP中的資料傳輸("transport"屬性的值)和"ExecuteQuery"操作的資料格式。 SOAP封套的內文直接包含訊息區段,而不需進行轉換。
<binding name="queryDefMethodsSoap" type="tns:queryDefMethodsSoap">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="ExecuteQuery">
<soap:operation soapAction="xtk:queryDef#ExecuteQuery" style="document"/>
<input>
<soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:xtk:queryDef" use="literal"/>
</input>
<output>
<soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:xtk:queryDef" use="literal"/>
</output>
</operation>
</binding>
<service>
部分說明「XtkQueryDef」服務及其URI,位於Adobe Campaign應用程式伺服器的URL上。
<service name="XtkQueryDef">
<port binding="tns:queryDefMethodsSoap" name="queryDefMethodsSoap">
<soap:address location="https://localhost/nl/jsp/soaprouter.jsp"/>
</port>
</service>
Adobe Campaign已透過引入安全區(請參閱本節中的定義安全區章節)以及作業階段管理設定,提高驗證機制的安全性。
有兩種可用的驗證模式:
或
工作階段Token具有下列特性:
a X hour life cycle(life cycle is configurable in the 'serverConf.xml' file, the default period is 24 hours)
隨機構造(不再包含使用者登入和密碼)
透過Web存取時:
安全令牌具有以下特徵:
它是從工作階段Token產生
其生命週期為24小時(可在'serverConf.xml'檔案中設定,預設期間為24小時)
它會儲存在Adobe Campaign主控台中
透過Web存取時:
通過控制台訪問時,它是:
從POST和GET HTTP:
從SOAP呼叫:
var cnx = new HttpSoapConnection("https://serverURL/nl/jsp/soaprouter.jsp");
var session = new SoapService(cnx, 'urn:xtk:session');
session.addMethod("Logon", "xtk:session#Logon",
["sessiontoken", "string", "Login", "string", "Password", "string", "Parameters", "NLElement"],
["sessionToken", "string", "sessionInfo", "NLElement", "securityToken", "string"]);
var res = session.Logon("", "admin", "pwd", <param/>);
var sessionToken = res[0];
var securityToken = res[2];
cnx.addTokens(sessionToken, securityToken);
var query = new SoapService(cnx, 'urn:xtk:queryDef');
query.addMethod("ExecuteQuery", "xtk:queryDef#ExecuteQuery",
["sessiontoken", "string", "entity", "NLElement"],
["res", "NLElement"]);
var queryRes = query.ExecuteQuery("", <queryDef operation="select" schema="nms:recipient">
<select>
<node expr="@email"/>
<node expr="@lastName"/>
<node expr="@firstName"/>
</select>
<where>
<condition expr="@email = 'joe.doe@aol.com'"/>
</where>
</queryDef>);
logInfo(queryRes[0].toXMLString())
下列HttpServletRequest呼叫中使用的URL必須位於serverConf.xml檔案的url權限區段中的允許清單中。 伺服器本身的URL也是如此。
登錄執行():
var req = new HttpClientRequest("https://serverURL/nl/jsp/soaprouter.jsp");
req.header["Content-Type"] = "text/xml; charset=utf-8";
req.header["SOAPAction"] = "xtk:session#Logon";
req.method = "POST";
req.body = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:xtk:session">' +
'<soapenv:Header/>' +
'<soapenv:Body>' +
'<urn:Logon>' +
'<urn:sessiontoken></urn:sessiontoken>' +
'<urn:strLogin>LOGIN_HERE</urn:strLogin>' +
'<urn:strPassword>PASSWORD_HERE</urn:strPassword>' +
'<urn:elemParameters></urn:elemParameters>' +
'</urn:Logon>' +
'</soapenv:Body>' +
'</soapenv:Envelope>';
req.execute();
var resp = req.response;
var xmlRes = new XML(String(resp.body).replace("<?xml version='1.0'?>",""));
var sessionToken = String(xmlRes..*::pstrSessionToken);;
var securityToken = String(xmlRes..*::pstrSecurityToken);
查詢執行:
var req2 = new HttpClientRequest("https://serverURL/nl/jsp/soaprouter.jsp");
req2.header["Content-Type"] = "text/xml; charset=utf-8";
req2.header["SOAPAction"] = "xtk:queryDef#ExecuteQuery";req2.header["X-Security-Token"] = securityToken;
req2.header["cookie"] = "__sessiontoken="+sessionToken;
req2.method = "POST";
req2.body = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:xtk:queryDef">' +
'<soapenv:Header/><soapenv:Body><urn:ExecuteQuery><urn:sessiontoken/><urn:entity>' +
'<queryDef operation="select" schema="nms:recipient">' +
'<select><node expr="@email"/><node expr="@lastName"/><node expr="@firstName"/></select>' +
'<where><condition expr="@email = \'john.doe@aol.com\'"/></where>' +
'</queryDef>' +
'</urn:entity></urn:ExecuteQuery></soapenv:Body></soapenv:Envelope>';
req2.execute();
var resp2 = req2.response;
logInfo(resp2.body)