Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

Using Glide Ajax on Multi Row Variable Set onSubmit Client Script

palvinderdh
Tera Contributor

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