- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎10-02-2023 06:49 AM
Hi there! I have a business requirement for a form to have a button to change the state based on two conditions. 1. The form must have an attachment and 2. The form must have two mandatory questions answered. This application is in a scoped app. Thus far, I have created a UI Action and a script include. The logic I have works whenever I start a new record. My problem is, if I save a record and answer one of the conditions, but not the other, it is going ahead and updating the state. Can anyone help me with this?
As you can see in the below image, my state has updated from open to work in progress, but only the attachment condition has been fulfilled. The 'Created & Assigned' and 'Test Fields' should still be mandatory and the state should still be open.
UI Action
function changeState() {
var ga = new GlideAjax("x_755950_disclos_0.getAttachmentsDisclosure");
ga.addParam('sysparm_name', 'checkAttachment');
ga.addParam('sysparm_sysID', g_form.getUniqueValue());
ga.addParam('sysparm_tableName', g_form.getTableName());
ga.getXML(validateForm);
function validateForm(response) {
var answer = response.responseXML.documentElement.getAttribute("answer");
if (answer == "false") {
g_form.addErrorMessage("You need to add an attachment");
g_form.setMandatory('u_create_and_assigned', true);
g_form.hideFieldMsg('u_create_and_assigned');
g_form.showFieldMsg('u_create_and_assigned', "Please select an answer before changing the state.");
g_form.setMandatory('test_field', true);
g_form.hideFieldMsg('test_field');
g_form.showFieldMsg('test_field', "Please select an answer before changing the state.");
} else {
g_form.setValue('state', 2);
g_form.setMandatory('u_create_and_assigned', false);
g_form.setMandatory('test_field', false);
}
}
// gsftSubmit(null, g_form.getFormElement(), 'check_fields');
}
Script Include:
var getAttachmentsDisclosure = Class.create();
getAttachmentsDisclosure.prototype = Object.extendsObject(global.AbstractAjaxProcessor, {
checkAttachment: function() {
var sysID = this.getParameter('sysparm_sysID');
var tableName = this.getParameter('sysparm_tableName');
var attachment = new GlideSysAttachment();
var agr = attachment.getAttachments(tableName, sysID);
if (agr.next()) {
return true;
} else {
return false;
}
},
type: 'getAttachmentsDisclosure'
});
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎10-02-2023 07:22 AM
function changeState() {
var attachmentConditionMet = false;
var mandatoryFieldsConditionMet = false;
// Check the attachment condition
var ga = new GlideAjax("x_755950_disclos_0.getAttachmentsDisclosure");
ga.addParam('sysparm_name', 'checkAttachment');
ga.addParam('sysparm_sysID', g_form.getUniqueValue());
ga.addParam('sysparm_tableName', g_form.getTableName());
ga.getXML(function (response) {
var answer = response.responseXML.documentElement.getAttribute("answer");
if (answer == "false") {
g_form.addErrorMessage("You need to add an attachment");
} else {
attachmentConditionMet = true;
checkAndUpdateState();
}
});
// Check the mandatory fields condition
var uCreateAndAssignedValue = g_form.getValue('u_create_and_assigned');
var testFieldValue = g_form.getValue('test_field');
if (!uCreateAndAssignedValue || !testFieldValue) {
g_form.addErrorMessage("Please answer both mandatory questions");
} else {
mandatoryFieldsConditionMet = true;
checkAndUpdateState();
}
function checkAndUpdateState() {
if (attachmentConditionMet && mandatoryFieldsConditionMet) {
// Both conditions are met, change the state
g_form.setValue('state', 2);
g_form.setMandatory('u_create_and_assigned', false);
g_form.setMandatory('test_field', false);
} else {
// At least one condition is not met, do not change the state
g_form.setValue('state', 1); // Set the state back to 'Open' if needed
g_form.setMandatory('u_create_and_assigned', true);
g_form.setMandatory('test_field', true);
}
}
}
Let me know if the above things works ...
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎10-02-2023 07:46 AM
Hi @JennieD1
If possible can you share the screenshot of UI action form.
You can utilise the condition field in UI action form.
ServiceNow Developer
I know one thing, and that is that I know nothing.
- Socrates
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎10-02-2023 07:52 AM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎10-02-2023 09:45 AM
Hi @JennieD1 ,
Apologies for asking again. So where are stuck now, m sorry at my end the replies are kind of jumbled. Was away for sometime, what is the latest update are we able to enter into the if condition?
if not progressed will try to recreate it in my PDI and share the code
Thanks,
Danish
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎10-02-2023 10:21 AM
Okay so as for right now this is my code for the ui action (we have not touched SI code)
function changeState() {
var ga = new GlideAjax("x_755950_disclos_0.getAttachmentsDisclosure");
ga.addParam('sysparm_name', 'checkAttachment');
ga.addParam('sysparm_sysID', g_form.getUniqueValue());
ga.addParam('sysparm_tableName', g_form.getTableName());
ga.getXML(validateForm);
function validateForm(response) {
var answer = response.responseXML.documentElement.getAttribute("answer");
alert(answer);
if (answer == 'false' && (g_form.getValue('u_create_and_assigned') == '' || g_form.getValue('test_field') == '')) {
g_form.addErrorMessage("You need to add an attachment");
g_form.setMandatory('u_create_and_assigned', true);
g_form.hideFieldMsg('u_create_and_assigned');
g_form.showFieldMsg('u_create_and_assigned', "Please select an answer before changing the state.");
g_form.setMandatory('test_field', true);
g_form.hideFieldMsg('test_field');
g_form.showFieldMsg('test_field', "Please select an answer before changing the state.");
} else {
g_form.setValue('state', 2);
g_form.setMandatory('u_create_and_assigned', false);
g_form.setMandatory('test_field', false);
}
}
// gsftSubmit(null, g_form.getFormElement(), 'check_fields');
}
As of right now the form will update from open to WIP if only one condition is met.