首页 > 解决方案 > SuiteScript 2.0 将 PDF 渲染到浏览器而不保存

问题描述

我有一个 Suitelet,它从当前没有高级 PDF 功能的各种记录类型中呈现 PDF。

当我 file.save() 完成的 PDF 时一切正常,但我希望选择在浏览器中打开 PDF 而不先保存到文件柜。

目前,脚本的动作部分是这样的:

        var templateFile = config.getValue({fieldId:'custrecord_extpdf_template_xml'});

        var templateHTML = file.load({id: templateFile}).getContents();


        var renderer = render.create();

        renderer.templateContent = templateHTML;

        renderer.addRecord('record',rec);
        renderer.addRecord('config',config);


        if (SAVETORECORD) {
            var PDF = renderer.renderAsPdf();
            PDF.folder = config.getValue({fieldId: 'custrecord_extpdf_temp_folder'});
            PDF.name = param.rectype + param.id + '.pdf';
            var fid = PDF.save();
            var attachitem = record.attach({
                record: { type: 'file', id: fid },
                to: { type: param.rectype, id: param.id }
            })

            context.response.write(file.load({id:fid}).url )
        }
        else {
            var PDF = renderer.renderAsPdf();
            PDF.name = param.rectype + param.id + '.pdf';
            context.response.writeFile(PDF,false)
        }

当变量 SAVETORECORD 为真时,PDF 呈现良好,并在新选项卡中打开,附加到记录,并保存到文件柜。

但是,当 SAVETORECORD 为 false 时,会打开一个新窗口但为空白。

使用以下代码从自定义按钮触发器调用 Suitelet:

        var response = https.get({url: suiteletURL });
        if (response.body) window.open(response.body,'_blank');
        window.location.reload(true);

我已经尝试过context.response.writeFile(PDF,false)context.response.writeFile(PDF,true)但得到了相同的结果。

我在这里想念什么?

标签: suitescript2.0

解决方案


睡在上面之后,我想我做错了什么。

要保存 PDF,代码保持原样。

要在浏览器中打开而不保存,我只需要打开 SuiteLet URL 而不是按钮脚本中的 response.body:

            if (SAVERECORD) {
                var response = https.get({url: suiteletURL });
                if (response.body) window.open(response.body,'_blank');
            }
            else {
                window.open(suiteletURL,'_blank');
            }

            window.location.reload(true);

推荐阅读