クエリ条件でNot Start Withのアサイングループ(Referenceタイプ)を抽出する方法
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
09-19-2022 05:35 PM
コミュニティの皆様
いつもお世話になっております。
私はProblemテーブルの自動クローズにて、
追加要件として、以下の抽出条件を追加する必要があります。
アサイングループの先頭がABCではない
(※ただし、アサイン先ユーザにAbelとBethが登録されている場合は例外とする)
アサイングループグループの先頭がDEFではない
→想定している結果としては、先頭がABC、DEFのアサイングループが設定されている
Problemレコードは自動クローズできないようにしたいというものです。
試しに以下のスクリプトを試してみましたが、
先頭がABC, DEFのアサイングループでもクローズされてしまいます。
問題などがあれば、ご教示頂きたいです。
よろしくお願いいたします。
autoCloseProblems();
function autoCloseProblems() {
var prb = new GlideRecord("problem");
prb.addQuery("problem_state", ProblemState.STATES.RESOLVED);
prb.addQuery("assignment_group.name", "NOT LIKE", "ABC");
//Abelのsys_id
prb.addOrQuery("assigned_to", "62826bf03710200044e0bfc8bcbe5df1");
//Bethのsys_id
prb.addOrQuery("assigned_to", "46d44a23a9fe19810012d100cca80666");
prb.addQuery("assignment_group", "NOT LIKE", "DEF");
//テストは即時クローズで確認
//prb.addQuery("resolved_at", "<=", gs.daysAgo(2));
prb.query();
gs.info("【problem autoclose確認】problemの数:"+ prb.number);
while (prb.next()) {
var pTask = new GlideRecord("problem_task");
pTask.addEncodedQuery("stateIN151,152,154");
pTask.addQuery("problem", prb.getUniqueValue());
pTask.setLimit(1);
pTask.query();
if (!pTask.hasNext()) {
prb.problem_state = ProblemState.STATES.CLOSED;
prb.state = ProblemState.STATES.CLOSED;
prb.active = false;
prb.closed_by = prb.sys_updated_by;
prb.update();
}
}
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
09-19-2022 08:18 PM
「.name」の付け忘れではないでしょうか。ただしこの間違いであってもGroup「ABC」は除外されるはずです。実際にScriptを実行しても「ABC」は除外されました。
正: prb.addQuery("assignment_group.name", "NOT LIKE", "DEF");
誤: prb.addQuery("assignment_group", "NOT LIKE", "DEF");
それと「gs.info("【problem autoclose確認】problemの数:"+ prb.number);」はwhileの中に書くべきではないでしょうか。
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
09-19-2022 09:04 PM
iwaiさん
ご回答ありがとうございます。
nameの付け忘れではなく、"NOT LIKE"は機能しないようです。
試しにNOT LIKE→DOES NOT CONTAINに変更したところ、
一部は想定通りにいきましたが、一か所うまくいかない箇所があります。
それはABCグループが設定かつAbel or Bethがアサイン先ユーザに設定されている時で、クローズされる想定でしたが、クローズされませんでした。
こちらについて、何か原因が思い当りましたら、
ご教示頂きたいです。
よろしくお願いいたします。
修正後スクリプト:
autoCloseProblems();
function autoCloseProblems() {
try {
gs.info("【problem autoclose確認】開始");
var prb = new GlideRecord("problem");
prb.addQuery("problem_state", ProblemState.STATES.RESOLVED);
prb.addQuery("assignment_group.name", "DOES NOT CONTAIN", "ABC");
//Abelのsys_id
prb.addOrQuery("assigned_to", "62826bf03710200044e0bfc8bcbe5df1");
//Bethのsys_id
prb.addOrQuery("assigned_to", "46d44a23a9fe19810012d100cca80666");
prb.addQuery("assignment_group.name", "DOES NOT CONTAIN", "DEF");
//prb.addQuery("resolved_at", "<=", gs.daysAgo(2));
prb.query();
while (prb.next()) {
var pTask = new GlideRecord("problem_task");
pTask.addEncodedQuery("stateIN151,152,154");
pTask.addQuery("problem", prb.getUniqueValue());
pTask.setLimit(1);
pTask.query();
gs.info("【problem autoclose確認】problem_task:" + pTask.hasNext());
if (!pTask.hasNext()) {
prb.problem_state = ProblemState.STATES.CLOSED;
prb.state = ProblemState.STATES.CLOSED;
prb.active = false;
prb.closed_by = prb.sys_updated_by;
prb.update();
}
}
gs.info("【problem autoclose確認】problemクローズ数:" + prb.getRowCount());
gs.info("【problem autoclose確認】終了");
}
catch(ex){
gs.info("【problem autoclose確認】例外終了理由:" + ex);
}
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
09-19-2022 11:28 PM
ORについては下記の通りaddOrConditionを使います。
"DOES NOT CONTAIN"なのか"NOT LIKE" テストした結果、同じ結果となりました。
Operators available for filters and queries (servicenow.com)
var testQueryOperator = [
"",
"DOES NOT CONTAIN",
"NOT LIKE",
"NOTLIKE",
"DOESNOTCONTAIN"
];
var prb;
var qc;
var msg = [];
for (var testNo = 0; testNo < testQueryOperator.length; testNo++) {
prb = new GlideRecord("problem");
//prb.addQuery("problem_state", ProblemState.STATES.RESOLVED);
if(testQueryOperator[testNo]){
prb.addQuery("problem_state", ProblemState.STATES.RESOLVED);
qc = prb.addQuery("assignment_group.name", testQueryOperator[testNo], "ABC");
}else{
qc = prb.addQuery("problem_state", ProblemState.STATES.RESOLVED);
}
//Abelのsys_id
//prb.addOrQuery("assigned_to", "62826bf03710200044e0bfc8bcbe5df1");
qc.addOrCondition("assigned_to", "62826bf03710200044e0bfc8bcbe5df1");
//Bethのsys_id
//prb.addOrQuery("assigned_to", "46d44a23a9fe19810012d100cca80666");
qc.addOrCondition("assigned_to", "46d44a23a9fe19810012d100cca80666");
if(testQueryOperator[testNo]){
prb.addQuery("assignment_group.name", testQueryOperator[testNo], "DEF");
}
//prb.addQuery("resolved_at", "<=", gs.daysAgo(2));
prb.query();
msg.push('Test ' + testNo + ', QueryOperator:' + testQueryOperator[testNo] + ', EncodedQuery:' + prb.getEncodedQuery());
if(!prb.hasNext()){
msg.push('Test ' + testNo + ', No records to display');
}
while (prb.next()) {
msg.push('Test ' + testNo + ', ' + prb.number + ' : ' + prb.assignment_group.getDisplayValue());
}
}
gs.info(msg.join('\n'));
/* Output Log
Test 0, QueryOperator:, EncodedQuery:problem_state=101^ORassigned_to=62826bf03710200044e0bfc8bcbe5df1^ORassigned_to=46d44a23a9fe19810012d100cca80666
Test 0, PRB0001000 :
Test 0, PRB0001001 :
Test 0, PRB0007601 :
Test 0, PRB0040001 : ABC
Test 0, PRB0040002 : DEF
Test 0, PRB0040003 : GHI
Test 1, QueryOperator:DOES NOT CONTAIN, EncodedQuery:problem_state=101^assignment_group.nameDOES NOT CONTAINABC^ORassigned_to=62826bf03710200044e0bfc8bcbe5df1^ORassigned_to=46d44a23a9fe19810012d100cca80666^assignment_group.nameDOES NOT CONTAINDEF
Test 1, PRB0040003 : GHI
Test 2, QueryOperator:NOT LIKE, EncodedQuery:problem_state=101^assignment_group.nameNOT LIKEABC^ORassigned_to=62826bf03710200044e0bfc8bcbe5df1^ORassigned_to=46d44a23a9fe19810012d100cca80666^assignment_group.nameNOT LIKEDEF
Test 2, PRB0040003 : GHI
Test 3, QueryOperator:NOTLIKE, EncodedQuery:problem_state=101^assignment_group.nameNotValidABC^ORassigned_to=62826bf03710200044e0bfc8bcbe5df1^ORassigned_to=46d44a23a9fe19810012d100cca80666^assignment_group.nameNotValidDEF
Test 3, No records to display
Test 4, QueryOperator:DOESNOTCONTAIN, EncodedQuery:problem_state=101^assignment_group.nameNotValidABC^ORassigned_to=62826bf03710200044e0bfc8bcbe5df1^ORassigned_to=46d44a23a9fe19810012d100cca80666^assignment_group.nameNotValidDEF
Test 4, No records to display
*/