【发布时间】:2020-12-11 03:12:14
【问题描述】:
我能够使用 GlideSysAttachment API 和脚本中的 attachment.write() 函数成功地附加带有 ServiceNow 表记录的 PDF 文件,但是每当我下载并尝试打开它时,我都会收到下面屏幕截图中显示的错误。
代码sn-p
(function execute() {
try{
var rec = new GlideRecord('incident');
var attachment = new GlideSysAttachment();
var incidentSysID = incident.number;
rec.get(incidentSysID);
var fileName = 'Test_Incident.pdf';
var contentType = 'application/pdf'; // Also tried with contentType as 'text/pdf'
var content = pdf_content;
var agr = attachment.write(rec, fileName, contentType, content);<br>
gs.info('The PDF attachment sys_id is: ' + agr);
}catch(err){
gs.log('Got Error: ' + err);
gs.info(err);
}
})()
我还在脚本中尝试了带有 ecc_queue 的“AttachmentCreator”,但出现了同样的错误。下面是它的代码。
(function execute()
{var attCreator = new GlideRecord('ecc_queue');
attCreator.agent = "AttachmentCreator";
attCreator.topic = "AttachmentCreator";
attCreator.name = "Test.pdf" + ":" + "text/pdf";
//Also tried, "Test.pdf:application/pdf"
attCreator.source = "incident"+":"+ incident.number;
// Record Table name and sys_id of the particular record
var content = pdf_content; // pdf_content is any string variable
var stringUtil = new GlideStringUtil();
var base64String = stringUtil.base64Encode(content);
var isValid=GlideStringUtil.isBase64(base64String);
var base64String= gs.base64Encode(content);
gs.info("Is valid base64 format in ecc_queue ? "+ isValid);
attCreator.payload = base64String; //base64 content of the file
attCreator.insert();
})()
我能够附加和查看具有类似脚本的 excel 和 word 文件,没有任何问题。我已经检查了附件的系统属性,但一切看起来都很好。我可以查看从 UI 上传到特定表记录的 PDF 文件,但不能查看我通过 REST API 或脚本附加的文件。
我也尝试过以字节、base64 或简单字符串的形式发送编码数据,但似乎没有任何效果。我没有收到任何错误,并且每次创建附件时都会返回附件 ID。
在针对上述函数(w.r.t 范围应用程序而不是全局函数)稍微修改了我的代码之后;我在调试时从日志中得到了一些信息:
- 05:38:38.411 安全受限:文件类型不允许或与文件 Test.pdf 的内容不匹配
- 05:38:38.410 安全受限:文件的 MIME 类型不匹配:Test.pdf。预期类型:application/pdf,实际类型:text/plain
- 05:38:38.394 App:XYZ App x_272539_xyz_ap: ecc_queue 中的 base64 格式是否有效?是的
【问题讨论】:
标签: servicenow servicenow-rest-api