如何在NetSuite Suitelet PDF中加载Issue列表数据?
在SuiteScript 1.0 Suitelet中加载Issue列表并生成PDF表格
核心步骤:搜索Issue数据 + 构建PDF表格
1. 搜索Issue记录
用nlapiSearchRecord获取Issue数据,可按需添加过滤条件和返回字段:
// 定义过滤条件(示例:排除已关闭的Issue) var filters = [ new nlobjSearchFilter('status', null, 'noneof', ['closed']) ]; // 指定需要返回的基本字段 var columns = [ new nlobjSearchColumn('title'), // Issue标题 new nlobjSearchColumn('createddate'), // 创建日期 new nlobjSearchColumn('status'), // 状态 new nlobjSearchColumn('priority'), // 优先级 new nlobjSearchColumn('assigned') // 经办人(可选) ]; // 执行搜索,返回结果集 var issueResults = nlapiSearchRecord('issue', null, filters, columns);
2. 构建PDF表格内容
基于搜索结果生成HTML格式的表格,再转换为PDF:
// 初始化PDF的HTML结构 var pdfHtml = '<html><body style="font-family: Arial, sans-serif;">'; pdfHtml += '<h2>Issue基本信息列表</h2>'; pdfHtml += '<table width="100%" border="1" cellpadding="6" cellspacing="0" style="border-collapse: collapse;">'; // 添加表头 pdfHtml += '<thead><tr style="background-color: #f5f5f5;">'; pdfHtml += '<th>标题</th><th>创建日期</th><th>状态</th><th>优先级</th><th>经办人</th>'; pdfHtml += '</tr></thead><tbody>'; // 循环填充表格数据 if (issueResults) { for (var i = 0; i < issueResults.length; i++) { var issue = issueResults[i]; pdfHtml += '<tr>'; pdfHtml += '<td>' + issue.getValue('title') + '</td>'; // 格式化日期为易读格式 pdfHtml += '<td>' + nlapiDateToString(new Date(issue.getValue('createddate')), 'date') + '</td>'; // getText获取字段显示值(而非内部ID) pdfHtml += '<td>' + issue.getText('status') + '</td>'; pdfHtml += '<td>' + issue.getText('priority') + '</td>'; pdfHtml += '<td>' + issue.getText('assigned') + '</td>'; pdfHtml += '</tr>'; } } else { pdfHtml += '<tr><td colspan="5" style="text-align: center;">暂无匹配的Issue记录</td></tr>'; } // 闭合HTML标签 pdfHtml += '</tbody></table></body></html>';
3. 整合到Suitelet并返回PDF
在Suitelet的onRequest函数中完成数据搜索、PDF构建,最终返回给用户:
function issuePdfSuitelet(request, response) { if (request.getMethod() === 'GET') { // 步骤1:搜索Issue数据 var filters = [new nlobjSearchFilter('status', null, 'noneof', ['closed'])]; var columns = [ new nlobjSearchColumn('title'), new nlobjSearchColumn('createddate'), new nlobjSearchColumn('status'), new nlobjSearchColumn('priority'), new nlobjSearchColumn('assigned') ]; var issueResults = nlapiSearchRecord('issue', null, filters, columns); // 步骤2:构建PDF HTML var pdfHtml = '<html><body style="font-family: Arial, sans-serif;">'; pdfHtml += '<h2>Issue基本信息列表</h2>'; pdfHtml += '<table width="100%" border="1" cellpadding="6" cellspacing="0" style="border-collapse: collapse;">'; pdfHtml += '<thead><tr style="background-color: #f5f5f5;">'; pdfHtml += '<th>标题</th><th>创建日期</th><th>状态</th><th>优先级</th><th>经办人</th>'; pdfHtml += '</tr></thead><tbody>'; if (issueResults) { for (var i = 0; i < issueResults.length; i++) { var issue = issueResults[i]; pdfHtml += '<tr>'; pdfHtml += '<td>' + issue.getValue('title') + '</td>'; pdfHtml += '<td>' + nlapiDateToString(new Date(issue.getValue('createddate')), 'date') + '</td>'; pdfHtml += '<td>' + issue.getText('status') + '</td>'; pdfHtml += '<td>' + issue.getText('priority') + '</td>'; pdfHtml += '<td>' + issue.getText('assigned') + '</td>'; pdfHtml += '</tr>'; } } else { pdfHtml += '<tr><td colspan="5" style="text-align: center;">暂无匹配的Issue记录</td></tr>'; } pdfHtml += '</tbody></table></body></html>'; // 生成PDF文件并返回 var pdfFile = nlapiCreateFile('Issue_Report_' + new Date().toISOString().slice(0,10) + '.pdf', 'PDF', pdfHtml); response.setContentType('PDF'); response.write(pdfFile.getValue()); } }
注意事项
- 权限检查:确保Suitelet的执行角色拥有Issue记录的查看权限,否则无法获取数据
- 字段扩展:可根据需求添加更多字段(如
department部门、description描述),只需在columns数组中新增对应nlobjSearchColumn - 过滤逻辑:可修改
filters数组添加更精准的条件(如按创建时间范围、特定经办人过滤) - 日期格式化:使用
nlapiDateToString将原始日期值转换为用户友好的格式
内容的提问来源于stack exchange,提问作者Valeria Murguía
相关产品推荐
相关产品推荐

