有没有办法将许多交易选择打印到一个 PDF 文档中?我只看到两个似乎有明显缺点的选项:
1) 将单个记录加载到它们自己的每个 nlobjTemplateRenderer 对象中,然后在呈现为 PDF 之前将它们全部在标签内拼接在一起。具有少于 50 个事务的限制,具体取决于在 Suitelet 中使用时采取的其他操作。
2) 根据所选记录的内部 ID 进行搜索,并将搜索结果传递给 nlobjTemplateRenderer 对象。这种基于现有文档的方法不会让我相信它会在单个文档中完全正确地显示带有行数据的记录作为结果列。
似乎我最好的选择是#1,但是将所需的事务分成 5-10 条记录的组,并与小组反复调用 Suitelet,希望在拼接之前满足 nlapiRequestURL 的 45 秒超时限制所有结果并返回最终的 PDF 文档。我几乎看到它的基本形式如下:
// initial called function that will return completed PDF document file
function buildPdfFromRecords() {
var pdfBuilder = [];
var selectedIDs = [];
var chunks = chunkify(selectedIDs, 10);
for (var c = 0; c < chunks.length; c++) {
var param = { id_list : JSON.stringify(chunks[s]) };
var result = nlapiRequestURL(url, param).getBody();
pdfBuilder.push(result);
}
var finalXML = "<pdfset>" + pdfBuilder.join("") + "</pdfset>";
var pdfDoc = nlapiXMLToPDF(finalXML);
}
// function in suitelet called by url to handle individual groups of record internal IDs
// to mitigate scripting governance limits
function handleRecordIdListRequest(request, reponse) {
var idList = JSON.parse(request.getParameter("id_list"));
var templateXML = nlapiLoadRecord("template.txt").getValue();
var pdfBuilder = [];
for (var i = 0; i < idList.length; i++) {
var transRecord = nlapiLoadRecord("recordtype", idList[i]);
var renderer = nlapiCreateTemplateRenderer();
renderer.setTemplate(templateXML);
renderer.addRecord("record", transRecord);
pdfBuilder.push(renderer.renderToString());
}
response.write(pdfBuilder.join(""));
}
如果这真的是最好的方法,那就这样吧,但我希望有一个更优雅的解决方案,我只是没有看到。