servicenow - 无法查看附带 ServiceNow 表记录的 PDF
问题描述
我能够使用 GlideSysAttachment API 和脚本中的 attachment.write() 函数成功地附加带有 ServiceNow 表记录的 PDF 文件,但是每当我下载并尝试打开它时,我都会收到下面屏幕截图中显示的错误。
代码片段
(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。
在为上述函数稍微修改了我的代码后,使用范围应用程序而不是全局;我在调试时从日志中获得了一些信息:
- 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 格式是否有效?真的
解决方案
首先是评论:您的代码中的这一行是意外工作 - 确保您了解任务编号不是对象sys_id
var incidentSysID = incident.number; // should be incident.sys_id
接下来,不清楚 PDF 内容的来源。如果列出了您的完整代码,我希望您已经注意到给出的错误pdf_content
是“任何字符串变量”。
ServiceNow 确实具有从 HTML 参数创建 PDF 的能力。 从 HTML 生成 PDF
这是获取现有记录的 PDF(平台生成)的有用博客文章: 喜欢 PDF?PDF也爱你
推荐阅读
- javascript - React 中的异步/等待
- google-cloud-platform - Big Query 抛出“查询执行期间超出资源”
- mysql - MacOS 上 Sublime text 3 上的 MySQL
- database - 删除左连接postgres
- perl - perl 检查嵌套哈希引用
- python - 如何在不调用方法的情况下循环类实例变量?
- reactjs - CRA Workbox 自定义存储的缓存名称
- youtube-data-api - Youtube数据api搜索不返回nextpagetoken?
- react-native - 如何解决当前位置问题 react native
- facebook-graph-api - 我想看看有多少人在我的 Facebook 页面上使用 java 中的 restfb 看到了我的帖子