Could you help on API to create a change request including ctask and outage record

pradeepa_bo
Tera Contributor

Could you help me with a service now API to create a change request including change tasks and outage record using scripted rest api? Below script is only creating change request, not ctask and outage.

(function process(request, response) {
    try {
        var reqBody = request.body.data;
        gs.info('Received Request Body: ' + JSON.stringify(reqBody)); // Debugging log
 
        // === 1️⃣ Create Change Request ===
        var changeGr = new GlideRecord('change_request');
        changeGr.initialize();
        changeGr.short_description = reqBody.short_description || 'Default Change Request';
        changeGr.description = reqBody.description || 'Generated via API';
        changeGr.type = reqBody.type || 'normal';
        changeGr.risk = reqBody.risk || '3';
        changeGr.assignment_group = reqBody.assignment_group;
 
        var changeSysId = changeGr.insert();
        if (!changeSysId) {
            response.setStatus(500);
            response.setBody({ error: 'Failed to create change request' });
            return;
        }
        gs.info('Change request created with sys_id: ' + changeSysId);
 
        // === 2️⃣ Create Change Tasks ===
        var taskSysIds = [];
        if (Array.isArray(reqBody.tasks) && reqBody.tasks.length > 0) {
            gs.info('Received tasks array: ' + JSON.stringify(reqBody.tasks));
 
            reqBody.tasks.forEach(function(task) {
                var taskGr = new GlideRecord('change_task');
                taskGr.initialize();
                taskGr.parent = changeSysId;  // FIXED: Correct relationship
                taskGr.short_description = task.short_description || 'API Task';
                taskGr.description = task.description || 'Task Description';
                taskGr.assigned_to = task.assigned_to || '';
                taskGr.assignment_group = task.assignment_group || '';
                //taskGr.priority = task.priority || '3';
                taskGr.state = task.state || '1';
 
                var taskSysId = taskGr.insert();
                gs.info('Task insertion attempt, sys_id: ' + taskSysId);
 
                if (taskSysId) taskSysIds.push(taskSysId);
            });
        }
 
        // === 3️⃣ Create Outage Record ===
        var outageSysId = null;
        if (reqBody.outage && reqBody.outage.ci) {
            gs.info('Received outage data: ' + JSON.stringify(reqBody.outage));
 
            var outageGr = new GlideRecord('cmdb_ci_outage');
            outageGr.initialize();
            // outageGr.ci = reqBody.outage.ci;
            // outageGr.outage_start = reqBody.outage.start || gs.nowDateTime();
            // outageGr.outage_end = reqBody.outage.end || '';
            // outageGr.impact = reqBody.outage.impact || '3';
           // outageGr.description = reqBody.outage.description || 'Outage due to change';
            outageGr.change_request = changeSysId;
 
            outageSysId = outageGr.insert();
            gs.info('Outage insertion attempt, sys_id: ' + outageSysId);
        }
 
        // === Return All sys_ids ===
        response.setBody({
            status: 'success',
            change_request_sys_id: changeSysId,
            task_sys_ids: taskSysIds,
            outage_sys_id: outageSysId
        });
 
    } catch (ex) {
        response.setStatus(500);
        response.setBody({ error: ex.message });
    }
})(request, response);
1 REPLY 1

PreethiRamesh
Giga Contributor

Can you please share the payloads and logs