Using Glide Ajax on Multi Row Variable Set onSubmit Client Script
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎02-05-2025 06:39 AM
Hello I am trying to implement validation on multi row variable set (MVRS) in a scope application which calls a script include using glide Ajax. the logic is preventing adding row to the MVRS when validation fails, which it should. but the issue i am having is that even when validation succeeds it still doesn't add row to the MVRS, any suggestion on when validation passes should add a row to the MVRS>
function onSubmit() {
// Get field values from the form
var sourceField = g_form.getValue('source_ip_ipv4');
var targetField = g_form.getValue('destination_ip_ipv4');
var portProtocolField = g_form.getValue('protocol_ports_ip_ipv4');
var hasError = false;
// Create GlideAjax object for source IP validation
var gaSource = new GlideAjax('FirewallUIValidationUtil');
gaSource.addParam('sysparm_name', 'validateIPV4s');
gaSource.addParam('sysparm_ip_list', sourceField);
// Create GlideAjax object for destination IP validation
var gaDest = new GlideAjax('FirewallUIValidationUtil');
gaDest.addParam('sysparm_name', 'validateIPV4s');
gaDest.addParam('sysparm_ip_list', targetField);
// GlideAjax object for source-destination combination validation
var gaCombination = new GlideAjax('FirewallUIValidationUtil');
gaCombination.addParam('sysparm_name', 'validateSourceAndDestCombination');
gaCombination.addParam('sysparm_source_ip_list', sourceField);
gaCombination.addParam('sysparm_destination_ip_list', targetField);
// Track completion of both validations
var sourceValidated = false;
var destValidated = false;
var combinationValidated = false;
// Track completed validations
var validationsCompleted = 0;
var totalValidations = 3; // We have three async validations
function checkValidationCompletion() {
//validationsCompleted++;
if (validationsCompleted === totalValidations) {
if (!hasError) {
//g_form.addInfoMessage('Rule Valited!');
var rowAdd = {
source_ip_ipv4: sourceField,
destination_ip_ipv4: targetField,
protocol_ports_ip_ipv4: portProtocolField
};
//g_form.addInfoMessage(JSON.stringify(rowAdd));
var mvrsData = g_form.getValue('firewall_rules_ip_ipv4');
var currentRows = mvrsData ? JSON.parse(mvrsData) : [];
currentRows.push(rowAdd);
var updatedRows = JSON.stringify(currentRows);
g_form.addInfoMessage(updatedRows);
g_form.setValue('firewall_rules_ip_ipv4',updatedRows);
//alert(g_form.getValue('firewall_rules_ip_ipv4'));
//g_form.submit(); // Only submit if there are no errors
//return true;
}
}
}
//Validate Source IPs
gaSource.getXMLAnswer(function(answer) {
var res = JSON.parse(answer);
if (!res.isValid) {
g_form.showFieldMsg('source_ip_ipv4', 'Invalid IP(s): ' + res.invalidIPs.join(', '), 'error');
hasError = true;
}
if (res.duplicateIPs.length > 0) {
g_form.showFieldMsg('source_ip_ipv4', 'Duplicate IP(s): ' + res.duplicateIPs.join(', '), 'error');
hasError = true;
}
sourceValidated = true;
checkValidationCompletion();
});
// Validate Destination IPs
gaDest.getXMLAnswer(function(answer) {
var res = JSON.parse(answer);
if (!res.isValid) {
g_form.showFieldMsg('destination_ip_ipv4', 'Invalid IP(s): ' + res.invalidIPs.join(', '), 'error');
hasError = true;
}
if (res.duplicateIPs.length > 0) {
g_form.showFieldMsg('destination_ip_ipv4', 'Duplicate IP(s): ' + res.duplicateIPs.join(', '), 'error');
hasError = true;
}
destValidated = true;
checkValidationCompletion();
});
// Validate Source & Destination Combination
gaCombination.getXMLAnswer(function(answer) {
var res = JSON.parse(answer);
if (!res.isValid) {
g_form.showFieldMsg('source_ip_ipv4', res.errorMsg, 'error');
hasError = true;
}
combinationValidated = true;
checkValidationCompletion();
});
return false; // Prevent default form submission while waiting for async response
}
0 REPLIES 0