ワークフローでの JavaScript コードの例 javascript-in-workflows
これらの例は、ワークフローで JavaScript コードを使用する方法を示しています。
静的および非静的 SOAP メソッドについての詳細情報
これらの例では、ECMAScript for XML(E4X)拡張機能を使用しています。この拡張機能を使用すると、JavaScript 呼び出しと XML プリミティブを同じスクリプトに組み合わせることができます。
これらの例を試すには、次の手順に従います。
例 1:データベースに書き込む write-example
データベースに書き込むには、xtk:session
スキーマの静的 Write
メソッドを使用します。
-
XML で書き込みリクエストを作成します。
-
レコードを書き込みます。
-
xtk:session
スキーマのWrite
メソッドを呼び出します。note important IMPORTANT Adobe Campaign v8 を使用する場合は、Snowflake テーブルの Write
メソッドの 取得 および データの更新/削除 API でステージングメカニズムを使用することをお勧めします。詳細情報。 -
XML コードを書き込みリクエストの引数として渡します。
-
手順 1:書き込みリクエストを作成する
レコードの追加、更新、削除を行うことができます。
レコードの挿入
insert
の操作はデフォルトの操作なので、指定する必要はありません。
この情報を 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
メソッドを使用します。 詳細情報。
次の情報を指定します。
- 変更するテーブルのスキーマ
- XML 要素の形式で更新するレコードを識別するために必要な
where
句
例:
xtk.session.DeleteCollection(
"nms:recipient",
<where>
<condition expr="[@email] = 'isabel.garcia@mycompany.com'"/>
</where>,
false
)
手順 2:レコードを記述する
xtk:session
スキーマの非静的 Write
メソッドを呼び出します。
xtk.session.Write(myXML)
このメソッドでは値は返されません。
完全なコードをワークフローの「 JavaScript コード」アクティビティに追加します。
var myXML = <recipient xtkschema="nms:recipient"
firstName="Isabel"
lastName="Garcia"
email="isabel.garcia@mycompany.com"/>
xtk.session.Write(myXML)
このビデオでは、データベースに書き込む方法を説明します。
例 2:データベースにクエリを実行する read-example
データベースにクエリを実行する場合は、非静的 xtk:queryDef
インスタンスメソッドを使用します。
- XML でクエリを作成します。
- クエリオブジェクトを作成します。
- クエリを実行します。
手順 1:クエリを作成する
queryDef
エンティティの XML コードを指定します。
構文:
<queryDef schema="nms:recipient" operation="">
<!-- select, where, and orderBy clauses as XML elements -->
</queryDef>
次の情報を指定します。
- 読み取るテーブルのスキーマ
- 操作
select
句で返される列where
句の条件orderBy
句のフィルタリング条件
これらの操作を使用できます。
select
getIfExists
get
count
count
属性を持つ要素の形式で返されます。XML 要素として select
、where
および orderBy
句を記述します。
-
select
句返す列を指定します。 例えば、ユーザーの名と姓を選択するには、次のコードを記述します。
code language-xml <select> <node expr="@firstName"/> <node expr="@lastName"/> </select>
nms:recipient
スキーマでは、要素は次の形式で返されます。code language-xml <recipient firstName="Bo" lastName="Didley"/>
-
where
句条件を指定するには、
where
句を使用します。 例えば、トレーニング フォルダーにあるレコードを選択するには、次のコードを記述します。code language-xml <where> <condition expr="[folder/@label]='Training'"/> </where>
複数の式を組み合わせる場合は、最初の式でブール演算子を使用します。例えば、Isabel Garcia という名前の人をすべて選択するには、次のコードを記述します。
code language-xml <condition boolOperator="AND" expr="@firstName='Isabel'"/> <condition expr="@lastName='Garcia'"/>
-
orderBy
句結果セットを並べ替えるには、
orderBy
句をsortDesc
属性を持つ XML 要素として指定します。例えば、姓を昇順に並べ替えるには、次のコードを記述します。code language-xml <orderBy> <node expr="@lastName> sortDesc="false"/> </orderBy>
手順 2:クエリオブジェクトの作成
XML コードからエンティティを作成するには、create(
content
)
メソッドを使用します。
var query = xtk.queryDef.create(
<queryDef schema="nms:recipient" operation="select">
…
</queryDef>)
create(
content
)
メソッドの前に、作成するエンティティのスキーマを付けます。
この content
引数は文字列引数で、オプションです。 この引数には、エンティティを記述する XML コードが含まれています。
手順 3:クエリを実行
次の手順に従います。
queryDef
エンティティでExecuteQuery
メソッドを呼び出します。
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
操作の結果
1 つの一致が要素として返されます。
<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
操作はデフォルトの操作なので、指定する必要はありません。
このビデオでは、データベースからの読み取り方法を示しています。
ワークフローのトリガー trigger-example
例えば、テクニカルワークフローで、またはユーザーが web アプリケーションページに入力した情報を処理するために、プログラムでワークフローをトリガーすることができます。
ワークフロートリガーは、イベントを使用して機能します。イベントには、次の機能を使用できます。
ワークフローは様々な方法でトリガーできます。
-
ワークフローをインラインで、つまり JavaScript コード アクティビティのメインスクリプトからトリガーできます。
-
別のワークフローの完了時にワークフローをトリガーできます。
-
最初のワークフローの「終了」アクティビティに初期化スクリプトを追加します。
-
ターゲットワークフローの開始時に「外部シグナル」アクティビティを追加します。
最初のワークフローが完了すると、イベントが投稿されます。送信トランジションが有効化され、イベント変数が入力されます。次に、ターゲットワークフローがイベントを受け取ります。
note tip TIP ベストプラクティスとして、スクリプトをアクティビティに追加するときは、アクティビティ名を二重ハイフンで囲みます(例: -- 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 メソッドの使用方法を説明します。
このビデオでは、ワークフローのトリガー方法を説明します。
データベースとのインタラクション interact-example
以下の例は、これらのアクションを実行する方法を示しています。
- 非静的 SOAP メソッドを使用するスキーマの
get
およびcreate
メソッドを使用します。 - SQL クエリを実行するメソッドの作成
- レコードの挿入、更新、削除を行う
write
メソッドを使用します。
次の手順に従います。
select
句を使用した queryDef
メソッドの構文
<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
メソッド
例 1:レコードを選択してジャーナルに書き込む
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)
例 2:レコードを削除する
Chris Smith という名前のすべての受信者の名、姓、電子メールおよび ID が選択されます。結果は電子メールで昇順に並べ替えられ、ジャーナルに書き込まれます。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}/>)
}
例 3:レコードを選択してジャーナルに書き込む
この例では、非静的メソッドが使用されます。情報が 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
メソッド
レコードの挿入、更新、削除を行うことができます。Adobe Campaign のどのスキーマでも Write
メソッドを使用できます。このメソッドは静的なので、オブジェクトを作成する必要はありません。これらの操作を使用できます。
-
update
操作 -
更新するレコードを識別するための
_key
引数を使用したinsertOrUpdate
操作受信者 フォルダーを指定しない場合は、一致するものがあれば、レコードは任意のサブフォルダーで更新されます。それ以外の場合、レコードはルート 受信者 フォルダーに作成されます。
-
delete
操作
Write
メソッドの 取得 および データの更新/削除 API でステージングメカニズムを使用することをお勧めします。詳細情報。例 1:レコードを挿入または更新する
xtk.session.Write(
<recipient
xtkschema="nms:recipient"
_operation="insertOrUpdate" _key="@email"
lastName="Lennon"
firstName="John"
email="johnlennon@thebeatles.com"
/>
)
例 2:レコードを削除する
この例では、静的メソッドと非静的メソッドを組み合わせています。
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 メソッドの使用例を説明します。