Create each task for every entry on Multi Row Variable Set (MRVS)

Shruti Navalgu1
Kilo Contributor

I am trying to create each task for every entry on the multi-row variable set. I am using flow designer to achieve but it doesn't work, please let me know if there is any other way to get through this

1 ACCEPTED SOLUTION

asifnoor
Kilo Patron

Hello Shruti,

You can write after Br on sc_req_item and can create catalog tasks. you can try like this

After insert on sc_req_item

condition: item is <your_cat_item>

Script

var mrvs = current.variables.your_mrvs_name;
var rowCount = mrvs.getRowCount();
for (var i = 0; i < rowCount; i++) {
  //if you wnat to read data from mrvs and assign to task then
  var row = mrvs.getRow(i);
  var sc_task = new GlideRecord("sc_task");
  sc_task.initialize();
  sc_task.short_description = row.your_variable;
  sc_task.insert();
}

Mark the comment as a correct answer and also helpful if it helps to solve the problem.

 

View solution in original post

18 REPLIES 18

Shruti Navalgu1
Kilo Contributor

Hi Asif,

Thank you for writing back 🙂

I tried the above script, the insertion isn't happening as the details of the MRVS is printing in array format. Please find the below-

find_real_file.png

So i did parsing with the below script - 

 

(function executeRule(current, previous /*null when async*/ ) {

var mrvs = current.variables.for_bulk_request;
gs.log('mrvs: ' + mrvs);
var rowCount = mrvs.getRowCount();
gs.log('RowCount: ' + rowCount);
var fromCount = 0;
var i;
var j;
var row;
var parser = new global.JSONParser();

var parsed = parser.parse(mrvs);
gs.log('Parsed: ' + parsed);
gs.log('Parsed123: ' + parsed.length);
var pLength = parsed.length;
for (i = 0; i < pLength; i++) {


var peripheralType = parsed.mrvs[i].u_please_select_type_of_computer_peripherals_mv;
var compPeripheral = parsed.mrvs[i].u_please_select_computer_peripherals_mv.toString();
var abNumber = parsed.mrvs[i].ab_number_mv;
var location = parsed.mrvs[i].location_mv.toString();
var costCentre = parsed.mrvs[i].cost_centre_mv.toString();
var brid = parsed.mrvs[i].brid_mv;
var name = parsed.mrvs[i].name_mv.toString();


var sc_task = new GlideRecord("sc_task");
sc_task.initialize();
sc_task.short_description = 'Task for Hardware Team to coordinate device provisioning to user';
sc_task.u_please_select_type_of_computer_peripherals_mv = peripheralType;
sc_task.u_please_select_computer_peripherals_mv = compPeripheral;
sc_task.ab_number_mv = abNumber;
sc_task.location_mv = location;
sc_task.cost_centre_mv = costCentre;
sc_task.brid_mv = brid;
sc_task.name_mv = name;
fromCount++;
sc_task.insert();
}

})(current, previous);

 

Unaware of what am doing wrong. Can you please suggest.

 

Thanks,

Shruti

Hi Shruti,

Can you try this.

(function executeRule(current, previous /*null when async*/ ) {

var mrvs = current.variables.for_bulk_request;
gs.log('mrvs: ' + mrvs);
var rowCount = mrvs.getRowCount();
gs.log('RowCount: ' + rowCount);
var fromCount = 0;
var i;
var j;
var row;
var parser = new global.JSONParser();

var parsed = parser.parse(mrvs);
gs.log('Parsed: ' + parsed);
gs.log('Parsed123: ' + parsed.length);
var pLength = parsed.length;
for (i = 0; i < rowCount; i++) {
var row = mrvs.getRow(i);
var peripheralType = row.u_please_select_type_of_computer_peripherals_mv;
var compPeripheral = row.u_please_select_computer_peripherals_mv.toString();
var abNumber = row.ab_number_mv;
var location = row.location_mv.toString();
var costCentre = row.cost_centre_mv.toString();
var brid = row.brid_mv;
var name = row.name_mv.toString();


var sc_task = new GlideRecord("sc_task");
sc_task.initialize();
sc_task.short_description = 'Task for Hardware Team to coordinate device provisioning to user';
sc_task.u_please_select_type_of_computer_peripherals_mv = peripheralType;
sc_task.u_please_select_computer_peripherals_mv = compPeripheral;
sc_task.ab_number_mv = abNumber;
sc_task.location_mv = location;
sc_task.cost_centre_mv = costCentre;
sc_task.brid_mv = brid;
sc_task.name_mv = name;
fromCount++;
sc_task.insert();
}

})(current, previous);

Hi Asif,

I tried the above, problem is when i parse and try to get the data, value in the log is displayed as undefined.

find_real_file.png

 

Should the array values be split and moved to a variable?

 

Thanks,

Shruti

Have you had a look at the article I mentioned? Proven working mechanism.

Kind regards,
Mark
2020 ServiceNow Community MVP
2020 ServiceNow Developer MVP

---

LinkedIn
Community article list

 

Kind regards,

 

Mark Roethof

Independent ServiceNow Consultant

10x ServiceNow MVP

---

 

~444 Articles, Blogs, Videos, Podcasts, Share projects - Experiences from the field

LinkedIn

Hi Mark,

I tried it for a catalog, and used current.variables.my_mrvs_name. I am getting the values entered in mrvs in an array, the tasks aren't created even after using parse. Just struck with it trying different methods to do it.

 

Also, I used flow designer which isn't affected when the changes are made to BR or runscript. Please suggest if anything else can be used to get this working.

 

(function executeRule(current, previous /*null when async*/ ) {

var mrvs = current.variables.for_bulk_request;
gs.log('mrvs: ' + mrvs);
var rowCount = mrvs.getRowCount();
gs.log('RowCount: ' + rowCount);
var fromCount = 0;
var i;
var j;
var row;
var parser = new global.JSONParser();
gs.log('Parser: ' + parser);
var parsed = parser.parse(mrvs);
gs.log('Parsed: ' + parsed);
gs.log('Parsed123: ' + parsed.length);
var pLength = parsed.length;
gs.log('Parse Length: ' + parsed.length);
for (i = 0; i < pLength; i++) {


var peripheralType = parsed.mrvs[i].u_please_select_type_of_computer_peripherals_mv;
gs.log('peripheralType: ' + peripheralType);
var compPeripheral = parsed.mrvs[i].u_please_select_computer_peripherals_mv.toString();
gs.log('xxxcompPeripheral: ' + compPeripheral);
var abNumber = parsed.mrvs[i].ab_number_mv;
gs.log('xxxabNumber: ' + abNumber);

var location = parsed.mrvs[i].location_mv.toString();
gs.log('xxxlocation: ' + location);

var costCentre = parsed.mrvs[i].cost_centre_mv.toString();
gs.log('xxxcostCentre: ' + costCentre);

var brid = parsed.mrvs[i].brid_mv;
gs.log('xxxbrid: ' + brid);

var name = parsed.mrvs[i].name_mv.toString();
gs.log('xxxname: ' + name);

 

var sc_task = new GlideRecord("sc_task");
sc_task.initialize();
sc_task.short_description = 'Task for Hardware Team to coordinate device provisioning to user';
gs.log('SD: ' + short_description);

sc_task.u_please_select_type_of_computer_peripherals_mv = peripheralType;
sc_task.u_please_select_computer_peripherals_mv = compPeripheral;
sc_task.ab_number_mv = abNumber;
sc_task.location_mv = location;
sc_task.cost_centre_mv = costCentre;
sc_task.brid_mv = brid;
sc_task.name_mv = name;
fromCount++;
sc_task.insert();
}


})(current, previous);

 

find_real_file.png

 

 

find_real_file.png

 

Right now i haven't mapped any WF or Flow Designer to catalog to check if the Tasks are created with BR alone.

 

Thanks,

Shruti