- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
09-13-2023 11:23 PM - edited 09-13-2023 11:27 PM
HI Everyone,
I have a Scripted REST API, which is used to post images in work notes of Incident, case, etc. Till now, we were only posting images, but now requirement is to send videos (mp4) with images as well. How can I change my code so that I can post videos as well with same code.
(function process( /*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) {
// implement resource here
var requestBody = request.body.dataString;
var parser = new global.JSON();
var parsedData = parser.decode(requestBody);
var refId = parsedData.refId;
var imageName = parsedData.imageName;
var imageType = parsedData.imageType;
var imageValue = parsedData.imageValue;
var table = parsedData.object_name;
if (table == 'wm_order' || table == 'wm_task' || table == 'incident' || table == 'sn_customerservice_case' || table == 'pm_project') {
var rec = new GlideRecord(table);
rec.addQuery('number', refId);
var sysID = rec.sys_id;
rec.query();
if (rec.next()) {
if (imageName && imageValue && imageType != '') {
sa = new GlideSysAttachment();
sa.writeBase64(rec, imageName, imageType, imageValue);
}
var responseBody = {};
responseBody.status = "Success";
responseBody.message = " SNOW Operation performed successfully";
response.setBody(responseBody);
} else {
var responseBodyFailure = {};
responseBodyFailure.status = "Failure";
responseBodyFailure.message = "org.mozilla.javascript.EvaluatorException: GlideRecord.addQuery() - incorrect value";
response.setBody(responseBodyFailure);
}
} else {
var responseBodyTableFailure = {};
responseBodyTableFailure.status = "Failure";
responseBodyTableFailure.message = " org.mozilla.javascript.EvaluatorException: GlideRecord.addQuery() - invalid table name:" + table + "(sys_ws_operation.526056a71b46d910a662ece5624bcbd5.operation_script; line 17)";
response.setBody(responseBodyTableFailure);
}
})(request, response);
cc: @Ankur Bawiskar @Pavankumar_1
Thanks in advance
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
09-13-2023 11:36 PM
Hello @Abhijit Das7 ,
As per your script your getting image in payload, So first of all you should get Vid as well in Payload you can ref below example to modify Payload Structure.
{
"refId": "incident123",
"attachments": [
{
"resp_name": "image.jpg",
"resp_type": "image/jpeg",
"resp_data": "base64_encoded_image_data"
},
{
"resp_name": "video.mp4",
"resp_type": "video/mp4",
"resp_data": "base64_encoded_video_data"
}
],
"object_name": "incident"
}Now you will get both Image and Video in your payload, Once you get it, then you can iterate value from Attachments object.
(function process( /*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) {
var requestBody = request.body.dataString;
var parser = new global.JSON();
var parsedData = parser.decode(requestBody);
var refId = parsedData.refId;
var table = parsedData.object_name;
var attachments = parsedData.attachments;
if (table == 'wm_order' || table == 'wm_task' || table == 'incident' || table == 'sn_customerservice_case' || table == 'pm_project') {
var rec = new GlideRecord(table);
rec.addQuery('number', refId);
var sysID = rec.sys_id;
rec.query();
if (rec.next()) {
for (var i = 0; i < attachments.length; i++) {
var attachment = attachments[i];
var name = attachment.name;
var type = attachment.type;
var data = attachment.data;
if (name && type && data) {
sa = new GlideSysAttachment();
sa.writeBase64(rec, name, type, data);
}
}
var responseBody = {};
responseBody.status = "Success";
responseBody.message = "SNOW Operation performed successfully";
response.setBody(responseBody);
} else {
var responseBodyFailure = {};
responseBodyFailure.status = "Failure";
responseBodyFailure.message = "org.mozilla.javascript.EvaluatorException: GlideRecord.addQuery() - incorrect value";
response.setBody(responseBodyFailure);
}
} else {
var responseBodyTableFailure = {};
responseBodyTableFailure.status = "Failure";
responseBodyTableFailure.message = "org.mozilla.javascript.EvaluatorException: GlideRecord.addQuery() - invalid table name:" + table + "(sys_ws_operation.526056a71b46d910a662ece5624bcbd5.operation_script; line 17)";
response.setBody(responseBodyTableFailure);
}
})(request, response);Kindly mark correct and helpful if applicable
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
09-13-2023 11:36 PM
Hello @Abhijit Das7 ,
As per your script your getting image in payload, So first of all you should get Vid as well in Payload you can ref below example to modify Payload Structure.
{
"refId": "incident123",
"attachments": [
{
"resp_name": "image.jpg",
"resp_type": "image/jpeg",
"resp_data": "base64_encoded_image_data"
},
{
"resp_name": "video.mp4",
"resp_type": "video/mp4",
"resp_data": "base64_encoded_video_data"
}
],
"object_name": "incident"
}Now you will get both Image and Video in your payload, Once you get it, then you can iterate value from Attachments object.
(function process( /*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) {
var requestBody = request.body.dataString;
var parser = new global.JSON();
var parsedData = parser.decode(requestBody);
var refId = parsedData.refId;
var table = parsedData.object_name;
var attachments = parsedData.attachments;
if (table == 'wm_order' || table == 'wm_task' || table == 'incident' || table == 'sn_customerservice_case' || table == 'pm_project') {
var rec = new GlideRecord(table);
rec.addQuery('number', refId);
var sysID = rec.sys_id;
rec.query();
if (rec.next()) {
for (var i = 0; i < attachments.length; i++) {
var attachment = attachments[i];
var name = attachment.name;
var type = attachment.type;
var data = attachment.data;
if (name && type && data) {
sa = new GlideSysAttachment();
sa.writeBase64(rec, name, type, data);
}
}
var responseBody = {};
responseBody.status = "Success";
responseBody.message = "SNOW Operation performed successfully";
response.setBody(responseBody);
} else {
var responseBodyFailure = {};
responseBodyFailure.status = "Failure";
responseBodyFailure.message = "org.mozilla.javascript.EvaluatorException: GlideRecord.addQuery() - incorrect value";
response.setBody(responseBodyFailure);
}
} else {
var responseBodyTableFailure = {};
responseBodyTableFailure.status = "Failure";
responseBodyTableFailure.message = "org.mozilla.javascript.EvaluatorException: GlideRecord.addQuery() - invalid table name:" + table + "(sys_ws_operation.526056a71b46d910a662ece5624bcbd5.operation_script; line 17)";
response.setBody(responseBodyTableFailure);
}
})(request, response);Kindly mark correct and helpful if applicable
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
09-13-2023 11:40 PM
if 3rd party is able to send base64 for video then it should work fine as well similar to image
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader
