The CreatorCon Call for Content is officially open! Get started here.

Creating a new Catalog Task using a Script?

dianemiro
Kilo Sage

Hi,

Basically, my requirement is to create a new Catalog Task if user commented on the RITM and no Open Catalog Tasks available. Here is my code:

function onBefore(current, previous) {

  var cmt = current.comments;

  var verifyTask = 0;

  var task = new GlideRecord("sc_task");

  task.addQuery("parent", "=", current.sys_id);

  task.addQuery("state", "<", 3);

  task.query();

  while (task.next()) {

  task.comments = cmt;

  verifyTask = 1;

  task.update();

  }

  if (verifyTask == 0){

  task.initialize();

  task.insert();

  task.request_item = current.sys_id;

  task.assignment_group.setDisplayValue('Service Desk');

  task.short_description = 'Verify approval';

  task.description = 'Check if Approver replied to RITM';

  task.comments = cmt;

  task.state = 1;

  verifyTask = 1;

  task.update();

  }

}

This code creates a new Catalog Task with State = Open. So this should not create another new Catalog Task anymore but it's creating one. What's wrong with my code?

1 ACCEPTED SOLUTION

niv1
Giga Contributor

Ok.. You can try below should work...Let me know in case of any issues



function onBefore(current, previous) {





  var cmt = current.comments;


  var task = new GlideRecord('sc_task');


  task.addQuery('request_item', "=", current.sys_id);


  task.addQuery('state', "<", 3);


  task.query();


  if(task.next())


  {


  while (task.next()) {


  task.comments = cmt;


// verifyTask = 1;


  task.update();



  }


  }



  else


{


  var task1 = new GlideRecord("sc_task");


  task1.initialize();


    task1.request_item = current.sys_id;


  task1.assignment_group.setDisplayValue('Service Desk');


  task1.short_description = 'Verify approval';


  task1.description = 'Check if Approver replied to RITM';


  task1.comments = cmt;


  task1.state = 1;


  task1.insert();


   


  }




}


View solution in original post

13 REPLIES 13

niv1
Giga Contributor

Thats great


Mihir Mohanta
Kilo Sage

Please try the below script





function onBefore(current, previous) {


  var cmt = current.comments;


  var verifyTask = 0;


  var str = "parent="+current.sys_id+"^state<3";


  var task = new GlideRecord("sc_task");


  task.addEncodedQuery(str);


  task.query();


  while (task.next()) {


  task.comments = cmt;


  verifyTask = 1;


  task.update();


  }


  if (verifyTask == 0){


  task.initialize();


  task.request_item = current.sys_id;


  task.assignment_group.setDisplayValue('Service Desk');


  task.short_description = 'Verify approval';


  task.description = 'Check if Approver replied to RITM';


  task.comments = cmt;


  task.state = 1;


  verifyTask = 1;


  task.insert();


  }


}


Hi Mihir,



Not working too It creates another task.


Hi Diane,



Please note .update() function forces other business rule to work on the form when using onBefore, can you just remove it. the code is fine.


  var cmt = current.comments;


  var verifyTask = 0;


// var str = "parent="+current.sys_id+"^state<3";


  var task = new GlideRecord("sc_task");


  task.addQuery('request_item',current.sys_id.toString()); // changed a bit


task.addQuery('state','<','3');


  task.query();


  while (task.next()) {


  task.comments = cmt;


  verifyTask = 1;


//   task.update();   // comment this


  }


  if (verifyTask == 0){


  task.initialize();


  task.request_item = current.sys_id;


  task.assignment_group.setDisplayValue('Service Desk');


  task.short_description = 'Verify approval';


  task.description = 'Check if Approver replied to RITM';


  task.comments = cmt;


  task.state = 1;


  verifyTask = 1;


  task.insert();


  }