NetSuite:如何将记录添加到高级PDF/HMTL模板



所以我知道我可以使用N/render生成模板,并且我可以使用addRecord将记录对象添加到打印模板中,以使它们在FTL中可用。

我的问题是,当点击本机打印按钮并打印高级PDF/HTML模板时,我是否可以做类似的事情。我知道我可以在用户事件脚本中捕捉到PRINT事件,但除此之外,我就陷入了困境。

我知道这个问题有点笼统,我会根据要求添加上下文。我只是不知道该走哪条路。

EDIT:我熟悉在表单中添加custpage字段,然后在FTL中提取JSON的选项。在这种特定的情况下,如果我可以简单地添加一个完整的记录,那会方便得多。这意味着我正在进行项目履行打印,并希望将完整的父级销售订单记录添加到打印中,以便我可以通过salesrorder.memo等在FTL中访问它。类似于:

require(['N/render'], function(render) {
var renderer = render.create();
renderer.addRecord('customer', record.load({ type: record.Type.CUSTOMER, id: customer }));
})

问题是,我只知道如何对完全自定义的打印执行此操作,而不知道如何从事务上的Native打印按钮打印打印打印。我需要这样做来进行从销售订单行到项目履行行的行匹配,如果可能的话,我宁愿这样做,而不是创建客户页面并插入自定义对象。

我参考了我之前的一个答案。

使用UserEventScript中的beforeLoad钩子在context.form上设置额外的数据。您将能够访问模板上的这些数据。

/**
* @NApiVersion 2.x
* @NScriptType UserEventScript
*/
define(['N/ui/serverWidget'], function(serverWidget) {
function beforeLoad(context) {
// var request = context.request;
// var newRecord = context.newRecord;
var form = context.form;
var type = context.type;
var UserEventType = context.UserEventType;
// only execute during printing...
if (type != UserEventType.PRINT) return

var customData = {
hello: 'world'
}
var field = form.addField({
id : 'custpage_custom_data',
label: 'Custom Data',
type : serverWidget.FieldType.LONGTEXT
});
field.defaultValue = JSON.stringify(customData); 
}
return {
beforeLoad: beforeLoad
};
})

您可以通过以下途径访问模板中的数据:

<#if record.custpage_custom_data?has_content>
<#assign custom_data = record.custpage_custom_data?eval />
</#if>

根据您的问题,您希望在打印项目履行时添加来自销售订单的项目子列表数据。若是这样的话,那个么在这里我也使用了同样的情况。

步骤:

  • 仅在打印模式下加载脚本之前编写一个用户事件,然后创建一个保存的搜索以获取项目的数据,并将其保存在带有空格作为标签的长文本类型的自定义字段中
  • 自定义附加到项目履行记录的标准pdf模板
    GoTo-自定义-表单-高级pdf模板自定义项目履行的首选模板
  • 在那里添加一个带有该自定义字段的表

它将在标准打印按钮上工作。我这样做是为了记录工单。您可以使用销售订单保存的搜索在搜索中进行编辑。

用户事件

/**
*@NApiVersion 2.x
*@NScriptType UserEventScript
*/
define(['N/record', 'N/search', 'N/ui/serverWidget'], function (record, search, serverWidget) {
function beforeLoad(scriptContext) {
try {

if (scriptContext.type == 'print') {
var currentRec = scriptContext.newRecord;
var recid = currentRec.id;

columns[0] = search.createColumn({
name: "sequence",
join: "manufacturingOperationTask",
sort: search.Sort.ASC,
label: "Operation Sequence"
});   

columns[1] = search.createColumn({
name: "custevent_custom_op_name",
join: "manufacturingOperationTask",
label: "Operation Name(Instruction)"
});
columns[2] = search.createColumn({
name: "manufacturingworkcenter",
join: "manufacturingOperationTask",
label: "Manufacturing Work Center"
});

columns[3] = search.createColumn({
name: "formulanumeric",
formula: "Round({manufacturingoperationtask.runrate}*{quantity}/60,2)",
label: "BudgetHours"
});


//Creating search to get all the values for work order
var mySearch = search.create({
type: "workorder",
filters:
[
["type", "anyof", "WorkOrd"],
"AND",
["internalid", "anyof", recid],
"AND",
["mainline", "is", "T"]

],
columns: columns
});
var searchResultCount = mySearch.runPaged().count;
mySearch.run().each(function (result) {
// .run().each has a limit of 4,000 results

results.push(result);
return true;
});
//populate current printout with custom record entries
var customRecords = { columns: columns, results: results };

var columns = customRecords.columns, results = customRecords.results;

var custrecord = scriptContext.form.addField({ id: 'custpage_custrecord_to_print', type: serverWidget.FieldType.LONGTEXT, label: " " }),
custrecordArray = [];

if (results && results instanceof Array) {

for (var i = 0; i < results.length; i++) {

var singleLine = {};
for (var j = 0; j < columns.length; j++) {
if (i == i && j == 2) {
var value = results[i].getText(columns[j]);


} else {
var value = results[i].getValue(columns[j]);

}

if (j == 0 || j == 1 || j == 2) {
if (value.indexOf('.') == 0 || value.indexOf(',') == 0 || value.indexOf('-.') == 0 || value.indexOf('-,') == 0) {
value = '0' + value;

}

}
singleLine["col" + j] = (value) ? value : '';

}
custrecordArray.push(singleLine);
}
custrecord.defaultValue = JSON.stringify(custrecordArray);

}

}

} catch (e) {
log.error("ERROR", e);
}



}

return {
beforeLoad: beforeLoad,
};
});

在高级Pdf模板中:-

<#if record.custpage_custrecord_to_print?has_content>
<#assign customrecord = record.custpage_custrecord_to_print?eval />
<table width="100%" class="second_table" style="page-break-inside: auto; width: 100%; margin-top: 2px; padding-top: 0px">
<#list customrecord as customrecord_line>
<tr width="100%" border-top="solid black" margin-top="10px" style="margin-top:10px; page-break-before: auto;">
<th width="25%" align="left" style="padding: 2px 2px;">Step</th>
<th width="25%" align="center" style="padding: 2px 2px;">Activity</th>
<th width="25%" align="center" style="padding: 2px 2px;">Run Rate(Min/Unit)</th>
<th width="25%" align="center" style="padding: 2px 2px;">BudgetHours</th></tr>
<tr width="100%" style="page-break-inside: auto;">
<td width="25%" align="left" style="padding: 2px 2px;">0${customrecord_line.col0}</td>
<td width="25%" align="center" style="padding: 2px 2px;">${customrecord_line.col2}</td>
<td width="25%" align="center" style="padding: 2px 2px;">${customrecord_line.col3}</td>
<td width="25%" align="center" style="padding: 2px 2px;">${customrecord_line.col4}</td>
</tr>

</list>
</table>
</#if>

这将很有帮助。

谢谢,

最新更新