- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎01-19-2023 08:19 PM
I have written below script as a Scripted REST resouce in Global scope. However, the write function doesnt work
var queryParamsVar = request.queryParams;
var attachment = new GlideSysAttachment();
var correlationId = queryParamsVar.CorrelationId[0];
var grIncTask = new GlideRecord('incident_task');
grIncTask.addQuery('correlation_id', correlationId);
grIncTask.query();
var fileName = queryParamsVar.FileName[0];
var contentType = queryParamsVar.ContentType[0];
var base64Encodedcontent = queryParamsVar.Base64Enc[0];
var decodedBytes = GlideStringUtil.base64DecodeAsBytes(base64Encodedcontent);
var arg = attachment.write(grIncTask, fileName, contentType, decodedBytes);
gs.info('This is a log for attachment sys_id is: ' + agr);
In the system logs, I see the below error -
*** Script: undefined: no thrown error
and
getEventTarget() called with invalid record reference: sys_poll. for event: appsec.security.export, could have been deleted
I was trying to use writeBase64 but later found that it can used only for scoped applications. So I tried with write function but this is not doing the job either.
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎01-22-2023 08:06 PM
small update
var queryParamsVar = request.queryParams;
var attachment = new GlideSysAttachment();
var correlationId = queryParamsVar.CorrelationId[0];
var grIncTask = new GlideRecord('incident_task');
grIncTask.addQuery('correlation_id', correlationId);
grIncTask.query();
grIncTask.next(); // added now
var fileName = queryParamsVar.FileName[0];
var contentType = queryParamsVar.ContentType[0];
var base64Encodedcontent = queryParamsVar.Base64Enc[0];
var eccGr = new GlideRecord('ecc_queue');
eccGr.initialize();
eccGr.setValue('agent', 'AttachmentCreator');
eccGr.setValue('topic', 'AttachmentCreator');
eccGr.setValue('name', fileName + ':' + contentType);
eccGr.setValue('source', grIncTask.getTableName() + ':' + grIncTask.getUniqueValue());
eccGr.setValue('payload', base64Encodedcontent);
eccGr.insert();
it should work for all file content and types
If my response helped please mark it correct and close the thread so that it benefits future readers.
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎01-26-2023 08:11 PM
you need to parse the incoming request body and invoke that code that many number of times
since it works for 1 it would work for all the files as well
If my response helped please mark it correct and close the thread so that it benefits future readers.
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎01-20-2023 07:44 AM
You did not move grIncTask to the 1st record; grIncTask.next() is missing.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎01-20-2023 09:23 AM
Thank you. That worked. However, it works for text and csv but for other content types, it is throwing error
505 HTTP Version Not Supported
Any pointers? I am using the MIME content types from the below link
https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎01-20-2023 09:25 AM
fyi... I am trying doc, xls and pdf and i am getting error for these
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎01-20-2023 12:25 PM
Try
var grIncTask = new GlideRecord('incident_task');
grIncTask.addQuery('correlation_id', correlationId);
grIncTask.query();
if (grIncTask.next()) {
var data = 'iVBORw0KGgoAAAANSUhEUgAAACIAAAASCAYAAAA+PQxvAAABcWlDQ1BpY2MAACiRdZG/S8NAFMe/bRWlVjrUQcQhQxWFFoqCiJPWoUuRUitYdUmuSSskabikSHEVXBwKDqKLvwb/A10FVwVBUAQRN3d/LVLiu6bQIu0Ll/fhe+/7uHsH+NM6M+yeBGCYDs+mktJqfk3qe4cPQUQwiTmZ2dZCJpNG1/h5pGqKh7jo1b2uYwwUVJsBvn7iGWZxh3ieOL3lWIL3iIdYSS4QnxDHOB2Q+Fboisdvgosefwnmuewi4Bc9pWIbK23MStwgniCOGnqFNc8jbhJSzZVlyiO0RmEjixSSkKCggk3ocBCnbNLMOvsSDd8SyuRh9LdQBSdHESXyxkitUFeVska6Sp+Oqpj7/3na2vSU1z2UBHpfXfdzDOjbB+o11/09dd36GRB4Aa7Nlr9Mc5r9Jr3W0qLHQHgHuLxpacoBcLULDD9bMpcbUoCWX9OAjwtgMA9E7oHgujer5j7On4DcNj3RHXB4BIxTfXjjDyacaBytCYw0AAAACXBIWXMAAAsSAAALEgHS3X78AAABpElEQVRIx2N0jtvzn2EQABYWZkaGnfOdGSkx5D8QUKLfJX4vAwsjIyNNfGhUjmCzv1/FsGlWGIMovhChhTtAjjjX0Aw0nYfhP5MSA8PfbwxWaasYjgMdgwswUTtEwI6ou8bA8NuVwTJbmsEq8ycD428zhuM9cgyWQMfgDBFmJtokPsuSR/AQADng2IQXQJYE7hBhoEXc/P+JKcbMgVcLExMV3bFt2z5I9DQbwkMCFh1WuQIoarAkVuq5xMvLicHTaQbD/zd7oKZzAjEvAyMLH5AWBGJ+Bqs8kDp65BomoOVMLFA2ByRKmLig4px40ggVQcik00AT2YFp5A+Y3nEmksG63ALiGLCD2OnjEHDCZ2SHYKil0jqKkBBh5ICI08UhwJKekZEN6HtWeC5Zm2/GCI4ioMPAcrgc8p+KVd6aPFOgr1nBaYERaLGn3QmGf9+mAl0H5INDhBV3gfb/P3Ur3/+/nzEwCnkAi/X3wFARhNLAoh5E46tr/v77T9VypOZAAjy5IMUYXKw5AEc58vfvf6qWI9jKCFTghD2d06JhBPI5qTEOAKR1bBlxL8y7AAAAAElFTkSuQmCC';
var dataAsBytes = GlideStringUtil.base64DecodeAsBytes(data);
var sys_attachmentUniqueValue = new GlideSysAttachment().write(grIncTask, 'lock.png', 'image/png', dataAsBytes);
gs.info('sys_attachmentUniqueValue: ' + sys_attachmentUniqueValue);
}
It should attach a small lock icon to the incident.
It works running it in scripts background.
Also try to add
gs.info('isBase64: ' + GlideStringUtil.isBase64(base64Encodedcontent));
after
var base64Encodedcontent = queryParamsVar.Base64Enc[0];
What does it print?