JavaScript のスクリプトとテンプレート javascript-scripts-and-templates
スクリプトを使用すると、値を計算したり、プロセス内の異なるタスク間でデータを交換したりできるほか、SOAP コールを使用して個別の操作を実行することが可能です。
スクリプトは、次のように、ワークフローダイアグラムのあらゆる場所に存在します。
-
どのアクティビティにも、初期化スクリプトがあります。アクティビティが有効になったときや、アクティビティを使用して変数を初期化したりプロパティを変更したりするときには、初期化スクリプトが実行されます。
-
スクリプトを実行する場合には、JavaScript コードのアクティビティが使用されます。
-
「テスト」アクティビティでは、JavaScript の式を評価して、適切なトランジションを有効化します。
-
ほとんどのテキストフィールドは、JavaScript テンプレートになっています。JavaScript の式は、<%= と %> の間に記述します。これらのフィールドにはドロップダウンリストを開くボタンがあり、式を簡単に入力できるようになっています。
公開されるオブジェクト objects-exposed
ワークフローのコンテキストで実行される JavaScript は、一連の追加グローバルオブジェクトにアクセスします。
- インスタンス:実行されるワークフローを表します。このオブジェクトのスキーマは「xtk:workflow」です。
- タスク:実行されるタスクを表します。このオブジェクトのスキーマは「xtk:workflowTask」です。
- イベント:実行されるタスクを有効化したイベントを表します。このオブジェクトのスキーマは「xtk:workflowEvent」です。このオブジェクトは、複数のトランジションから有効化された「AND 結合」タイプアクティビティについては初期化されません。
- イベント:現在のタスクを有効化したイベントのリストを表します。このオブジェクトのスキーマは「xtk:workflowEvent」です。このテーブルでは通常、要素は 1 つですが、複数のトランジションをもとに有効化された「AND 結合」タイプアクティビティの場合、要素が複数になることがあります。
- アクティビティ:実行されるタスクのモデルを表します。このオブジェクトのスキーマは、アクティビティタイプに応じて決まります。このオブジェクトは、初期化スクリプトを使用して変更することができます。ほかのスクリプでは変更できません。
スクリプトツールバーの右側にあるボタンをクリックすると、オブジェクトで利用できるプロパティがドロップダウンリストに表示されます。
例
この例と以降の例では、以下のダイアグラムに示すような、「JavaScript コード」アクティビティと「終了」アクティビティを含むワークフローを作成します。
「JavaScript コード」アクティビティをダブルクリックして、以下のスクリプトを挿入します。
logInfo("Label: " + instance.label)
logInfo("Start date: " + task.creationDate)
関数 logInfo(message) は、ログにメッセージを挿入します。
「OK」をクリックして作成アシスタントを閉じ、ワークフローのリストの右上にあるアクションボタンを使用して、ワークフローを起動します。最後に、ログを確認します。スクリプトに対応して 2 つのメッセージがあるのがわかります。一方には、ワークフローのラベルが、もう一方には、スクリプトがアーカイブされた日付がそれぞれ表示されています。
変数 variables
変数とは、instance、task および event オブジェクトの自由なプロパティです。これらの変数に許可されている JavaScript タイプは、string、number および Date です。
インスタンス変数 instance-variables
インスタンス変数(instance.vars.xxx)はグローバル変数に相当します。この変数は、すべてのアクティビティで共有されます。
タスク変数 task-variables
タスク変数(task.vars.xxx)はローカル変数に相当します。現在のタスクにのみ使用されます。この変数は、永続的なアクティビティでデータの維持に使用されるほか、同じアクティビティの異なるスクリプト間でデータを交換する場合に使用されることもあります。
イベント変数 event-variables
イベント変数(vars.xxx)を使用すると、ワークフロープロセスの各基本タスク間でデータを交換できます。この変数は、進行中のタスクを有効化したタスクによって受け渡されます。イベント変数は、修正したり新規に作成したりでき、次のアクティビティに渡されます。
イベントは最も使用されることの多い変数です。インスタンス変数より優先して使用することをお勧めします。
特定のイベント変数は、さまざまなアクティビティが変更し、読み取ります。これらのイベント変数はすべて文字列タイプの変数です。例えば、エクスポートでは、エクスポートされたファイルの完全名が、変数 vars.filename に設定されます。すべての読み取られた変数および変更された変数については、アクティビティの「入力パラメーター」と「出力パラメーター」のセクションにあるアクティビティについてを参照してください。
使用例 example
例 1
この例では、インスタンス変数を使用して、母集団に適用する分割率を動的に計算します。
-
ワークフローを作成し、開始アクティビティを追加します。
-
インスタンス変数を定義する JavaScript コードアクティビティを追加および設定します。
次に例を示します。
instance.vars.segmentpercent = 10;
-
必要に応じて、クエリアクティビティを追加し、受信者をターゲットにします。
-
分割アクティビティを追加し、入力母集団のランダムサンプリングを実行するように設定します。サンプリングの割合は任意の値に設定できます。この例では、50%に設定されています。
この割合は、前に定義したインスタンス変数によって動的に更新されます。
-
分割アクティビティの「詳細設定」タブの「初期化スクリプト」セクション内で、JS 条件を定義します。JS 条件は、分割アクティビティから発生する最初のトランジションのランダムサンプリング率を選択し、前に作成したインスタンス変数によって設定された値に更新します。
code language-none activity.transitions.extractOutput[0].limiter.percent = instance.vars.segmentpercent;
-
分割アクティビティの個別のトランジションで補集合が生成され、各アウトバウンドトランジションの後に終了アクティビティが追加されることを確認します。
-
保存して、ワークフローを実行します。インスタンス変数に応じて動的サンプリングが適用されます。
例 2
-
前の例のワークフローを利用します。「JavaScript コード」アクティビティのスクリプトを以下のスクリプトと入れ替えます。
code language-none instance.vars.foo = "bar1" vars.foo = "bar2" task.vars.foo = "bar3"
-
以下のスクリプトを、「終了」アクティビティの初期化スクリプトに追加します。
code language-none logInfo("instance.vars.foo = " + instance.vars.foo) logInfo("vars.foo = " + vars.foo) logInfo("task.vars.foo = " + task.vars.foo)
-
ワークフローを起動し、ログを確認します。
code language-none Workflow finished task.vars.foo = undefined vars.foo = bar2 instance.vars.foo = bar1 Starting workflow (operator 'admin')
この例では、JavaScript コード に続くアクティビティがインスタンス変数とイベント変数にアクセスします。一方、外部(「未定義」)からタスク変数にアクセスすることはできません。
クエリでのインスタンス変数の呼び出し calling-an-instance-variable-in-a-query
アクティビティでインスタンス変数の指定が完了したら、その変数はワークフロークエリで再利用できます。
変数「instance.vars.xxx = "yyy"」をフィルターで呼び出すには、「$(instance/vars/xxx)」と入力します。
次に例を示します。
-
インスタンス変数を作成し、JavaScript コード の instance.vars.deliveryIN = "DM42" で配信の内部名を定義します。
-
ターゲティングディメンションとフィルタリングディメンションが受信者のクエリを作成します。この変数で指定した配信を送信した先の受信者すべてを検索するように条件を指定します。
この情報は、配信ログに格納されます。
「値」列のインスタンス変数を参照するには、「$(instance/vars/@deliveryIN)」と入力します。
ワークフローは DM42 配信の受信者を返します。
高度な関数 advanced-functions
標準の JavaScript 関数に加え、特殊な関数も使用できます。これらの関数では、ファイルの操作、データベース内のデータの読み取りや変更、ログへのメッセージの追加などが可能になります。
ジャーナル journal
logInfo(message) は上記の例で詳しく記述されています。この機能では、情報メッセージをジャーナルに追加します。
logError(message) はエラーメッセージをログに追加します。このスクリプトは処理の実行を中止し、ワークフローのステータスがエラーに変わります(デフォルトでは、インスタンスは一時停止します)。
初期化スクリプト initialization-script
一定の条件のもとで、実行時にアクティビティのプロパティを変更することができます。
アクティビティのほとんどのプロパティは動的に割り出すことができます。この場合、JavaScript テンプレートを使用します。または、スクリプトを使用してワークフロープロパティで明示的に値を割り出します。
一方、その他のプロパティでは、初期化スクリプトを使用する必要があります。スクリプトはタスクの実行前に評価されます。変数 activity は、タスクに対応するアクティビティを参照します。このアクティビティのプロパティは変更することが可能で、タスクにのみ影響を与えます。
関連トピック
ワークフローでの JavaScript コードの例