如何在 NetSuite 的 beforeLoad 函数中操作记录?
How to manipulate a record in beforeLoad functioni on NetSuite?
目前,我们有一个SO Order(SO),点击"Drop Ship"按钮后,页面会跳转到另一个页面创建一个Pruchase Order(PO)。
因为如果在pageInit阶段抓取值,显示记录会耗费很多时间(项目越多耗时越多)。
因此我们想在SO上获取一些值,然后将其放在befordLoad函数中的PO上。但是我在语法上遇到了一些麻烦,因此不确定它是否适用于 NetSuite。
我的脚本如下:
/**
*@NApiVersion 2.x
*@NScriptType UserEventScript
*/
define(['N/record', 'N/ui/serverWidget', 'N/search'],
function (record, serverWidget, search) {
function beforeLoad(context) {
var rec = record.create({
type: record.Type.PURCHASE_ORDER,
isDynamic: true
});
var rec = context.newRecord;
// var createdFromID = rec.getValue({
// fieldId: 'createdfrom'
// });
log.debug('createdFormID', 'test');
log.debug('createdFormID', createdFromID); // 1765886
if (createdFromID != null && createdFromID.length > 0) {
var so_record = record.load({
type: record.Type.SALES_ORDER,
id: createdFromID,
isDynamic: false
});
if (so_record != null) {
//make sure there is a shipping line in the PO, if, create a new line.
// var recordChanged = checkForShippingLine(rec);
log.debug('context.type', context.type);
if (context.type == 'create') {
try {
var po_lines = rec.getLineCount({
sublistId: 'item'
});
var so_costestimate;
for (var poLineNum = 0; poLineNum < po_lines; poLineNum++) {
// var currIndex = rec.selectLine({
// sublistId: 'item',
// line: poLineNum
// });
var soLineID = rec.getSublistValue({
sublistId: 'item',
fieldId: 'custcol_so_line_id',
line: poLineNum
});
log.debug('soLineID', soLineID);
if (soLineID != null && soLineID.length > 0) {
var soLineNumber = so_record.findSublistLineWithValue({
sublistId: 'item',
fieldId: 'custcol_so_line_id',
value: soLineID
});
so_costestimaterate = so_record.getSublistValue({
sublistId: 'item',
fieldId: 'costestimaterate',
line: soLineNumber
});
// rec.setCurrentSublistValue({
rec.setValue({
// sublistId: 'item',
fieldId: 'custcol_so_est_unit_cost',
// line: poLineNum,
// fireSlavingSync: true,
value: parseFloat(so_costestimaterate)
});
rec.commitLine({
sublistId: "item"
});
} //if (soLineNumInPO != null && soLineNumInPO.length > 0)
else {}
} //for(var poLineNum = 1; poLineNum <= po_lines; poLineNum++)
} catch (error) {}
} //if (context.mode == 'create')
}
}
return true;
}
终于找到解决方法了
将 rec.setValue{...}
更改为 rec.setCurrentSublistValue{...}
即可。
目前,我们有一个SO Order(SO),点击"Drop Ship"按钮后,页面会跳转到另一个页面创建一个Pruchase Order(PO)。
因为如果在pageInit阶段抓取值,显示记录会耗费很多时间(项目越多耗时越多)。
因此我们想在SO上获取一些值,然后将其放在befordLoad函数中的PO上。但是我在语法上遇到了一些麻烦,因此不确定它是否适用于 NetSuite。
我的脚本如下:
/**
*@NApiVersion 2.x
*@NScriptType UserEventScript
*/
define(['N/record', 'N/ui/serverWidget', 'N/search'],
function (record, serverWidget, search) {
function beforeLoad(context) {
var rec = record.create({
type: record.Type.PURCHASE_ORDER,
isDynamic: true
});
var rec = context.newRecord;
// var createdFromID = rec.getValue({
// fieldId: 'createdfrom'
// });
log.debug('createdFormID', 'test');
log.debug('createdFormID', createdFromID); // 1765886
if (createdFromID != null && createdFromID.length > 0) {
var so_record = record.load({
type: record.Type.SALES_ORDER,
id: createdFromID,
isDynamic: false
});
if (so_record != null) {
//make sure there is a shipping line in the PO, if, create a new line.
// var recordChanged = checkForShippingLine(rec);
log.debug('context.type', context.type);
if (context.type == 'create') {
try {
var po_lines = rec.getLineCount({
sublistId: 'item'
});
var so_costestimate;
for (var poLineNum = 0; poLineNum < po_lines; poLineNum++) {
// var currIndex = rec.selectLine({
// sublistId: 'item',
// line: poLineNum
// });
var soLineID = rec.getSublistValue({
sublistId: 'item',
fieldId: 'custcol_so_line_id',
line: poLineNum
});
log.debug('soLineID', soLineID);
if (soLineID != null && soLineID.length > 0) {
var soLineNumber = so_record.findSublistLineWithValue({
sublistId: 'item',
fieldId: 'custcol_so_line_id',
value: soLineID
});
so_costestimaterate = so_record.getSublistValue({
sublistId: 'item',
fieldId: 'costestimaterate',
line: soLineNumber
});
// rec.setCurrentSublistValue({
rec.setValue({
// sublistId: 'item',
fieldId: 'custcol_so_est_unit_cost',
// line: poLineNum,
// fireSlavingSync: true,
value: parseFloat(so_costestimaterate)
});
rec.commitLine({
sublistId: "item"
});
} //if (soLineNumInPO != null && soLineNumInPO.length > 0)
else {}
} //for(var poLineNum = 1; poLineNum <= po_lines; poLineNum++)
} catch (error) {}
} //if (context.mode == 'create')
}
}
return true;
}
终于找到解决方法了
将 rec.setValue{...}
更改为 rec.setCurrentSublistValue{...}
即可。