Search code examples
javascriptservicenow

servicenow integrations problem with while


i have a problem, I am trying to take the value of a field of the users table that I populated in the first while, but when I try to take the value in the second while of the second call, it returns 0, I cannot understand why, the values ​​in the field are populated.

my code below:

var r = new sn_ws.RESTMessageV2('success_factors_api', 'GET');
var response = r.execute();
var reviver = function(key, value) {
    if (typeof value === 'undefined') {
        return null;
    }
};
var responseBody = JSON.parse(response.getBody(), reviver());
var httpStatus = response.getStatusCode();
//gs.info(responseBody.d.results[0].nationalId);
var gr = new GlideRecord('sys_user');
gr.addEncodedQuery('u_codice_fiscaleISNOTEMPTY');
gr.query();
while (gr.next()) {
    var fiscalCode = gr.getValue('u_codice_fiscale');
    responseBody.d.results.forEach(function(obj) {
        if (fiscalCode === obj.nationalId) {
            gr.u_personal_id_external_successfactor = obj.personIdExternal;
            gr.update();

        }

    });

}

var r2 = new sn_ws.RESTMessageV2('success_factors_api', 'GETEMPLOYMENT');

var response2 = r2.execute();
var reviver2 = function(key, value) {
    if (typeof value === 'undefined') {
        return null;
    }
};
var responseBody2 = JSON.parse(response2.getBody(), reviver2());
var httpStatus2 = response2.getStatusCode();
gr.addEncodedQuery('u_personal_id_external_successfactorISNOTEMPTY');
while (gr.next()) {
    var personalIdExternal = gr.getValue('u_personal_id_external_successfactor');
    gs.info(personalIdExternal); //return me 0
    responseBody2.d.results.forEach(function(obj) {
        if (personalIdExternal === obj.personIdExternal) {
            gr.u_user_id_successfactor = obj.userId;
            gr.update();
        }

    });

}

Solution

  • Your second loop is missing a gr.query(). Also, you should never reuse a GlideRecord like that. Declare a new GlideRecord for the second loop.