Можно ли напечатать несколько транзакций в одном документе PDF?Я вижу только два варианта, которые, по-видимому, имеют существенные недостатки:
1) Загружать отдельные записи в каждый из своих собственных объектов nlobjTemplateRenderer, а затем сшивать их все вместе в тегах перед рендерингом в PDF.Имеет ограничение менее 50 транзакций в зависимости от других действий, выполняемых при использовании в Suitelet.
2) Выполните поиск по внутренним идентификаторам выбранных записей и передайте результаты поиска в объект nlobjTemplateRenderer.Этот метод, основанный на существующей документации, не дает оснований полагать, что он будет правильно отображать записи с данными строк в виде столбцов результатов полностью внутри одного документа.
Мне кажется, что мой лучший вариант - № 1, норазбить желаемую транзакцию на группы по 5-10 записей и повторно вызвать Suitelet с небольшими группами в надежде достичь 45-секундного ограничения времени ожидания nlapiRequestURL, прежде чем объединить все результаты и вернуть окончательный 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(""));
}
Если это действительно лучший способ, то пусть так и будет, но я надеюсь, что есть более элегантное решение, которое я 'Я просто не вижу.