We're reclaiming inactive PDIs to keep them available for active builders. Learn what's changing, who's affected, and how to protect your work. Read More

Onsubmit script not works

sivananda80
Tera Expert

Hi team

I have used client and script include.Client is in " Asset Management Common". script include in Global scope
and client callable and applies on all scope

based on some condition i don't want smbit the form and alert msg or error msg. i tired many ways not works. getting getting java console error while submitting . can you please help me on that

script inculde

var AssetTerritoryUtils = Class.create();
AssetTerritoryUtils.prototype = Object.extendsObject(global.AbstractAjaxProcessor, {

    validateAssetTerritories: function() {

        var assetIds = this.getParameter('sysparm_asset_ids');
        if (!assetIds)
            return JSON.stringify({
                success: true
            });

        var assetArr = assetIds.split(',');
        var companyMap = {};

        var assetGR = new GlideRecord('alm_asset');
        assetGR.addQuery('sys_id', 'IN', assetArr);
        assetGR.query();

        while (assetGR.next()) {

            var company = assetGR.getValue('company');

            if (!company)
                continue;

            if (!companyMap[company])
                companyMap[company] = [];

            companyMap[company].push(assetGR.getDisplayValue());
        }

        var invalidAssets = [];

        for (var companyId in companyMap) {

            var procGR = new GlideRecord('sn_hamp_territory_procurement');
            procGR.addQuery('u_company', companyId);
            procGR.query();

            var optIn = false;

            if (procGR.next()) {
                optIn = procGR.getValue('u_opt_in') == '1' ||
                         procGR.getValue('u_opt_in') == 'true';
            }

            if (!optIn) {
                invalidAssets = invalidAssets.concat(companyMap[companyId]);
            }
        }

        if (invalidAssets.length > 0) {
            return JSON.stringify({
                success: false,
                message: 'Territory is not Opt-In for asset(s): ' +
                         invalidAssets.join(', ')
            });
        }

        return JSON.stringify({
            success: true
        });
    },

    type: 'AssetTerritoryUtils'
});


// var AssetTerritoryUtils = Class.create();

// AssetTerritoryUtils.prototype = Object.extendsObject(global.AbstractAjaxProcessor, {

//     validateAssetTerritories: function() {
//         return JSON.stringify({
//             success: true
//         });
//     },

//     type: 'AssetTerritoryUtils'
// });



// var AssetTerritoryUtils = Class.create();

// AssetTerritoryUtils.prototype = Object.extendsObject(global.AbstractAjaxProcessor, {
 
//     validateAssetTerritories: function() {
 
//         var assetIds = this.getParameter('sysparm_asset_ids');
 
//         if (!assetIds) {

//             return JSON.stringify({ success: true });

//         }
 
//         var assetArr = assetIds.split(',');

//         var companyMap = {};

//         var noCompanyAssets = [];
 
//         var assetGR = new GlideRecord('alm_asset');

//         assetGR.addQuery('sys_id', 'IN', assetArr);

//         assetGR.query();
 
//         while (assetGR.next()) {
 
//             var company = assetGR.getValue('company');

//             var displayName = assetGR.getDisplayValue();
 
//             // FIX: don't silently skip assets with no company —

//             // flag them as invalid instead of letting them pass unvalidated

//             if (!company) {

//                 noCompanyAssets.push(displayName);

//                 continue;

//             }
 
//             if (!companyMap[company]) {

//                 companyMap[company] = [];

//             }

//             companyMap[company].push(displayName);

//         }
 
//         var invalidAssets = [];
 
//         for (var companyId in companyMap) {
 
//             var procGR = new GlideRecord('sn_hamp_territory_procurement');

//             procGR.addQuery('u_company', companyId);

//             procGR.query();
 
//             // FIX: check ALL procurement records for this company, not just the first.

//             // Company is opt-in only if AT LEAST ONE matching record is opt-in true.

//             // (Flip this logic to "ALL must be true" instead if that's the actual business rule.)

//             var optIn = false;
 
//             while (procGR.next()) {

//                 var val = procGR.getValue('u_opt_in');

//                 if (val == '1' || val == 'true') {

//                     optIn = true;

//                     break;

//                 }

//             }
 
//             if (!optIn) {

//                 invalidAssets = invalidAssets.concat(companyMap[companyId]);

//             }

//         }
 
//         // FIX: assets with no company are always treated as invalid/unvalidated

//         if (noCompanyAssets.length > 0) {

//             invalidAssets = invalidAssets.concat(noCompanyAssets);

//         }
 
//         if (invalidAssets.length > 0) {

//             return JSON.stringify({

//                 success: false,

//                 message: 'Territory is not Opt-In for asset(s): ' +

//                     invalidAssets.join(', ')

//             });

//         }
 
//         return JSON.stringify({ success: true });

//     },
 
//     type: 'AssetTerritoryUtils'

// });
 
client script
var validated = false;

function onSubmit() {

    if (validated) {
        return true;
    }

    var ga = new GlideAjax('global.AssetTerritoryUtils');

    ga.addParam('sysparm_name', 'validateAssetTerritories');
    ga.addParam('sysparm_asset_ids', g_form.getValue('assets'));

    ga.getXMLAnswer(function(answer) {

        var result = JSON.parse(answer);

        if (result.success === true) {

            validated = true;

            // Trigger submit again
            $('.btn-primary:contains("Submit")').click();

        } else {

            g_form.addErrorMessage(
                result.message || 'Territory is not Opt-In'
            );
        }
    });

    return false;
}









2 REPLIES 2

Tanushree Maiti
Tera Patron

Hi @sivananda80 

 

Share the error message or error screen shot.

 

 

Please Accept the solution if it assisted you with your question & Mark this response as Helpful.
Regards
Tanushree Maiti
ServiceNow Technical Architect
LinkedIn: https://www.linkedin.com/in/tanushreemaiti

Sandeep Rajput
Tera Patron

@sivananda80 Please refer to this article https://www.servicenow.com/community/developer-blog/how-to-async-glideajax-in-an-onsubmit-script/ba-... to know the steps to call GlideAjax in an onSubmit client script.

 

Also,  the following piece of code might be causing an issue in your client script.

 // Trigger submit again
            $('.btn-primary:contains("Submit")').click();

 

In order to submit the form automatically I recommend using g_form.submit('action name'); Please refer to the article shared above for the more information.