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

Can you print in log and see if your task.query() is retrieving any records?? Also


  //var task = new GlideRecord("sc_task");


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


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



Also in the above lines are you using single or double quotes?


Hi Nivedita,



I am using double quotes.


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();


   


  }




}


Hi Nivedita,



Although it doesn't create another catalog task, the comments are not added to the created catalog task. Do you have any idea?


Hi Nivedita,



I added task1.update(); and it worked fine with your code. Many thanks for your help.