- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎08-20-2020 05:41 AM
Hi All,
I have the below client script to move list collector values from left to right. It is working in the portal but in the native UI the filter is not working, it is transferring everything from left to right. Could someone please check and let me know how to fix it.
Thanks in advance.
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
g_form.clearValue('sftp_sites_to_update');
if (newValue !== '') {
var parm = '';
if (window === null)
parm = 'portal';
else
parm = 'native';
}
var accntsList = 'sftp_sites_to_update'; // variable name of the List Collector
var filterString = 'u_active=true^owned_by=' + newValue;
alert('filterString - ' + filterString);
// filter list collector to only show the accounts owned by the current user (left side)
// reset the filter (left side) based on the above filterstring
if (parm == 'portal') {
var myListCollector = g_list.get(accntsList);
myListCollector.reset();
myListCollector.setQuery(filterString);
g_form.hideFieldMsg('sftp_current_owner', true);
g_form.showFieldMsg('sftp_current_owner', 'Please wait... searching for SFTP Account(s)...');
} else {
window[accntsList + 'g_filter'].reset();
window[accntsList + 'g_filter'].setQuery(filterString);
window[accntsList + 'acRequest'](null);
g_form.hideFieldMsg('sftp_current_owner', true);
g_form.showFieldMsg('sftp_current_owner', 'Please wait... searching for SFTP Account(s)...');
}
//now populate the Service Portal variable
if (parm == 'portal') {
var ajax = new GlideAjax('SFTPutil');
ajax.addParam('sysparm_name', 'getSFTP_Accnts');
ajax.addParam('sysparm_owner', newValue);
ajax.getXML(populateValues);
} else {
var leftBucket = gel(accntsList + '_select_0');
var rightBucket = gel(accntsList + '_select_1');
var selectedOptions = leftBucket.options;
//Get an array of all option IDs to move
var selectedIDs = new Array();
alert('selectedIDs ' + selectedIDs);
var index = 0;
for (var i = 0; i < selectedOptions.length; i++) {
selectedIDs[index] = i;
index++;
}
rightBucket.options.length = '0';
moveSelectedOptions(selectedIDs, leftBucket, rightBucket);
sortSelect(rightBucket);
g_form.hideFieldMsg('sftp_current_owner', true);
if (selectedIDs == 0) {
g_form.showFieldMsg('sftp_current_owner', 'No SFTP Account(s) found!');
}
}
function populateValues(response) {
g_form.hideFieldMsg('sftp_current_owner', true);
var answer = response.responseXML.documentElement.getAttribute("answer");
//alert('answer = ' + answer);
if (answer == '||') {
g_form.showFieldMsg('sftp_current_owner', 'No SFTP Account(s) found!');
}
var arr = answer.split('||');
//arr[1] has the sys_id of the accountID
//arr[0] has the display name of the accountID
g_form.setValue('sftp_sites_to_update', arr[1], arr[0]);
}
}
Solved! Go to Solution.
- Labels:
-
Scripting and Coding
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎08-20-2020 05:57 AM
Hi,
you can refer below blog for help for similar requirement
https://community.servicenow.com/community?id=community_blog&sys_id=a60c397edb04dc1c190dfb24399619b1
Client Script: Ensure "Isolate Script" field is set to false for onChange Catalog Client Script on that Variable
- The field Isolate Script is not present on the form view
- From the list layout it can be added and set to false
- By default it is true
Regards
Ankur
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎08-20-2020 06:11 AM
Hi,
You don't need to use gel (DOM) to set/clear List Collector value
Example:
var sysIDS = '1234,23456,34567,45678'
g_form.setValue("LISTCOLLECTORVARIABLENAME",sysIDS )
This will set the list collector value [pushing values from left slush bucket to right bucket]
g_form.clearValue("LISTCOLLECTORVARIABLENAME")
This will clear the list collector value [pushing values from right slush bucket to left bucket]
Make sure you set the "Isolate Script" to false [you can find this list of your script] when you using window objects and DOM techniques (gel, document.get, $, $j)
Regards,
JAS
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎08-20-2020 08:44 AM
Let me know if that answered your question.
If so, please mark appropriate response as correct & helpful so that this thread can be closed and others can be benefited by this.
Regards
Ankur
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎08-20-2020 09:38 AM
Hi Ankur,
Thanks for responding to my post.
I replaced my script and followed yours. But this time, the values are not going to the right bucket. Same issue in the portal.
I need to check further. Or maybe you can spot the issue quickly.
Thanks,
Jocelyn
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
g_form.clearValue('sftp_sites_to_update');
if (newValue !== '') {
var parm = '';
if (window === null)
parm = 'portal';
else
parm = 'native';
}
var ajax = new GlideAjax('SFTPutil');
ajax.addParam('sysparm_name', 'getSFTP_Accnts');
ajax.addParam('sysparm_owner', newValue);
ajax.addParam('sysparm_view', parm);
ajax.getXML(populateValues);
function populateValues(response) {
g_form.hideFieldMsg('sftp_current_owner', true);
var answer = response.responseXML.documentElement.getAttribute("answer");
//alert('answer = ' + answer);
var arr = answer.split('||');
if (window === null) {
g_form.setValue('sftp_sites_to_update', arr[0]); // Mobile/Portal Compatible
//g_form.setValue('', arr[1], arr[0]);
} else {
addItemstoList('sftp_sites_to_update', answer); // Native Compatible
}
}
function addItemstoList(listCollector, accountList) {
var parser = JSON.parse(accountList);
var arrSysId = [];
var arrName = [];
for (var i = 0; i < parser.length; i++) {
arrName.push(parser[i].name.toString());
arrSysId.push(parser[i].sys_id.toString());
}
var varName = listCollector; // variable name of the List Collector
var leftBucket = gel(varName + '_select_0');
var rightBucket = gel(varName + '_select_1');
var rightOptions = rightBucket.options;
var rightIDs = [];
//Remove --None--
for (var k = 0; k < rightOptions.length; k++) {
var value = rightOptions[k].innerHTML;
if (value == '--None--') {
rightBucket.remove(0);
}
}
// Add new options
if (arrName.length > 0) {
var myCIArray = arrName.toString().split(',');
for (var j = 0; j < myCIArray.length; j++) {
addOption(rightBucket, arrSysId[j], myCIArray[j]);
sortSelect(rightBucket);
leftBucket.onchange();
}
}
// sort the buckets
sortSelect(rightBucket);
}
}
========script include=============================
var SFTPutil = Class.create();
SFTPutil.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getSFTP_Accnts: function() {
//var accntsSYSid = [];
var listAccnts = [];
var acctOwner = this.getParameter('sysparm_owner');
gs.log('acctOwner = ' + acctOwner);
//var parm = this.getParameter(sysparm_view);
var jsonArr = [];
var sftp = new GlideRecord('u_cmdb_ci_web_service_account');
sftp.addQuery('owned_by', acctOwner);
sftp.query();
while (sftp.next()) {
if(parm == 'portal'){
listAccnts.push(sftp.u_account_id.toString());
} else if(parm == 'native'){
var obj = {};
obj.name = sftp.u_account_id.toString();
obj.sys_id = sftp.sys_id.toString();
jsonArr.push(obj);
}
}
if(parm == 'portal')
return listGroup.toString();
else
return JSON.stringify(jsonArr);
},
type: 'SFTPutil'
});
===================================
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎08-20-2020 09:51 PM
Hi Ankur,
I found the issue. I forgot to uncomment
var parm = this.getParameter('sysparm_view');
So the native UI is working perfectly, but the portal shows and error:
I will check tomorrow morning.
Thanks!
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎08-20-2020 09:52 PM
Hi Ankur,
I found the issue. I forgot to uncomment
var parm = this.getParameter('sysparm_view');
So the native UI is working perfectly, but the portal shows and error:
I will check tomorrow morning.
Thanks!