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 05:58 AM
Okay, I tried that but get the same error

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-11-2020 08:03 AM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-11-2020 08:55 AM
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.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-11-2020 08:46 AM
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.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-11-2020 08:51 AM
Sounds like that could work.. let me try. Give me 2 mins