- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-09-2023 09:09 PM
Hello,
I have a client script that is querying the kb_knowledge table and works properly while using the "try it" feature when editing the catalog item. But once I go to the self-portal, the script is not retrieving values from the kb_knowledge table.
function onChange(control, oldValue, newValue, isLoading) {
if (!isLoading && newValue) {
var category = g_form.getValue('category');
var subcategory = g_form.getValue('subcategory');
var kbArticle = new GlideRecord('kb_knowledge');
kbArticle.addQuery('u_knowledge_base', "General");
kbArticle.addQuery('category', category);
kbArticle.addQuery('u_subcategory', subcategory);
kbArticle.addQuery('u_issue', newValue);
kbArticle.query();
if (kbArticle.next()) {
g_form.setValue('u_knowledge_article', kbArticle.sys_id);
} else {
g_form.setValue('u_knowledge_article', '');
}
return;
}
}
The Script above is pulling 2 values from the form (onChange is my 3rd value), bouncing those 3 values off of the kb table and returning the queried kb article.
Again, this script works while in the maintain catalog "try it" feature. But not in the self-portal. I have checked and my script's UI type is set to All.
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-09-2023 09:45 PM
Hi @Jake Golden ,
It is recommended to use GlideAjax and call a script include. Move the GlideRecord part to Client Callable Script Include (Server Side) and call that in client side using GlideAjax, check the following for your reference.
Client Script:
function onChange(control, oldValue, newValue, isLoading) {
if (!isLoading && newValue) {
var category = g_form.getValue('category');
var subcategory = g_form.getValue('subcategory');
var kbGa = new GlideAjax('KB_Data_Utils');
kbGa.addParam('sysparm_name', 'getKBID');
kbGa.addParam('sysparm_cat', category);
kbGa.addParam('sysparm_sub_cat', subcategory);
kbGa.addParam('sysparm_issue', newValue);
kbGa.getXMLAnswer(populateKBID);
}
function populateKBID(answer) {
if (answer) {
g_form.setValue('u_knowledge_article', answer);
} else {
g_form.setValue('u_knowledge_article', '');
}
}
}
Client Callable Script Include:
var KB_Data_Utils = Class.create();
KB_Data_Utils.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getKBID: function() {
var category = this.getParameter('sysparm_cat');
var subcategory = this.getParameter('sysparm_sub_cat');
var issue = this.getParameter('sysparm_issue');
var kbArticle = new GlideRecord('kb_knowledge');
kbArticle.addQuery('u_knowledge_base', "General");
kbArticle.addQuery('category', category);
kbArticle.addQuery('u_subcategory', subcategory);
kbArticle.addQuery('u_issue', issue);
kbArticle.query();
if (kbArticle.next()) {
return kbArticle.sys_id + '';
}
return '';
},
type: 'KB_Data_Utils'
});
Thanks,
Anvesh
Anvesh
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-09-2023 09:36 PM
Hi @Jake Golden,
It is not re-commanded to use GlideRecord in Client scripts. Convert it to Client callable Script Include and call using GlideAjax.
For reference: GlideAjax Example Cheat Sheet (UPDATED)
Also, Client scripts type should be selected as All.
Thanks,
Sagar Pagar
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-09-2023 09:45 PM
Hi @Jake Golden ,
It is recommended to use GlideAjax and call a script include. Move the GlideRecord part to Client Callable Script Include (Server Side) and call that in client side using GlideAjax, check the following for your reference.
Client Script:
function onChange(control, oldValue, newValue, isLoading) {
if (!isLoading && newValue) {
var category = g_form.getValue('category');
var subcategory = g_form.getValue('subcategory');
var kbGa = new GlideAjax('KB_Data_Utils');
kbGa.addParam('sysparm_name', 'getKBID');
kbGa.addParam('sysparm_cat', category);
kbGa.addParam('sysparm_sub_cat', subcategory);
kbGa.addParam('sysparm_issue', newValue);
kbGa.getXMLAnswer(populateKBID);
}
function populateKBID(answer) {
if (answer) {
g_form.setValue('u_knowledge_article', answer);
} else {
g_form.setValue('u_knowledge_article', '');
}
}
}
Client Callable Script Include:
var KB_Data_Utils = Class.create();
KB_Data_Utils.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getKBID: function() {
var category = this.getParameter('sysparm_cat');
var subcategory = this.getParameter('sysparm_sub_cat');
var issue = this.getParameter('sysparm_issue');
var kbArticle = new GlideRecord('kb_knowledge');
kbArticle.addQuery('u_knowledge_base', "General");
kbArticle.addQuery('category', category);
kbArticle.addQuery('u_subcategory', subcategory);
kbArticle.addQuery('u_issue', issue);
kbArticle.query();
if (kbArticle.next()) {
return kbArticle.sys_id + '';
}
return '';
},
type: 'KB_Data_Utils'
});
Thanks,
Anvesh
Anvesh
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-10-2023 09:05 AM
Worked perfectly, thank you!