Javascript Suitescript客户端脚本错误JS#U异常-TypeError:无法读取属性';名称';未定义的
Javascript Suitescript客户端脚本错误JS#U异常-TypeError:无法读取属性';名称';未定义的,javascript,netsuite,suitescript,suitescript2.0,Javascript,Netsuite,Suitescript,Suitescript2.0,首先对不起,我的英语一点也不好, 我想创建一个SuiteScript2.0,以便在用户希望保存商品Fulfiflment时验证客户信用额度 如果要完成的项目的总客户余额和金额超过了客户信用限额,则会有一个确认对话框,询问用户是否要提交以供完成审批或编号。 如果用户单击“是”,脚本将更新审批原因、审批状态、要审批的数量,并选中销售订单记录上的“需要审批到履行”复选框字段,然后将用户重定向到销售订单记录。 当脚本保存销售订单记录时,出现错误“JS_EXCEPTION-TypeError:无法读取未定
首先对不起,我的英语一点也不好,
我想创建一个SuiteScript2.0,以便在用户希望保存商品Fulfiflment时验证客户信用额度
如果要完成的项目的总客户余额和金额超过了客户信用限额,则会有一个确认对话框,询问用户是否要提交以供完成审批或编号。
如果用户单击“是”,脚本将更新审批原因、审批状态、要审批的数量,并选中销售订单记录上的“需要审批到履行”复选框字段,然后将用户重定向到销售订单记录。
当脚本保存销售订单记录时,出现错误“JS_EXCEPTION-TypeError:无法读取未定义的属性“name”。
谁能告诉我是哪一行导致了错误,或者如何解决我的问题,
多谢各位
这是我的剧本:
*@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
};
}); ```
*@NApiVersion 2.x
*@NScriptType客户端脚本
*/
定义(['N/record','N/currentRecord','N/search'],函数(记录,当前记录,搜索){
函数saveRecord(上下文){
var currentRecord=context.currentRecord;
var isDynamic=currentRecord.isDynamic;
log.debug({
标题:“isDynamic”,
详细信息:isDynamic
});
var soId=currentRecord.getValue({
fieldId:“createdfrom”
});
var fromRecord=search.lookupFields({//从Createfrom字段获取记录类型
类型:search.type.TRANSACTION,
id:soId,
列:“记录类型”,
});
调试(“createdfrom类型”,fromRecord);
if(fromRecord.recordtype!=“salesorder”)
返回;
else if(fromRecord.recordtype==“salesorder”){
var soRecord=record.load({
类型:record.type.SALES\u订单,
id:soId,
isDynamic:对
});
var pymtMethod=soRecord.getValue({
fieldId:“custbody\u bmpt\u metode\u pembayaran”
});
log.debug('Payment Method',pymtMethod);
如果(pymtMethod==3 | | pymtMethod==4){
var creditLimit=soRecord.getValue({
fieldId:“credlim”
});
log.debug('creditLimit',creditLimit);
var余额=soRecord.getValue({
fieldId:“平衡”
});
log.debug('balance',balance);
var剩余余额=(信用额度*1.15)-余额;
log.debug({
标题:“客户剩余余额”,
详情:剩余余额
});
var itemCount=currentRecord.getLineCount({
子列表:“项”
});
log.debug({
标题:“物品计数”,
详细信息:itemCount
});
var soItemCount=soRecord.getLineCount({
子列表:“项”
});
log.debug({
标题:“soItemCount”,
详情:soItemCount
});
var totalAmount=0;
风险价值金额=0;
//获取每行的项目详细信息
对于(变量i=0;ivar soUpdate = record.submitFields({
type: record.Type.SALES_ORDER,
id: soId,
values: {
'custbody_approval_reason': input_reason,
'custbody_approval_status_so': 1
}
});
var id = record.submitFields({
type: record.Type.SALES_ORDER,
id: 1,
values: {
memo: 'ABC'
},
options: {
enableSourcing: false //default is true
}
});