Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

how to get export to pdf into zip with all attchment

ankit_gupta1
Tera Expert

i have   a requirement in which i have a UI action on my table , so when ever i click on that button i will get (form pdf + activity pdf + all attachment) into a one zip file that might be downloadable

1 ACCEPTED SOLUTION

ankit_gupta1
Tera Expert

first create a ui action that attach (export to pdf) form pdf in your attachment and call processor



****************************************


var rm = new sn_ws.RESTMessageV2();



rm.setHttpMethod('GET');



var url = gs.getProperty("glide.servlet.uri") + current.getTableName()+ '.do?PDF&sys_id=' + current.sys_id;



rm.setEndpoint(url);



rm.setBasicAuth(gs.getProperty('glide.user.userid'), gs.getProperty('glide.user.password'));



rm.saveResponseBodyAsAttachment(current.getTableName(),current.sys_id,current.number+".pdf");



var response = rm.execute();



action.setRedirectURL('exportAttachmentsToZip.do?sysparm_sys_id=' + current.sys_id + '&sysparm_table=' + current.getTableName() + '&sysparm_num=' + current.number);




*******************************************



create a new processor "exportAttachmentsToZip"




************************************************************


var sysid = g_request.getParameter('sysparm_sys_id');


var table = g_request.getParameter('sysparm_table');


var num = g_request.getParameter('sysparm_num');



//var url = table + '.do?PDF&sys_id=' + sysid;  


  //window.open(url);



var theRecord = new GlideRecord(table);


theRecord.addQuery('sys_id', sysid);


theRecord.query();


theRecord.next();



var zipName = 'attachments.zip';



var StringUtil = GlideStringUtil;



var gr = new GlideRecord('sys_attachment');


gr.addQuery('table_sys_id', theRecord.sys_id);


gr.addQuery('table_name', theRecord.getTableName());


gr.query();



if (gr.hasNext()){


      g_response.setHeader('Pragma', 'public');


      g_response.addHeader('Cache-Control', 'max-age=0');


      g_response.setContentType('application/octet-stream');


      g_response.addHeader('Content-Disposition', 'attachment;filename=' + zipName);


      var out = new Packages.java.util.zip.ZipOutputStream(g_response.getOutputStream());


      var count=0;


      while (gr.next()){


              var sa = new GlideSysAttachment();


              var binData = sa.getBytes(gr);


             


              var file = gr.file_name;


              this.addBytesToZip(out, zipName, file, binData);


              count ++;


      }


      // Complete the ZIP file


      out.close();



var gr1 = new GlideRecord('sys_attachment');


gr1.addQuery('table_sys_id', theRecord.sys_id);


gr1.addQuery('table_name', theRecord.getTableName());


gr1.addQuery('file_name', num+'.pdf');


gr1.query();


if(gr1.next())


  gr1.deleteRecord();




}



function addBytesToZip (out, dir, file, stream){


      // Add ZIP entry to output stream.


      out.putNextEntry(new Packages.java.util.zip.ZipEntry(file));


      out.write(stream, 0, stream.length);


      out.closeEntry();


}




thats work fine . Plz remember user(userid,pass) must have admin role


View solution in original post

5 REPLIES 5

Hello Namrata,

 

Please check below property you have created or not.

gs.getProperty('glide.user.userid'),

gs.getProperty('glide.user.password'));