- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-07-2025 12:38 PM
Hi Team
I'm trying to make attachments mandatory on a SC task and Form . I used a catalog client script but it is not working as expected. Can Some one help me Please?
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-07-2025 12:55 PM - edited 05-07-2025 12:57 PM
function onSubmit() {
if(g_form.getValue('test') == 'Yes'){
var sys_id = g_form.getUniqueValue(); // gets sys_id of catalog task
var attachment = new GlideRecord('sys_attachment');
attachment.addQuery('table_name','sc_task');
attachment.addQuery('table_sys_id',sys_id);
attachment.query();
if (!attachment.next()) {
alert("Please add the attachment");
return false;
}
}
return true;
}
Please accept my solution if it works for you and thumps up.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-07-2025 12:55 PM - edited 05-07-2025 12:57 PM
function onSubmit() {
if(g_form.getValue('test') == 'Yes'){
var sys_id = g_form.getUniqueValue(); // gets sys_id of catalog task
var attachment = new GlideRecord('sys_attachment');
attachment.addQuery('table_name','sc_task');
attachment.addQuery('table_sys_id',sys_id);
attachment.query();
if (!attachment.next()) {
alert("Please add the attachment");
return false;
}
}
return true;
}
Please accept my solution if it works for you and thumps up.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-07-2025 12:58 PM
Please try this:
1. Create a UI script called: "setAttachmentMandatory". Set UI Type to "All".
Put this in the script section.
(function() {
"use strict";
return {
setAttachmentMandatory: function(isMandatory) {
var isSuccess;
try {
angular.element("#sc_cat_item").scope().c.data.sc_cat_item.mandatory_attachment = isMandatory;
isSuccess = true;
} catch (e) {
isSuccess = false;
//gs.log('setAttachmentMandatory() failed: ' + e);
}
return isSuccess;
},
type: "AttachmentUtil"
};
})();
2. Then in your catalog item, change the onSubmit catalog Client script to onChange... and add this script:
Make sure to check the "isolate script" and set UI Type to "All"
if (g_form.getValue('test') == 'Yes') {
g_ui_scripts.getUIScript('setAttachmentMandatory').then(function (script) {
script.setAttachmentMandatory(true);
});
} else {
g_ui_scripts.getUIScript('setAttachmentMandatory').then(function (script) {
script.setAttachmentMandatory(false);
});
}
Please mark as helpful if it works for you. Thanks
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-07-2025 01:52 PM
Hello @Dileep Raju ,
Create a script include and have it called from the client script:
var CheckAttachmentCatalogItem = Class.create();
CheckAttachmentCatalogItem.prototype = Object.extendsObject(AbstractAjaxProcessor, {
checkAttachment: function() {
var recordID = this.getParameter('sysparm_id');
var gr = new GlideRecord("sys_attachment");
gr.addQuery('table_name', 'sc_req_item');
gr.addQuery('table_sys_id', recordID);
gr.query();
if (gr.next()) {
return 'yes';
} else {
return 'no';
}
},
type: 'CheckAttachmentCatalogItem'
});
Your client script to make attachments mandatory based on the script include response will be:
function onSubmit() {
var testValue = g_form.getValue('test'); // Replace 'test' with your variable name
if (testValue == 'Yes') {
var ga = new GlideAjax('CheckAttachmentCatalogItem');
ga.addParam('sysparm_name', 'checkAttachment');
ga.addParam('sysparm_id', g_form.getUniqueValue()); // Get the RITM sys_id
var hasAttachment = ga.getXMLWait();
var result = ga.getAnswer();
if (result == 'no') {
g_form.addErrorMessage("Attachment is mandatory when 'test' is marked as 'Yes'.");
return false;
}
}
return true;
}
Mark this response as helpful if it resolved your doubt.
Thank you,
Mahesh.