首页 > 解决方案 > 无法查看附带 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。

错误消息 - 打开的 PDF 无法加载

在为上述函数稍微修改了我的代码后,使用范围应用程序而不是全局;我在调试时从日志中获得了一些信息:

标签: servicenowservicenow-rest-api

解决方案


首先是评论:您的代码中的这一行是意外工作 - 确保您了解任务编号不是对象sys_id

var incidentSysID = incident.number; // should be incident.sys_id

接下来,不清楚 PDF 内容的来源。如果列出了您的完整代码,我希望您已经注意到给出的错误pdf_content是“任何字符串变量”。

ServiceNow 确实具有从 HTML 参数创建 PDF 的能力。 从 HTML 生成 PDF

这是获取现有记录的 PDF(平台生成)的有用博客文章: 喜欢 PDF?PDF也爱你


推荐阅读