How to export multiple tasks record form as PDF

WilliamsJ
Giga Contributor

This article will guide you to export multiple task records from your instance in any file format (PDF).

Purpose: To export multiple task records from view.

OOB feature allows exporting only list views of records.

Approach: Export records to specified file format using URL

URL Format: com-instance.service-now.com/task_table_name.do?PDF&sys_id=taskID

Steps:

Create a UI page with textbox to accept task numbers (comma separated).
Add to client script on the UI page.
Create script include (client callable) to return list of valid sys_id of tasks.
Code Snippets:

1. UI Page

<?xml version="1.0" encoding="utf-8" ?>
<j:jelly trim="false" xmlns:j="jelly:core" xmlns:g="glide" xmlns:j2="null" xmlns:g2="null">

<g:ui_form>

<input type = "text" id="myListCollector" name = "myListCollector" />
<br/>

<g:dialog_buttons_ok_cancel ok = "return exportRecords()" cancel = "return processCancel()" ok_type="button" />

</g:ui_form>

</j:jelly>
2. Client script on UI Page

function exportRecords() {


var tasks = document.getElementById('myListCollector').value;

//fetch sys_id of task records
var ga = new GlideAjax('FetchTasks');
ga.addParam('sysparm_name','fetchTaskIDs');
ga.addParam('sysparm_task_numbers',tasks); // send task numbers
ga.getXML(processTaskIds);

//callback function
function processTaskIds(response) {
var answer = response.responseXML.documentElement.getAttribute("answer");

var taskList = JSON.parse(answer);

var i = 0;
var inte = setInterval(triggerExport, 3000);

function triggerExport() {

if (i == taskList.length-1)
clearInterval(inte);

//jslog('taskList number is: '+taskListNum[i]);
//jslog('taskList number is: '+taskNumbers.options[i].innerHTML);

//var task_number = taskNumbers.options[i].innerHTML.toString();
var task_number = taskList[i].taskNumber.toString();

var task_table = "";
if(task_number.startsWith("CHG")){
task_table = "change_request";
}else if(task_number.startsWith("INC")){
task_table = "incident";
}else if(task_number.startsWith("PRB")){
task_table = "problem";
}else if(task_number.startsWith("SCTASK")){
task_table = "sc_task";
}else if(task_number.startsWith("RITM")){
task_table = "sc_req_item";
}else if(task_number.startsWith("REQ")){
task_table = "sc_request";
}
else{
task_table = "task";
}

g_navigation.open(task_table+'.do?PDF&sys_id='+taskList[i].taskID);

i++;
}//triggerExport

}//processTaskIds

return true;
}

function processCancel(){
GlideDialogWindow.get().destroy();
}
3. Script Include (Called via AJAX to return list of valid sys_id of tasks.)

Name: FetchTasks

fetchTaskIDs:function() {
var tasks = this.getParameter('sysparm_task_numbers');

var taskIdList = [];

var taskNumbers = tasks.split(',');

for(i=0;i<taskNumbers.length;i++){

var taskGR = new GlideRecord('task');
taskGR.addQuery('number', taskNumbers[i]);
taskGR.query();
while(taskGR.next()){
gs.log("FetchTasks3: id->"+taskGR.sys_id+" num->"+taskGR.number);

var taskObj = {
"taskNumber": taskGR.getValue('number'),
"taskID": taskGR.getValue('sys_id')
};

//taskIdList.push(taskGR.getValue('sys_id'));
taskIdList.push(taskObj);
}
if(taskGR.getRowCount()==0){
gs.addErrorMessage("Invalid task number:"+taskNumbers[i]);
}
}

//return taskIdList.toString();
return JSON.stringify(taskIdList);

},

Please help me improve this with your feedbacks and suggestion.

Please mark helpful and bookmark for future references.

 

0 REPLIES 0