Setting Reference Qualifier through Client Script on List Collector Variable
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
2 hours ago
Hello,
I am currently building a catalog item where I have a need to pull a list of servers in a list collector variable as this selection could be multiple choice. The issue is I need this list to filter based off the selections of two other variables. I have tried setting this field to basically pull nothing through a simple reference qualifier so it would not cause long loading times on the catalog as it tries to pull thousands of items from cmdb_rel_ci (pulling the child server).
Because I am pulling a reference from cmdb_rel_ci what I am trying to do is have a variable "application_name" that is from the "cmdb_ci_business_app" (same as "parent" on "cmdb_rel_ci") table and "server_types" that is pulling from "sys_db_object" for the Class name.
I basically need "server_name_s" (child server) to populate options where "application_name" is the parent (the display name not the sys_id of the record) and the "server_types" are the class.
Is it possible to set a reference qualifier through an "onChange" client script or does this need to be done in an advanced reference qualifier? I have tried that as well and that does not seem to work also.
function onChange(control, oldValue, newValue, isLoading, isTemplate) {
if (isLoading || newValue === '') {
return;
}
//stores application_name sysID and pulls server names by parent sysID which is the application_name variable referenced
var appName = g_form.getDisplayValue('application_name');
var serverTypes = g_form.getDisplayValue('server_types');
if (!appName || !serverTypes) {
g_form.clearValue('server_name_s');
}
var refQual = 'parent.name=' + appName + '^child.sys_class_nameIN' + serverTypes;
g_form.setReferenceQual('server_name_s', refQual);
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
2 hours ago
Hello @tiguin2798 ,
try passing sys_id's in refQual i.e try using .getValue instead of display value..
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
2 hours ago
I had tried this and this was not working as well. For "application_name" this is a reference to the "cmdb_ci_business_app" table but on "cmdb_rel_ci" table "parent" (matches "application_name") is a string vs a sys_id record.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
an hour ago
An advanced reference qualifier is a better approach. Be certain that you also add a Variable attribute like
ref_qual_elements=var_1;var_2
Post your attempt if it's still not working.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
an hour ago
HI @tiguin2798 ,
if your list collector is referencing cmdb_rel_ci
try this
javascript:'parent=' + current.variables.application_name + '^child.sys_class_nameIN' + current.variables.server_types;
if it's referencing the server table try this
javascript:(function() {
var arr = [];
var relGr = new GlideRecord('cmdb_rel_ci');
relGr.addEncodeQuery('parent=' + current.variables.application_name + '^child.sys_class_nameIN' + current.variables.server_types);
relGr.query();
while (relGr.next()) {
arr.push(relGr.getValue('child'));
}
return 'sys_idIN' + arr.join();
})();
variable attributes used based on your variables names from you script on which the list collector is dependent on
ref_qual_elements=application_name;server_types
Please mark my answer as helpful/correct if it resolves your query.
Regards,
Chaitanya
