HR Leave · Australia

Script — outbound_rest_message.js

ServiceNow Australia · Custom app · Arabic + English readable · scripts copy/paste ready

App typeCustom
Scopex_786686_hr_leave
sys_idc84db0e8839f0b509f02b0d6feaad3c9
Replace{BASE} = your instance
Instance URLs Application Leave requests Business Rules Studio

Copy this script into ServiceNow under application x_786686_hr_leave (Australia). Table/API names already use the current scope.

Source: src/server/rest/outbound_rest_message.js

/**
 * Application: Custom · Scope: x_786686_hr_leave · sys_id: c84db0e8839f0b509f02b0d6feaad3c9
 * Outbound REST — usage example
 *
 * FULL SETUP (Studio screenshot, all fields, POST method, test Send):
 *   src/server/rest/OUTBOUND_REST_MESSAGE_SETUP.md
 *
 * REST Message record:
 *   Name:     HRLX ERP Push Decision
 *   Endpoint: x_786686_hr_leave.config.erp_endpoint  (property name on form)
 *   Method:   Push Decision (POST) — NOT Default GET
 *
 * Test: REST Message → HTTP Method Push Decision → Send (not REST API Explorer)
 *
 * Production call options:
 *   A) HRLXProIntegrationUtilsV2().outboundPushDecision(leaveSysId)
 *   B) RESTMessageV2('HRLX ERP Push Decision', 'Push Decision') + setStringParameter('employee_id', ...)
 */

// --- Reference: call configured REST Message by name ---
function pushDecisionViaRestMessage(leaveSysId) {
    var gr = new GlideRecord('x_786686_hr_leave_req_v2');
    if (!gr.get(leaveSysId)) return;

    var empId = '';
    if (gr.u_employee_ref) {
        var e = gr.u_employee_ref.getRefRecord();
        if (e.isValidRecord()) empId = e.getValue('u_employee_id');
    }

    var rm = new sn_ws.RESTMessageV2('HRLX ERP Push Decision', 'Push Decision');
    rm.setStringParameter('employee_id', empId);
    var resp = rm.execute();
    gs.info('[HRLX] ERP push status: ' + resp.getStatusCode());
}

// --- Reference: raw outbound (no REST Message record) ---
function pushDecisionRaw(leaveSysId) {
    var gr = new GlideRecord('x_786686_hr_leave_req_v2');
    if (!gr.get(leaveSysId)) return;

    var r = new sn_ws.RESTMessageV2();
    r.setEndpoint(gs.getProperty('x_786686_hr_leave.config.erp_endpoint'));
    r.setHttpMethod('POST');
    r.setRequestHeader('Content-Type', 'application/json');
    r.setRequestBody(JSON.stringify({
        leave_number: gr.getValue('u_number'),
        state: gr.getValue('u_state'),
        start_date: gr.getValue('u_start_date'),
        end_date: gr.getValue('u_end_date'),
        decision_time: gr.getValue('sys_updated_on')
    }));
    var resp = r.execute();
    gs.info('[HRLX] ERP push status: ' + resp.getStatusCode());
}

/* --- Async Business Rule (after, update) on x_786686_hr_leave_req_v2 ---
(function executeRule(current, previous) {
    if (current.u_state.changesTo('approved') || current.u_state.changesTo('rejected')) {
        new x_786686_hr_leave.HRLXProIntegrationUtilsV2().outboundPushDecision(current.getUniqueValue());
    }
})(current, previous);
*/