#javascript #netsuite #suitescript
#javascript #netsuite #suitescript
Вопрос:
Мой код:
function combineExpenseFiles(type){
try{
var currentRecordId = nlapiGetRecordId();
var currentRecord = nlapiLoadRecord('expensereport',currentRecordId);
var expensesLineItemCount = currentRecord.getLineItemCount('expense');
var template = '';
var fileParts = new Array();
template = '<?xml version="1.0"?><!DOCTYPE pdf PUBLIC "-//big.faceless.org//report" "report-1.1.dtd">n';
template = '<pdf>n<head>n';
template = '</head>n<body>n';
flag=1;
for(var i=1;i<=expensesLineItemCount;i ){
var fileId = currentRecord.getLineItemValue('expense','expmediaitem',i);
var file = nlapiLoadFile(fileId);
var name = file.getName();
//var fileUrl = file.getURL();
nlapiLogExecution('DEBUG','online',file.isOnline());
var fileUrl = '/core/media/media.nl?id=36333amp;c=3960047amp;h=487697f81e113499d5f4';
template = '<img src="';
template = nlapiEscapeXML(fileUrl);
template = '" width="10%" height="10%"></img>n<br></br><br></br>';
break;
}
template = '</body>n</pdf>';
nlapiLogExecution('DEBUG','filename',template);
var renderer = nlapiCreateTemplateRenderer();
renderer.setTemplate(template);
//renderer.addRecord('url',url);
var xml = renderer.renderToString();
nlapiLogExecution('DEBUG','xml',xml);
var combinefile = nlapiXMLToPDF(xml);
combinefile.setEncoding('UTF-8');
combinefile.setName('expense_f.pdf');
nlapiLogExecution('DEBUG','file',combinefile);
combinefile.setFolder(2221); // Amit_Expenses
nlapiSubmitFile(combinefile);
}catch(error){
//nlapiLogExecution('DEBUG','error1',error.getDetails());
nlapiLogExecution('DEBUG','error',error.toString());
}
}
Что делает этот код, так это то, что он принимает все файлы «jpeg», связанные с расходом, и создает шаблон, содержащий все файлы, и генерирует файл .pdf, содержащий все изображения. Код работает отлично.
На данный момент я жестко запрограммировал URL-адрес файла для целей тестирования.
Проблема в том, что код не может ссылаться на изображения для определенных папок. Например, если я ссылаюсь на изображения профиля сотрудников, это ссылается на них, но для некоторых папок код не может ссылаться на изображения этих папок.
Я проверил, что эти папки не являются частными. Пожалуйста, предложите
Ответ №1:
Исходя из моего опыта, мне пришлось установить «Доступно без входа в систему» для любого изображения, которое мне нужно отобразить в формате PDF. Я не могу объяснить более глубокую причину, почему. Я могу только рассказать вам, как мне удалось обойти проблему.
Я полагаю, что это как-то связано с тем, как NetSuite реализовал генератор XML в PDF. Похоже, он не запускается в том же контексте, что и основной скрипт. Но, как я уже говорил выше, я не уверен, почему.
Надеюсь, вы найдете это полезным.
Комментарии:
1. Спасибо, я рассмотрю это 🙂
2. Если файл .pdf, то есть ли способ объединить все файлы .pdf, связанные с расходами, и создать один файл PDF?
3. Вроде как, вы должны исследовать тег pdfset из BFO. BFO — это библиотека xml для преобразования в PDF, которую использует NetSuite.
4. @DeepakGarg можете ли вы отметить мой ответ как правильный, поскольку он сработал.