Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

処理時間の合計算出方法

Yuki21
Tera Expert

繰り返し処理の中で処理時間の合計を算出したい箇所があります。
resultの属性は文字列であるため、whileの中で加算することができず、
この要件を満たすにはスクリプトをどのようにすればよいでしょうか?
parseInt()もだめでした。

while (XXX != null) {
    var timer = new OCTimer();
    timer.start("test");
    ・
    ・
    ・
    timer.stop('test');
    var result = timer.result();
    gs.info(result);
    ・
    ・
    ・
}
1 件の受理された解決策

t_sadahisa
Giga Guru

2通り案を出させていただきます。
(言うまでもないですが他にも良い方法はあるかと思います。)

方法1. 測定したい期間で別のタイマーを動作させる。

var timer = new OCTimer();

for (var i=1; i<10; i++){
    timer.start("test"+i);
    gs.sleep(1000);
    timer.stop("test"+i);
}
var result = timer.result();
gs.info(result);

//実行結果
*** Script: DEFAULT Performance Timings
01.000 test1 invoked: 1
01.000 test2 invoked: 1
01.000 test3 invoked: 1
01.000 test4 invoked: 1
01.000 test5 invoked: 1
01.000 test6 invoked: 1
01.001 test7 invoked: 1
01.000 test8 invoked: 1
01.000 test9 invoked: 1
09.001 [TOTAL] for: DEFAULT Performance Timings

 

方法2. GlideDateTimeで現在時刻を取得し、Array等に保持する

//サンプルコード
var time = [];

for (var i=1; i<10; i++){
    time.push(new GlideDateTime().getNumericValue());
    gs.sleep(1000);
}

gs.info("totalTime:" + (time[time.length - 1] - time[0]));

gs.info("laptime");

for (var j=1; j<time.length; j++){
    gs.info(j + ":" + (time[j]-time[j-1]));
}

//実行結果
*** Script: totalTime:8002
*** Script: laptime
*** Script: 1:1001
*** Script: 2:1000
*** Script: 3:1000
*** Script: 4:1000
*** Script: 5:1000
*** Script: 6:1001
*** Script: 7:1000
*** Script: 8:1000

ご質問に対する回答になっているでしょうか。ご確認よろしくお願いいたします。

元の投稿で解決策を見る

5件の返信5

shloke04
Kilo Patron

Hi,

Can you share more details on what are you trying to achieve ? This will help me to assist you better.

 

Regards,

Shloke

Hope this helps. Please mark the answer as correct/helpful based on impact.

Regards,
Shloke

Ikeda1
Mega Guru

こんにちは。

parseInt()ではなくnumber()を使用しても動作しないでしょうか。

ServiceNowはJavascriptのVersionが低く、一部動作しない関数があります。

返信ありがとうございます。
以下でやってみましたが、resultの中身はNaNとなり、だめでした。

var result = 0;
while (XXX != null) {
    var timer = new OCTimer();
    timer.start("test");
    ・
    ・
    ・
    timer.stop('test');
    result = result + timer.result();
    gs.info(Number(result));
    ・
    ・
    ・
}

文字列の中に数字以外の文字が含まれると、該当の「NaN」のエラーとなります。

詳しくはJavascriptのnumber()関数の仕様をご確認ください。

まずは対象の文字列データの見直しを行ってみてはいかがでしょうか。