REST Message Pagination

Community Alums
Not applicable

Hello Everyone,

 

I have REST Message through which code loops through all the pages available in the 3rd party app and responds back to ServiceNow. Additionally, I want to stop processing once records are over.

 

Problem statement: The pointer loops through first page and does not go to next pages.

Script:

 

var baseUrl = "https:first_page/api/arsys/v1.0/entry/HPD:Help%20Desk?&q=%27Status%27%3C=%22Pending%22"; // first page 

function fetchRecords(baseUrl) {
    var r = new sn_ws.RESTMessageV2('Integration', 'get token');
    var TOKEN_SYS_PROP_NAME = '';
    var authBodyContent = 'dXNlcm5hbWU9YWtob3Nobm9vZEBhY29yaW8uY29tJnBhc3N3b3JkPTEyMzQ=';
    r.setStringParameterNoEscape('url', 'https://lausd-restapi.onbmc.com/api/jwt/login'); //
    var authBodyContentDecoded = GlideStringUtil.base64Decode(authBodyContent); //
    r.setRequestBody(authBodyContentDecoded);

    var response = r.execute();
    var responseBody = response.getBody();
    var httpStatus = response.getStatusCode();
    TOKEN_SYS_PROP_NAME = ("AR-JWT " + responseBody + '');
    gs.print(TOKEN_SYS_PROP_NAME);

    rm = new sn_ws.RESTMessageV2('global.Helix Integration', 'get helix incidents');
    rm.setStringParameterNoEscape('authToken', TOKEN_SYS_PROP_NAME);
    rm.setStringParameterNoEscape('url', baseUrl);

    var response1 = rm.execute();
    var responseBody1 = response1.getBody();
    var parsedResponse = JSON.parse(responseBody1);
    //var parser = new JSONParser();
    //var result = parsedResponse;
    var httpStatus1 = response.getStatusCode();
    //gs.print(result);

    if (parsedResponse.entries && parsedResponse.entries.length > 0) {
        processRecords(parsedResponse.entries);
    }

    if (parsedResponse._links) {
        baseUrl = JSON.stringify(parsedResponse._links.next);
        fetchRecords(JSON.stringify(parsedResponse._links.next));
    }

    else{
        gs.print("Processing completed");
    }

    function processRecords(entries) {
        for (var i = 0; i < entries.length; i++) {
            var num = entries[i].values["Incident Number"];
            var submitter = entries[i].values["Submitter"];
            var sub_date = entries[i].values["Submit Date"];
            var cat = entries[i].values["Category"];
            var ass_id = entries[i].values["Assignee Id"];
            var last_mod_by = entries[i].values["Last Modified By"];
            var last_mod_date = entries[i].values["Last Modified Date"];
            var status = entries[i].values["Status"];
            var desc = entries[i].values["Description"];
            var created_by = entries[i].values["Created_By"];
            var res_cat = entries[i].values["Resolution Category"];
            var site = entries[i].values["Site"];
            var res_cat_tier_3 = entries[i].values["Resolution Category Tier 3"];
            var res_cat_tier_2 = entries[i].values["Resolution Category Tier 2"];
            var resolution = entries[i].values["Resolution"];
            var urgency = entries[i].values["Urgency"];
            var impact = entries[i].values["Impact"];
            var incident_num = entries[i].values["Incident Number"];
            var priority = entries[i].values["Priority"];
            var assign_group = entries[i].values["Assigned Group"];
            var rep_source = entries[i].values["Reported Source"];
            var detailed_desc = entries[i].values["Detailed Description"];
            var ph_number = entries[i].values["Phone Number"];
            var product_name = entries[i].values["Product Name"];
            var cat_tier_1 = entries[i].values["Categorization Tier 1"];
            var last_res_date = entries[i].values["Last Resolved Date"];
            var closed_date = entries[i].values["Closed Date"];
            var srattach = entries[i].values["SRAttachment/Attachment"];
            var cat_tier_2 = entries[i].values["Categorization Tier 2"];
            var cat_tier_3 = entries[i].values["Categorization Tier 3"];
            var pro_cat_1 = entries[i].values["Product Categorization Tier 1"];
            var pro_cat_3 = entries[i].values["Product Categorization Tier 3"];
            var pro_cat_2 = entries[i].values["Product Categorization Tier 2"];
            var req_id = entries[i].values["SRID"];

            var inc = new GlideRecord('sn_customerservice_case');
            inc.addQuery('number', num);
            inc.query;

            if (!inc) {
                var grUser = new GlideRecord('sys_user');
                grUser.addQuery('email', submitter); // Replace with the actual email address
                grUser.query();

                if (grUser.next()) {
                    var sys_id = grUser.getUniqueValue(); // Or grUser.sys_id

                    var grGroup = new GlideRecord('sys_user_group');
                    grGroup.addQuery('name', assign_group); // Replace with the actual email address
                    grGroup.query();

                    var group_sys_id = grGroup.getUniqueValue();

                    var gr = new GlideRecord('sn_customerservice_case'); // Replace with target table name
                    gr.initialize();
                    gr.setValue('u_ticket_type', 'Incident'); // Replace FIELD_1 and KEY_1
                    gr.setValue('number', num);
                    gr.setValue('description', req_id);
                    gr.setValue('internal_user', sys_id);
                    gr.setValue('category', 'ServiceNow');
                    gr.setValue('category', 'Other');
                    gr.setValue('assignment_group', group_sys_id);
                    gr.setValue('u_this_issue_is_for', 'Employee(s)');
                    gr.setValue('sys_created_on', sub_date);
                    gr.setValue('assigned_to', ass_id);
                    gr.setValue('sys_updated_by', last_mod_by);
                    gr.setValue('sys_updated_on', last_mod_date);
                    gr.setValue('state', status);
                    gr.setValue('state', status);
                    gr.setValue('short_description', (req_id, ' :', desc));
                    gr.setValue('ticket_type', 'Incident');
                    gr.setWorkflow(false);
                    gr.insertWithReferences();
                }

            } else {
                gs.print(num+ "Record already exists in the table");
            }

        }

    }

}
fetchRecords(baseUrl);

 

5 REPLIES 5

Shivalika
Mega Sage

Hello @Community Alums 

 

Change the fetchRecords Parameter to baseURL, because you are already having next stored there. Second, Add href attribute if this doesn't works in addition to passing "baseurl". 

 

Kindly mark my answer as helpful and accept solution if it helped you in anyway. This will help me be recognized for the efforts and also move this questions from unsolved to solved bucket. 

 

Regards,

 

Shivalika 

 

My LinkedIn - https://www.linkedin.com/in/shivalika-gupta-540346194

 

My youtube - https://youtube.com/playlist?list=PLsHuNzTdkE5Cn4PyS7HdV0Vg8JsfdgQlA&si=0WynLcOwNeEISQCY