Advanced reference qualifier not working undefined is not a function

tdh o2
Tera Contributor

Attempting to call a script include from an advanced reference qualifier that queries a table using the value of a string field on the form. Zip field, string, 5 digits. County field, references table that contains all counties in a state and their corresponding zip codes.  Reference qualifier should return all counties associated with the Zip in the string field  or "Out of state" (which is also a record in the counties table) if the Zip does not exist in the table. I'm receiving an error in the system logs com.glide.script.RhinoEcmaError: undefined is not a function.  Also is this script correct to return the values correctly?  Also unclear on how to return Out of State.  This is in the customer service scope.

Current reference qualifier: javascript: new TESTAjaxCountyUtil.getCounties(current.zip);

Script include:

var TESTAjaxCountyUtil = Class.create();
TESTAjaxCountyUtil.prototype = {
    initialize: function() {
    },
    
    getCounties: function (zip) {
        var counties = [];
    
        var grMatch = new GlideRecord('u_m2m_zip_counties');
        grMatch.addQuery('u_zip_code',zip);
        grMatch.query();
        while (grMatch.next()) {
            counties.push(grMatch.u_zip_code.sys_id);
                    
        }
        return 'sys_idIN' + counties;
        
    },
    type: 'TESTAjaxCountyUtil'
};

10 REPLIES 10

Did you include the () again after TESTAjaxCountyUtil in your reference qualifier?

javascript: 'sys_idIN' + new TESTAjaxCountyUtil().getCounties(current.getValue('zip'));

If this answer is helpful please mark correct and helpful!

Regards,

Christopher Perry

If this answer is helpful please mark correct and helpful!

Regards,
Chris Perry

That wasn't it... but I did find a typo I had.  So back to it running but not returning any query results.

Is the 'zip' the correct name of the field on your current table? Or is it 'u_zip' like it is for your u_m2m_zip_counties table?

If it is u_zip, you need to update the ref qualifier accordingly:

javascript: 'sys_idIN' + new TESTAjaxCountyUtil().getCounties(current.getValue('u_zip'));

 

Alternatively, it might be that the current record's 'zip' field is a string value, whereas the u_m2m_zip_counties table seems to have u_zip field set as some sort of reference field meaning it will be querying on sys_ids rather than the zip code string value itself. If that is the case, then you may need to update your script include accordingly:

var TESTAjaxCountyUtil = Class.create();
TESTAjaxCountyUtil.prototype = {
    initialize: function() {},

    getCounties: function(zip) {
        var counties = [];

        var grMatch = new GlideRecord('u_m2m_zip_counties');
        grMatch.addEncodedQuery('u_zip_code.name=' + zip); //update .name to the field where you store the string value of the zip code
        grMatch.query();
        while (grMatch.next()) {
            counties.push(grMatch.getValue('u_zip_code'));
        }
        return counties.length == 0 ? 'sys_id_of_your_out_of_state_record' : counties.join();
    },

    type: 'TESTAjaxCountyUtil'
};

Also, if any of my replies have been helpful please do mark them as helpful!

If this answer is helpful please mark correct and helpful!

Regards,

Christopher Perry

If this answer is helpful please mark correct and helpful!

Regards,
Chris Perry

So after mentioning this I ended up changing the config of the reference field on the form and the config of the table I am querying.  Below is what ended up working.  Just need to add the logic to return a specific sys_id if no records are found by the query. 

var TESTAjaxCountyUtil = Class.create();
TESTAjaxCountyUtil.prototype = {
    initialize: function() {},

    getCounties: function() {
        
        var zip = current.zip;        
        var grMatch = new GlideRecord('u_county_zip_mapping');
        grMatch.addQuery('u_zip_code', zip);
        grMatch.query();
        
        var counties = [];
        
        while (grMatch.next()) {
            counties.push(grMatch.getValue('u_county_ref'));
        }
        
        return 'sys_idIN' + counties;
        
    },

    type: 'TESTAjaxCountyUtil'
};

Zach Koch
Giga Sage
Giga Sage

Is the script Include in global scope or in customer service scope?

If this information helped resolve your issue, please remember to mark response correct and thumbs up to help future community members on this information, thanks!