i want to create a one PDF file for incident record and that pdf file will attach to same incident record.

Sanjay Bagri1
Tera Guru

Hi 

i want to create a one PDF file for incident record and that pdf file will  attach to same incident record. Is there any way to do.

Please can you suggest me where i am wrong,

This is the Script Which i am Using in Workflow after insert business rules: 

(function executeRule(current, previous /*null when async*/) {

	// 	attachment.write('tablename', recordsysid, fileName, content_type, fileDate);

	// "attachment" is the object variable of Attachment() type

	// "tablename" is string variable that contains the name of the table where you want to attach the file.

	// "recordsysid" is the sys id of the record where you want to attach the file

	// "filename" is the file name of the attachment

	// "content_type" is the type of content in the file (usually for pdf it is 'text/text')

	// "fileData" contains the data that you want to put in the file.

	// Example: Business Rule to run after insert

	var tableName = "incident"; //incident Item Table
	gs.addInfoMessage("Table Name :"+tableName);
	var recordsysid = current.sys_id; //sys id of the record
	gs.addInfoMessage("RecordSysID :"+recordsysid.getDisplayValue()   +"   ==  "+recordsysid);
	var fileName = current.number+" FormData.pdf";
	gs.addInfoMessage("file Name :"+fileName);
	var content_type = 'text/pdf';
	gs.addInfoMessage("content_type :"+content_type);


	var fileData=""; // Declare an empty string 

	fileData+=current.number+" "+current.short_description+"</ b>";           // current access the varibles in the record

	//fileData+=current.variables.u_requested_for.getDisplayValue()+"</ b>";    // current.variables access the variables or fields in the form or catalog Item
	fileData+=current.state+"</ b>";
	fileData+=current.variables.u_department.getDisplayValue();

	gs.addInfoMessage("File Data  :"+fileData);

	var attachment = new Attachment();

	attachment.write('tablename', recordsysid, fileName, content_type, fileDate);


})(current, previous);

I am getting these values but not attaching the Attachments in the records : 

find_real_file.png

I am getting some help from one thread but its not working

https://community.servicenow.com/community?id=community_article&sys_id=d947860cdbbe1380e0e80b55ca961...

Thanks in advance.

1 ACCEPTED SOLUTION

rest message should also fulfill this requirement. 

 

try with below code. 

Script include:

 

var CreateAttachments = Class.create();
CreateAttachments.prototype = {
	initialize: function() {
	},

	creatAttch: function(name,contentType, data){



		var attCreator = new GlideRecord('ecc_queue');
		attCreator.agent = "AttachmentCreator";
		attCreator.topic = "AttachmentCreator";
		attCreator.name =   "pdf" + ":" + contentType;
		attCreator.source = current.getTableName()+":"+current.sys_id;
		attCreator.payload = data;
		attCreator.insert();
	},



	type: 'CreateAttachments'
};

 

Business rule:

 

(function executeRule(current, previous /*null when async*/) {



	var fileName = current.number+" FormData.pdf";
	var fileData=""; // Declare an empty string 

	fileData+=current.state+"</ b>";
	fileData+=current.short_description.getDisplayValue();
	var ab = new CreateAttachments().creatAttch(fileName,'application/pdf', fileData);


})(current, previous);

 

 

View solution in original post

17 REPLIES 17

rest message should also fulfill this requirement. 

 

try with below code. 

Script include:

 

var CreateAttachments = Class.create();
CreateAttachments.prototype = {
	initialize: function() {
	},

	creatAttch: function(name,contentType, data){



		var attCreator = new GlideRecord('ecc_queue');
		attCreator.agent = "AttachmentCreator";
		attCreator.topic = "AttachmentCreator";
		attCreator.name =   "pdf" + ":" + contentType;
		attCreator.source = current.getTableName()+":"+current.sys_id;
		attCreator.payload = data;
		attCreator.insert();
	},



	type: 'CreateAttachments'
};

 

Business rule:

 

(function executeRule(current, previous /*null when async*/) {



	var fileName = current.number+" FormData.pdf";
	var fileData=""; // Declare an empty string 

	fileData+=current.state+"</ b>";
	fileData+=current.short_description.getDisplayValue();
	var ab = new CreateAttachments().creatAttch(fileName,'application/pdf', fileData);


})(current, previous);

 

 

Thanks Harsh, 

Its working fine as i want but the issue is when ever i am opening/downloading the file than its showing this below error :

find_real_file.png

This is attaching corrupt file Can you tell me why this error.

sorry for late response. 

just confirming , did you check the record in "ecc_queue" table ? what exactly are you getting in payload column ? 

i did not test that script. i will try to test on my personal instance. 

 

This is the Payload is in ecc_queue: 

thats the reason it's showing the error, because payload has not any content and file seems like to be corrupted. 

quick question, did you try with rest message?  is it not fulfilling your requirement ? i think that will also work for your scenario. i would suggest give a try.