SuiteScript 2.0无需保存即可将PDF呈现到浏览器

时间:2019-05-22 13:37:26

标签: suitescript2.0

我有一个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为true时,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),但得到的结果相同。

我在这里想念什么?

1 个答案:

答案 0 :(得分: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);