- Post History
- Subscribe to RSS Feed
- Mark as New
- Mark as Read
- Bookmark
- Subscribe
- Printer Friendly Page
- Report Inappropriate Content
on 01-06-2022 08:36 PM
Hello Everyone,
In this Article we will have a look on few scenarios in MRVS.
1) How to restrict the user cannot enter more than N rows?
Lets say for example we need to restrict the user to enter only 3 rows in MRVS.
So, We can add this logic in Variable Set attributes:
max_rows=n //where 'n' is the number of rows
In above screenshot setting the max_rows=3 in variable set attributes, so after adding 3 rows in MRVS Add button will be disabled.
2) How to restrict the user cannot enter the same value in variable?
Lets say, We have a reference field referring to user table. Selected Fred Luddy in 1st row, now we need to restrict the user cannot select the same user again(Fred Luddy). For this we have a Unique checkbox available in the Variable form.
I am added Fred Luddy in 1strow, Now if I try to add the same user again it will show the error like below screenshot so user cannot Add the row with Fred Luddy as a user again.
Refer this docs for more info on the Unique checkbox.
3) How to add the Logged-in user details in MRVS based on the check box?
We can do this using onChange() Client script and Script include:
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
if (g_form.getBooleanValue('u_addme') == true) {
var ajax = new GlideAjax('Newglidingabc');
ajax.addParam('sysparm_name', 'addRowinMRVS');
ajax.addParam('sysparm_existing', g_form.getValue('user_details')); //MRVS data
ajax.getXML(getRITMdata);
function getRITMdata(response) {
var answer = response.responseXML.documentElement.getAttribute("answer");
g_form.setValue('user_details', answer);
}
} else {
var aja = new GlideAjax('Newglidingabc');
aja.addParam('sysparm_name', 'deleteRowinMRVS');
aja.addParam('sysparm_existingdata', g_form.getValue('user_details'));//MRVS data
aja.getXML(getRITMdat);
function getRITMdat(response) {
var answer = response.responseXML.documentElement.getAttribute("answer");
g_form.setValue('user_details', answer);
}
}}
addRowinMRVS: function() {
if (this.getParameter('sysparm_existing') != "") { //if multi-row varibleset is not empty
var existingdata = this.getParameter('sysparm_existing'); //getting the existing details
var existingdataStr = JSON.parse(existingdata); //parsing the data
var mrvsObj = [{
"user_name": gs.getUserID(),
"department": "IT",
"email": "manich9@xyz.com"
}]; //logged-in user details
var finalObj = mrvsObj.concat(existingdataStr); //combining both using concat
return JSON.stringify(finalObj); //returning into client side
} else { //if multirow varibleset is empty
mrvsObj = [{
"user_name": gs.getUserID(),
"department": "IT",
"email": "manich9@xyz.com"
}]; //logged-in user details
return JSON.stringify(mrvsObj); // directly returning into client side
}
},
deleteRowinMRVS: function() {
var existingdataStr = JSON.parse(this.getParameter('sysparm_existingdata')); //parsing the data
for (var i = 0; i < existingdataStr.length; i++) { //checking for all rows
if (existingdataStr[i].user_name == "6816f79cc0a8016401c5a33be04be441") { //checking if logged-in user exists
existingdataStr.splice(i, 1); //removing the row using splice
}
}
return JSON.stringify(existingdataStr); //returning into client side
},
Have a look on the below image:
Have a look on this videos for more info. on JSON format.
4)How to send the approvals to managers based on the users selected?
In Advanced script section in Approval User activity we can write the code like below:
answer = [];
var mrvs = current.variables.user_details; //use MRVS internal name
for (var i = 0; i < mrvs.getRowCount(); i++) {
var row = mrvs.getRow(i); // getting the row one by one using getRow
var grU = new GlideRecord('sys_user');
if (grU.get(row.user_name)) {
answer.push(grU.getValue('manager')); //sending approval to manager
}
}
5)How to send MRVS data in Notification?
We can achieve this using mail script and we can call the same in Notification:
(function runMailScript( /* GlideRecord */ current, /* TemplatePrinter */ template,
/* Optional EmailOutbound */
email, /* Optional GlideRecord */ email_action,
/* Optional GlideRecord */
event) {
var mrvs = current.variables.user_details; //use MRVS internal name
var count = mrvs.getRowCount(); //gives the row count of the MRVS
if (count) { //checking if it has atleast one row
template.print('<table border=1>'); //open the table
template.print('<thead>');
template.print('<tr>');
template.print('<th colspan="4"> MultiRow Variable set data</th>'); //column span
template.print('</tr>');
template.print('</thead>');
template.print('<tr>');
template.print('<th> S.No </th>');
template.print('<th> Name</th>');
template.print('<th> Email </th>');
template.print('<th> Department </th>');
template.print('</tr>');
for (var i = 0; i < count; i++) {
var row = mrvs.getRow(i);
template.print('<tr>');
template.print('<td>' + (i + 1 + ".") + '</td>');
var gUser = new GlideRecord('sys_user');
if (gUser.get(row.user_name))
template.print('<td>' + gUser.getDisplayValue() + '</td>');
template.print('<td>' + row.email + '</td>');
var gDept = new GlideRecord('cmn_department');
if (gDept.get(row.department))
template.print('</td>' + gDept.getDisplayValue() + '</td>');
template.print('</tr>');
}
template.print('</table>'); //close the table
} else {
template.print('No data in MRVS'); //if MRVS is empty
}
})(current, template, email, email_action, event);
Output will be like below screenshot:-
I've learnt table structure format from Codecademy
6) Mapping the MRVS data into form fields in Record producer?
Refer this Thread for reference.
7) Adding row in MRVS dynamically in server side?
Refer this Thread for reference.
Hope it helps
Thanks,
Murthy
- 5,076 Views
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
This is a great guide!
Can you also help me to understand how to solve my issue with MRVS please?
I posted it here https://www.servicenow.com/community/forums/searchpage/tab/message?advanced=false&allow_punctuation=...
I don't get how I can attach an onChange event to the MRVS (as a whole, not to single variables within it).
Thanks!
Mauro
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
This is a very nice article on practical use cases of MRVS. Thanks !!
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
Need to query Sys_user