【发布时间】:2020-11-11 08:34:51
【问题描述】:
首先抱歉,我的英语一点都不好,
当用户想要保存项目履行时,我想创建一个 Suitescript 2.0 来验证客户信用额度。
如果客户总余额和要履行的项目金额超过客户信用额度,将有一个确认对话框询问用户是否要提交履行批准。
如果用户单击“是”,则脚本会更新批准原因、批准状态、要批准的数量,并选中销售订单记录上的需要批准到履行复选框字段,然后将用户重定向到销售订单记录。
当脚本保存销售订单记录时,我收到错误 "JS_EXCEPTION - TypeError: Cannot read property 'name' of undefined."
谁能告诉我哪一行导致错误或如何解决我的问题,
谢谢你。
这是我的脚本:
*@NApiVersion 2.x
*@NScriptType ClientScript
*/
define(['N/record', 'N/currentRecord', 'N/search'], function (record, currentRecord, search) {
function saveRecord(context) {
var currentRecord = context.currentRecord;
var isDynamic = currentRecord.isDynamic;
log.debug({
title: 'isDynamic',
details: isDynamic
});
var soId = currentRecord.getValue({
fieldId: 'createdfrom'
});
var fromRecord = search.lookupFields({ // Get Record Type from Createfrom field
type: search.Type.TRANSACTION,
id: soId,
columns: 'recordtype',
});
log.debug("createdfrom Type", fromRecord);
if (fromRecord.recordtype != 'salesorder')
return;
else if (fromRecord.recordtype == 'salesorder') {
var soRecord = record.load({
type: record.Type.SALES_ORDER,
id: soId,
isDynamic: true
});
var pymtMethod = soRecord.getValue({
fieldId: 'custbody_bmpt_metode_pembayaran'
});
log.debug('Payment Method', pymtMethod);
if (pymtMethod == 3 || pymtMethod == 4) {
var creditLimit = soRecord.getValue({
fieldId: 'credlim'
});
log.debug('creditLimit', creditLimit);
var balance = soRecord.getValue({
fieldId: 'balance'
});
log.debug('balance', balance);
var remainingBalance = (creditLimit * 1.15) - balance;
log.debug({
title: "Customer Remaining Balance",
details: remainingBalance
});
var itemCount = currentRecord.getLineCount({
sublistId: 'item'
});
log.debug({
title: "itemCount",
details: itemCount
});
var soItemCount = soRecord.getLineCount({
sublistId: 'item'
});
log.debug({
title: "soItemCount",
details: soItemCount
});
var totalAmount = 0;
var amount = 0;
//get item Detail per Line
for (var i = 0; i < itemCount; i++) {
var fulfillCheck = currentRecord.getSublistValue({
sublistId: 'item',
fieldId: 'itemreceive',
line: i
});
log.debug({
title: "fulfillCheck" + [i],
details: fulfillCheck
});
// validate if fulfill field is checked
if (fulfillCheck == true) {
var ifItem = currentRecord.getSublistValue({
sublistId: 'item',
fieldId: 'item',
line: i
});
log.debug({
title: "ifItem",
details: ifItem
});
var itemQty = currentRecord.getSublistValue({
sublistId: 'item',
fieldId: 'quantity',
line: i
});
log.debug({
title: "itemQty",
details: itemQty
});
var ifItemRate = currentRecord.getSublistValue({
sublistId: 'item',
fieldId: 'itemunitprice',
line: i
});
log.debug({
title: "ifItemRate",
details: ifItemRate
});
amount = itemQty * ifItemRate;
log.debug({
title: "amount",
details: amount
});
}
totalAmount += amount;
log.debug({
title: 'Amount Total',
details: totalAmount
});
}
var currencySymbol = {
style: "currency",
currency: "IDR"
};
var totalBalance = balance + totalAmount;
log.debug({
title: 'totalBalance',
details: totalBalance
});
var reason = soRecord.getValue({
fieldId: 'custbody_approval_reason'
});
if (totalAmount > remainingBalance) {
// confirmation dialog
var confirmation = confirm('Total Customer Balance ' + totalBalance.toLocaleString("id-ID", currencySymbol) +
'\nhas Exceeded Customer Credit Limit of ' + creditLimit.toLocaleString("id-ID", currencySymbol) +
'\nDo You Want Submit Approval ?');
log.debug({
title: "confirmation",
details: confirmation
});
if (confirmation) {
if (reason == "" || reason == null) {
var input_reason = prompt('Please enter approval reason');
// set Sales Order Record 'approval reason' field Value .
var soUpdate = record.submitFields({
type: record.Type.SALES_ORDER,
id: soId,
values: {
'custbody_approval_reason': input_reason,
'custbody_approval_status_so': 1
}
});
log.debug({
title: 'soUpdate',
details: soUpdate
});
}
//set approval status to 1 - pending approval
var approvalSO = record.submitFields({
type: record.Type.SALES_ORDER,
id: soId,
values: {
'custbody_approval_status_so': 1
}
});
for (var u = 0; u < itemCount; u++) {
var fulfill = currentRecord.getSublistValue({
sublistId: 'item',
fieldId: 'itemreceive',
line: u
});
log.debug({
title: "fulfill" + [u],
details: fulfill
});
// validate if fulfill field is checked
if (fulfill == true) {
var currentItem = currentRecord.getSublistValue({
sublistId: 'item',
fieldId: 'item',
line: u
});
log.debug({
title: "currentItem",
details: currentItem
});
var currentQty = currentRecord.getSublistValue({
sublistId: 'item',
fieldId: 'quantity',
line: u
});
log.debug({
title: "currentQty",
details: currentQty
});
// get SO item information.
for (var so = 0; so < soItemCount; so++) {
var soLine = soRecord.selectLine({
sublistId: 'item',
line: so
});
var SOItem = soRecord.getCurrentSublistValue({
sublistId: 'item',
fieldId: 'item'
});
log.debug({
title: 'SOItem ' + [so],
details: SOItem
});
if (currentItem == SOItem) {
soRecord.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'custcol_need_approval',
value: true
});
soRecord.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'custcol_fulfill_qty',
value: currentQty
});
}
soRecord.commitLine({
sublistId: 'item'
});
}
}
}
soRecord.save();
//open Sales Order Record at current Windows.
window.open('https://xxxx.app.netsuite.com/app/accounting/transactions/salesord.nl?id=' + soId, +'_self');
} else {
alert('Silahkan Perbaiki dan Submit Kembali !!');
}
return false;
}
}
}
return true;
}
return {
saveRecord: saveRecord
};
}); ```
【问题讨论】:
标签: javascript netsuite suitescript suitescript2.0