Strip or replace quotes " from Work notes

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-11-2020 05:03 AM
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.
The only issue we have is; IF the Work notes contain Double Quotes (") the Zendesk ticket is not updated.
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.
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

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-11-2020 08:56 AM
Nope.. still no luck, same error
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-11-2020 09:00 AM
I have corrected the code above now. try this
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);
}

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-11-2020 09:05 AM
By default, when a Work note is sent from the Task, Quotes are added..
I assume this is required as this is the message being sent. Maybe that's why we can't remove them, because if we did surely a standard reply would fail.
So, all I sent from my Work notes was test.
This is how my message appeared in the Zendesk notes.. (note the Quotes).
The Quotes have always been there. Something must add them, but I don't know what.
Any ideas anyone?

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-11-2020 09:08 AM
Post is via HTTP method shown further up.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-11-2020 09:12 AM
Looks like we may have come to dead-end for today. I need to go into a meeting now, but will check back tomorrow to see if there's been any updates regarding my request.
Thanks to everyone for all your help today, I really, really appreciate your time.
Thanks so much.
Catch you tomorrow with any luck.
Kindest regards,
Pierre