以下範例說明如何在工作流程中使用JavaScript程式碼:
瞭解更多 關於靜態和非靜態SOAP方法。
在這些範例中,會使用ECMAScript for XML (E4X)擴充功能。 透過此擴充功能,您可以在相同的指令碼中組合JavaScript呼叫和XML原始碼。
若要嘗試這些範例,請遵循下列步驟:
建立工作流程並將這些活動新增至工作流程:
瞭解更多 建立工作流程的相關資訊。
將JavaScript程式碼新增至活動。 了解更多。
儲存工作流程。
測試範例:
若要寫入資料庫,您可以使用靜態 Write
上的方法 xtk:session
綱要:
以XML撰寫寫入要求。
寫入記錄:
呼叫 Write
上的方法 xtk:session
結構描述。
如果您使用Adobe Campaign v8,我們建議您搭配 內嵌 和 資料更新/刪除 的API Write
Snowflake表中的方法。 深入了解.
將XML程式碼傳遞為寫入要求的引數。
您可以新增、更新和刪除記錄。
因為 insert
operation是預設的作業,您不需要指定它。
將此資訊指定為XML屬性:
範例:
var myXML = <recipient xtkschema="nms:recipient"
firstName="Isabel"
lastName="Garcia"
email="isabel.garcia@mycompany.com"/>
使用 _update
作業。 了解更多。
將此資訊指定為XML屬性:
範例:
var myXML = <recipient xtkschema="nms:recipient"
status="Client"
email="isabel.garcia@mycompany.com"
operation="_update"
_key="@email"/>
使用 DeleteCollection
方法。 了解更多。
指定此資訊:
where
以XML元素的形式識別要更新的記錄所需的子句範例:
xtk.session.DeleteCollection(
"nms:recipient",
<where>
<condition expr="[@email] = 'isabel.garcia@mycompany.com'"/>
</where>,
false
)
呼叫非靜態 Write
上的方法 xtk:session
綱要:
xtk.session.Write(myXML)
此方法未傳回任何值。
將完整程式碼新增至工作流程中的JavaScript程式碼活動:
var myXML = <recipient xtkschema="nms:recipient"
firstName="Isabel"
lastName="Garcia"
email="isabel.garcia@mycompany.com"/>
xtk.session.Write(myXML)
此影片說明如何寫入資料庫:
若要查詢資料庫,您可以使用非靜態 xtk:queryDef
執行個體方法:
指定的XML程式碼 queryDef
實體。
語法:
<queryDef schema="nms:recipient" operation="">
<!-- select, where, and orderBy clauses as XML elements -->
</queryDef>
指定此資訊:
select
子句where
子句orderBy
子句您可以使用下列操作:
作業 | 結果 |
---|---|
select |
零個或多個元素會傳回為集合。 |
getIfExists |
傳回一個元素。 如果不存在相符元素,則會傳回空白元素。 |
get |
傳回一個元素。 如果不存在相符元素,則會傳回錯誤。 |
count |
以元素形式傳回的相符記錄數帶有 count 屬性。 |
撰寫 select
, where
、和 orderBy
子句作為XML元素:
select
子句
指定要傳回的欄。 例如,若要選取人員的名字和姓氏,請撰寫此代碼:
<select>
<node expr="@firstName"/>
<node expr="@lastName"/>
</select>
使用 nms:recipient
結構描述,則元素會以下列形式傳回:
<recipient firstName="Bo" lastName="Didley"/>
where
子句
若要指定條件,請使用 where
子句。 例如,若要選取位於 培訓 資料夾中,您可以撰寫此程式碼:
<where>
<condition expr="[folder/@label]='Training'"/>
</where>
合併多個運算式時,請在第一個運算式中使用布林運運算元。 例如,若要選取所有名為Isabel Garcia的人,您可以編寫此程式碼:
<condition boolOperator="AND" expr="@firstName='Isabel'"/>
<condition expr="@lastName='Garcia'"/>
orderBy
子句
若要排序結果集,請指定 orderBy
子句作為XML元素 sortDesc
屬性。 例如,若要以遞增順序排序姓氏,您可以編寫此程式碼:
<orderBy>
<node expr="@lastName> sortDesc="false"/>
</orderBy>
若要從XML程式碼建立實體,請使用 create(
content
)
方法:
var query = xtk.queryDef.create(
<queryDef schema="nms:recipient" operation="select">
…
</queryDef>)
前置詞 create(
content
)
具有要建立之實體結構描述的方法。
此 content
引數是字串引數,為選用專案。 此引數包含描述實體的XML程式碼。
請按照以下步驟操作:
呼叫 ExecuteQuery
上的方法 queryDef
實體:
var res = query.ExecuteQuery()
處理結果:
select
作業,使用回圈建構。getIfExists
作業。count
作業。select
操作所有相符專案都會以集合的形式傳回:
<recipient-collection>
<recipient email="jane.smith@mycompany.com">
<recipient email="john.harris@mycompany.com">
</recipient-collection>
若要反複檢查結果,請使用 for each
回圈:
for each (var rcp in res:recipient)
logInfo(rcp.@email)
回圈包含本機收件者變數。 對於收件者集合中傳回的每個收件者,收件者的電子郵件都會列印出來。 瞭解更多 關於 logInfo
函式。
getIfExists
操作每個相符專案都會傳回為元素:
<recipient id="52,378,079">
如果沒有相符專案,則會傳回空白元素:
<recipient/>
您可以參照主索引鍵節點,例如 @id
屬性:
if (res.@id !=undefined)
{ // match was found
…
}
get
操作會傳回一個相符專案作為元素:
<recipient id="52,378,079">
如果沒有相符專案,則會傳回錯誤。
如果您知道有相符專案,請使用 get
作業。 否則,請使用 getIfExists
作業。 如果您使用此最佳實務,則錯誤會顯示非預期的問題。 如果您使用 get
操作,請勿使用 try…catch
陳述式。 問題由工作流程的錯誤處理程式處理。
count
操作具有「 」的元素 count
屬性會傳回:
<recipient count="200">
若要使用結果,請參閱 @count
屬性:
if (res.@count > 0)
{ // matches were found
…
}
對於 select
作業,將此程式碼新增至工作流程中的JavaScript程式碼活動:
var myXML =
<queryDef schema="nms:recipient" operation="select">
<select>
<node expr="@firstName"/>
<node expr="@lastName"/>
</select>
</queryDef>
var query = xtk.queryDef.create(myXML)
var res = query.ExecuteQuery()
for each (var rcp in res.recipient)
logInfo(rcp.@firstName + " " + rcp.@lastName)
因為 select
operation是預設的作業,您不需要指定它。
此影片說明如何從資料庫讀取:
您可以程式化觸發工作流程,例如,在技術工作流程中,或處理使用者在網頁應用程式頁面上輸入的資訊。
工作流程觸發可透過使用事件來運作。 您可以對事件使用這些功能:
您可以透過不同方式觸發工作流程:
將初始化指令碼新增至 End 初始工作流程的活動。
新增 External signal 活動。
完成初始工作流程後,事件就會發佈。 會啟動傳出轉變並填入事件變數。 然後,目標工作流程會接收事件。
最佳實務是,將指令碼新增至活動時,請以雙連字型大小將活動名稱括住,例如 -- end --
. 瞭解更多 關於工作流程最佳實務。
的語法 PostEvent
方法:
PostEvent(
String //ID of the target workflow
String //Name of the target activity
String //Name of the transition to be activated in case of multiple transitions
XML //Event parameters, in the <variables/> element
Boolean //To trigger the target workflow only once, set this parameter to true.
)
在此範例中,完成工作流程後,會將簡短文字傳遞至 訊號 的活動 wkfExampleReceiver 工作流程:
var strLabel = "Adobe Campaign, Marketing that delivers"
xtk.workflow.PostEvent(
"wkfExampleReceiver",
"signal",
"",
<variables strLine={strLabel}/>,
false)
因為最後一個引數設定為 false
,則 wkfExampleReceiver 每次完成初始工作流程時都會觸發工作流程。
當您觸發工作流程時,請記住以下原則:
PostEvent
命令以非同步方式執行。 命令會放置在伺服器佇列中。 方法會在發佈事件後傳回。PostEvent
命令會排入佇列,直到工作流程恢復為止。本影片說明如何使用靜態API方法:
本影片說明如何觸發工作流程:
這些範例說明如何執行下列動作:
get
和 create
使用非靜態SOAP方法的結構描述方法write
插入、更新和刪除記錄的方法請按照以下步驟操作:
定義查詢:
create
對應架構上的方法,例如 xtk:workflow
結構描述。 了解更多。queryDef
發出SQL查詢的方法。使用執行查詢 ExecuteQuery
方法。 了解更多。
使用 for each
回圈以擷取結果。
queryDef
具有的方法 select
子句<queryDef schema="schema_key" operation="operation_type">
<select>
<node expr="expression1">
<node sql="expression2">
</select>
<where>
<condition expr="expression1"/>
<condition sql="expression2"/>
</where>
<orderBy>
<node expr="expression1">
<node sql="expression2">
</orderBy>
<groupBy>
<node expr="expression1">
<node sql="expression2">
</groupBy>
<having>
<condition expr="expression1"/>
<condition sql="expression2"/>
</having>
</queryDef>
Create
方法位於「 」中的工作流程的內部名稱 wfExamples 已選取資料夾。 結果會依內部名稱遞增順序排序,並寫入日誌。
var query = xtk.queryDef.create(
<queryDef schema="xtk:workflow" operation="select">
<select>
<node expr="@internalName"/>
</select>
<where>
<condition expr="[folder/@name]='wfExamples'"/>
</where>
<orderBy>
<node expr="@internalName" sortDesc="false"/>
</orderBy>
</queryDef>
)
var res = query.ExecuteQuery()
for each (var w in res.workflow)
logInfo(w.@internalName)
系統會選取名為Chris Smith之所有收件者的名字、姓氏、電子郵件及ID。 結果會依電子郵件遞增順序排序,並寫入日誌。 A delete
操作用於刪除選取的記錄。
// Build the query, create a query object and hold the object in a variable
var query = xtk.queryDef.create(
<queryDef schema="nms:recipient" operation="select">
<select>
<node expr="@firstName"/>
<node expr="@lastName"/>
<node expr="@email"/>
<node expr="@id"/>
</select>
<where>
<condition expr="[folder/@label]='Recipients'"/>
<condition expr="[@lastName]='Smith'"/>
<condition expr="[@firstName]='Chris'"/>
</where>
<orderBy>
<node expr="@email" sortDesc="false"/>
</orderBy>
</queryDef>
)
//Run the query using the ExecuteQuery method against the created object
var res = query.ExecuteQuery()
//Loop through the results, print out the person's name and email, then delete the records
for each (var rec in res.recipient)
{
logInfo("Delete record = Email: " + rec.@email + ', ' + rec.@firstName + ' ' + rec.@lastName)
xtk.session.Write(<recipient xtkschema="nms:recipient" _operation="delete" id={rec.@id}/>)
}
在此範例中,使用非靜態方法。 其資訊儲存在中的所有收件者的電子郵件和出生年份 1234 資料夾及其電子郵件網域名稱以「adobe」開頭皆已選取。 結果會依出生日期以遞減順序排序。 收件者的電子郵件會寫入日誌。
var query = xtk.queryDef.create(
<queryDef schema="nms:recipient" operation="select">
<select>
<node expr="@email"/>
<node sql="sEmail"/>
<node expr="Year(@birthDate)"/>
</select>
<where>
<condition expr="[@folder-id] = 1234 and @domain like 'adobe%'"/>
<condition sql="iFolderId = 1234 and sDomain like 'adobe%'"/>
</where>
<orderBy>
<node expr="@birthDate" sortDesc="true"/>
</orderBy>
</queryDef>
)
var res = query.ExecuteQuery()
for each (var w in res.recipient)
logInfo(w.@email)
Write
方法您可以插入、更新和刪除記錄。 您可以使用 Write
Adobe Campaign中任何結構描述的方法。 由於此方法為靜態方法,因此您不需要建立物件。 您可以使用下列操作:
此 update
操作
此 insertOrUpdate
作業,使用 _key
識別要更新之記錄的引數
如果您不指定 收件者 資料夾中,如果存在相符專案,則會更新任何子資料夾中的記錄。 否則,會在根中建立記錄 收件者 資料夾。
此 delete
操作
如果您使用Adobe Campaign v8,我們建議您搭配 內嵌 和 資料更新/刪除 的API Write
Snowflake表中的方法。 深入了解.
xtk.session.Write(
<recipient
xtkschema="nms:recipient"
_operation="insertOrUpdate" _key="@email"
lastName="Lennon"
firstName="John"
email="johnlennon@thebeatles.com"
/>
)
此範例結合了靜態方法和非靜態方法。
var query=xtk.queryDef.create(
<queryDef schema="nms:recipient" operation="select">
<select>
<node expr="@Id"/>
</select>
<where>
<condition expr="[@email]='johnlennon@thebeatles.com'"/>
</where>
</queryDef>
);
var res = query.ExecuteQuery()
for each (var w in res.recipient) {
xtk.session.Write(
<recipient xtkschema="nms:recipient" _operation="delete" id={w.@id}/>
);
}
本影片說明如何使用非靜態API方法:
本影片說明在工作流程中使用非靜態API方法的範例: