Strip or replace quotes " from Work notes

Pierre5
Kilo Expert

Hoping someone can help. My knowledge is very limited and I didn't write any of the code mentioned here.

We have a business rule (Task [task] that updates the body of a Zendesk ticket (third party ticketing system) via TASK. Everything works fine in regards to adding/posting updates to Zendesk, with the except of Quotes.

find_real_file.png

The only issue we have is; IF the Work notes contain Double Quotes (") the Zendesk ticket is not updated.

find_real_file.png

The error refers to this part of code I think... lines 111 - 121 - I think I need some extra code added to strip or replace the ", Not sure to be honest, but a string of some kind needs adding.

find_real_file.png

This is the full code:

(function executeRule(current, previous /*null when async*/) {
	
	gs.addInfoMessage("Task Type : "  + current.sys_class_name);
	if(current.work_notes.changes()) {
		gs.addInfoMessage("Worknotes changed ");
	}
	
	if(current.comments.changes()) {
		gs.addInfoMessage("comments changed ");
	}	
	
	if(current.state.changes()) {
		gs.addInfoMessage("state changed ");
	}
	

	
	if (gs.getProperty('integrations.zendesk.enable') == 'true') {
		var status = 'new';
		var fileToken = '';
		
		//State Mapping
		if (current.sys_class_name == 'incident'){
			if (current.state == '1' ) {
				status = 'new';
			} else if (current.state == '2') {
				status = 'open';
			} else if (current.state == '3') {
				status = 'hold';
			} else if (current.state == '6') {
				status = 'solved';
			} else if (current.state == '7') {
				status = 'solved';
			} else if (current.state == '8') {
				status = 'solved';
			}
		} else if (current.sys_class_name == 'incident_task'){
			if (current.state == '1' ) {
				status = 'open';
			} else if (current.state == '2') {
				status = 'open';
			} else if (current.state == '-5') {
				status = 'open';
			} else if (current.state == '3') {
				status = 'solved';
			} else if (current.state == '4') {
				status = 'solved';
			} else if (current.state == '7') {
				status = 'solved';
			}
		}
		
		if(current.hasAttachments()){
			var max_size = 5000000; //5 MB
			var count = 1;
			var cgiAttch = new GlideRecord('sys_attachment');
			cgiAttch.addQuery('table_sys_id',current.sys_id);
			cgiAttch.addQuery("sys_created_on", '>=', 'javascript:gs.minutesAgo(30)'); //Created in last 30 mins
			cgiAttch.query();
			while(cgiAttch.next()){
				var sa = new GlideSysAttachment();
				var binData = sa.getBytes(cgiAttch);
				var size = parseInt(cgiAttch.size_bytes);
				if(size > max_size) {
					//gs.addInfoMessage("Ignoring sending of attachment to remedy, size exceeds 2MB");
					gs.log('Ignoring sending of attachment to remedy, size exceeds 2MB','Remedy Integration');
					//current.setAbortAction(true);
				} else {
					if (count == '1' ||  gs.nil(fileToken)) {
						fileToken = getAttachmentToken(cgiAttch.file_name,GlideStringUtil.base64Encode(binData),'');
						count = count + 1;
						gs.log("File Token: " + fileToken);
					} else {
						getAttachmentToken(cgiAttch.file_name,GlideStringUtil.base64Encode(binData),fileToken);
					}
				}
			}
		}		
				
		
		var r = new sn_ws.RESTMessageV2('Zendesk', 'Update');
		r.setStringParameterNoEscape('zendesk_domain', gs.getProperty('integrations.zendesk.domain'));
		r.setStringParameter('fileToken',fileToken);
		r.setStringParameterNoEscape('ticketId', current.correlation_id);
		if (status == 'solved'){
			r.setStringParameterNoEscape('closed_code', 'closed_in_sn');
		}
		r.setStringParameterNoEscape('status', status);
		

		if (current.sys_class_name == 'incident_task' && current.work_notes.changes()) {
			r.setStringParameter('comments', new global.JSON().encode(current.work_notes.getJournalEntry(1)));
		}
		
		if ((current.sys_class_name == 'incident')&&(current.state == '6')) {
			var notes = '';
			notes = 'Restoration Item: ' + current.u_closure_item;
			notes += '\n Restoration Code: ' + current.close_code;
			notes += '\n Restoration Notes: ' + current.close_notes;
			
			comm=current.work_notes.getJournalEntry(1).toString();
			notes += '\n Work Notes: ' + comm;
			r.setStringParameter('comments', new global.JSON().encode(notes));
			
			comm=current.comments.getJournalEntry(1).toString();
			notes += '\n Additional Comments: ' + comm;
			r.setStringParameter('comments', new global.JSON().encode(notes));
		}
		
		
		var response = r.execute();
		var responseBody = response.getBody();
		var httpStatus = response.getStatusCode();
		if (httpStatus == '200') {
			var parser = new JSONParser();
			var parsed = parser.parse(response.getBody());
			var ticketId = parsed.ticket.id;
			gs.addInfoMessage("Zendesk incident "+ ticketId.toString() + " updated successfully");
		} else {
			gs.addErrorMessage("Error while updating zendesk incident " + responseBody);
		}
		

	}
	
	function getAttachmentToken(fileName, fileData, tokenData) {
		var returnToken = '';
		var attachmentRequest = new sn_ws.RESTMessageV2('Zendesk','CreateAttachment');
			attachmentRequest.setStringParameter('zendesk_domain', gs.getProperty('integrations.zendesk.domain'));
			attachmentRequest.setStringParameter('file_name', fileName);
			attachmentRequest.setStringParameter('file_data', fileData);
			if (!gs.nil(tokenData)){
				attachmentRequest.setStringParameter('file_token', tokenData);
			}
			

		var responseResponse = attachmentRequest.execute();
		var attachmentHttpStatus = responseResponse.getStatusCode();
		if (attachmentHttpStatus == '201') {
		var parsedAttachment = new global.JSON().decode(responseResponse.getBody());
			returnToken = parsedAttachment.upload.token;
			gs.log("Attachment Response fileToken: " + returnToken + 'Zendesk Integration');
			return returnToken;
		} else {
			gs.addErrorMessage("Error while sending attachment to zendesk " + fileName);
		}
		return returnToken;
		
	}		
	
	
})(current, previous);

Your help would be much appreciated,

Kind regards,

Pierre

57 REPLIES 57

Pierre5
Kilo Expert

Do you mean like this..

		var response = r.execute();
		var responseBody = response.getBody();
		var httpStatus = response.getStatusCode();
		if (httpStatus == '200') {
			var parser = new JSONParse();
			var parsed = parser.parse(response.getBody());
			var ticketId = parsed.ticket.id;
			gs.addInfoMessage("Zendesk incident "+ ticketId.toString() + " updated successfully");
		} else {
			gs.addErrorMessage("Error while updating zendesk incident " + responseBody);
		}

Can you replace

var parser = new JSONParser();
var parsed = parser.parse(response.getBody());
var ticketId = parsed.ticket.id;

with

var stringiify=JSON.stringify(responseBody);
var parser = new JSONParser();
var parsed = parser.parse(stringiify);
var ticketId = parsed.ticket.id;

Thanks, but same Same error

find_real_file.png

 

find_real_file.png

should be 

stringiify