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

Okay, I tried that but get the same error

Pierre5
Kilo Expert

I noticed in REST there's function for update, but I dont think this has much to do with the issue at hand.

Hi,

 

Can you try to add the char ( \ ) before all the ( " ) in work notes(all journal inputs- comments,. etc.). use below syntax:

str = str.toString().replace(/"/g, '\\"');   //str will be work_notes, comments,.etc.

 

Thanks.

Nikhil Bahurup1
Tera Expert

Hi Pierre,

As you mentioned the issue is only when there is double quotes(") in work notes. So try removing the double quotes before sending it Zendesk.

You can update if block on line no.91 with below one and see if it works.

if (current.sys_class_name == 'incident_task' && current.work_notes.changes()) {
var worknotes = current.work_notes.getJournalEntry(1).toString();
worknotes = worknotes.replace(/"/gi,""); // remove " from worknotes
r.setStringParameter('comments', new global.JSON().encode(worknotes);
}

You might have to do this for replacing the content of notes also.You can use same logic there as above.

Sounds like that could work.. let me try. Give me 2 mins