ステップ実行スクリプト
ステップ設定レコードでは、ステップ実行スクリプトフィールドによって、この設定のステップが行う実行内容が決定します。
ステップ入力
ステップへの入力変数は、ステップ設定レコード内の入力関連リストによって決定されます。executeScript() の inputs パラメーターにより、スクリプトはこれらの変数にアクセスできます。たとえば、入力関連リストに 2 つのレコード var1 と var2 が含まれる場合、スクリプトは inputs.var1 という表現で var1 を、inputs.var2 で var2 を参照できます。
ステップ出力
ステップへの出力変数は、ステップ設定レコード内の出力関連リストによって決定されます。executeScript() の outputs パラメーターにより、スクリプトはこれらの変数にアクセスできます。たとえば、出力関連リストに 2 つのレコード out1 と out2 が含まれる場合、スクリプトは outputs.out1 という表現で out1 を、outputs.out2 で out2 を参照できます。
ステップ結果
stepResult パラメーターは、ステップの成功/失敗を制御する API へのアクセスを提供します。また、ステップがログに書き込むメッセージも決定されます。
メソッド stepResult.setSuccess() はステップを成功させます。メソッド stepResult.setFailed() はステップを失敗させます。
メソッド stepResult.setOutputMessage() は、ステップが成功または失敗したときにログに書き込まれるメッセージを設定します。1 つのパラメーター、ログに書き込む文字列が必要です。スクリプトが stepResult.setOutputMessage() を複数回呼び出すと、最新の値セットで以前の値が上書きされます。
レコードのクエリーステップ実行スクリプト
(function executeStep(inputs, outputs, stepResult) {
if (gs.nil(inputs.table)) {
stepResult.setOutputMessage(gs.getMessage("The '{0}' input variable was not specified",
'table'));
stepResult.setFailed();
return;
}
var query = new GlideRecord(inputs.table);
query.addEncodedQuery(inputs.field_values);
query.query();
if (!query.next()) {
stepResult.setOutputMessage(gs.getMessage("No records matching query:\n{0}",
inputs.field_values));
stepResult.setFailed();
} else {
stepResult.setSuccess();
outputs.table = inputs.table;
outputs.first_record = query.getUniqueValue();
stepResult.setOutputMessage(gs.getMessage("Found {0} {1} records matching query:\n{2}",
[query.getRowCount(),
inputs.table,
inputs.field_values]));
}
}(inputs, outputs, stepResult));
カスタムスクリプト化されたステップの構成
((function executeStep(inputs, outputs, stepResult, timeout) {
// Waits up to the timeout for some asynchronous logic to finish
// This script checks for completion once a second for up to 60 seconds
var counter = 1;
// Try for up to 60 seconds
while (counter <= timeout) {
// If the asynchronous logic is finished, return "true" to pass the step
// isMyAsyncLogicFinished() can be replaced with any asynchronous event that needs to be tested
if (isMyAsyncLogicFinished()) {
stepResult.setOutputMessage("Success!");
stepResult.setSuccess();
return;
}
// Wait one second, and log the total number of seconds waited
gs.info("Waited " + counter + " seconds for asynchronous logic to finish");
sn_atf.AutomatedTestingFramework.waitOneSecond();
counter++;
}
// If this point is reached, the retry loop ran out of tries; return false to fail the step
stepResult.setOutputMessage("FAILURE: Timed out after waiting for " + timeout + " seconds");
stepResult.setFailed();
}(inputs, outputs, stepResult, timeout));
stepResult.setSuccess()” と stepResult.setFailed() を return true と return falseに置き換えて使用することもできます。