我正在开发销售订单和报价的 ClientScript。我添加了一个下拉选择交易行字段,以根据行项目的利润率选择佣金值。
对于每个行项目,获取金额和成本估算并计算毛利润。如果毛利在一定范围内,就在佣金选择上设置这个值。
下面是我写的代码:
/**
* @NApiVersion 2.1
* @NScriptType ClientScript
* @NModuleScope SameAccount
*/
define(['N/currentRecord'], (currentRecord)=>{
const CommLoad = (context)=>{
var currRecord = context.currentRecord,
lines = currRecord.getLineCount({ sublistId: 'item' });
for(let i=0; i<lines; i++){
const lineNum = currRecord.selectLine({ sublistId: 'item', line: i });
var lAmnt = currRecord.getCurrentSublistValue({ sublistId: 'item', line: i, fieldId: 'amount'});
var lCost = currRecord.getCurrentSublistValue({ sublistId: 'item', line: i, fieldId: 'costestimate'});
var GP = Math.trunc(((lAmnt-lCost)/lAmnt)*100); GP = GP.toFixed(2);
//console.log('line: '+i,'Amount: '+lAmnt,'Cost: '+lCost,'Gross Profit: '+GP);
if (GP < 10.00) {
currRecord.setCurrentSublistValue({
sublistId: 'item',
line: i,
fieldId: 'custcol3',
value: 1
});
}
if (GP >= 10.00) {
currRecord.setCurrentSublistValue({
sublistId: 'item',
line: i,
fieldId: 'custcol3',
value: 2
});
}
if (GP >= 15.00) {
currRecord.setCurrentSublistValue({
sublistId: 'item',
line: i,
fieldId: 'custcol3',
value: 3
});
}
if (GP >= 20.00) {
currRecord.setCurrentSublistValue({
sublistId: 'item',
line: i,
fieldId: 'custcol3',
value: 4
});
}
if (GP >= 25.00) {
currRecord.setCurrentSublistValue({
sublistId: 'item',
line: i,
fieldId: 'custcol3',
value: 5
});
}
if (GP >= 30.00) {
currRecord.setCurrentSublistValue({
sublistId: 'item',
line: i,
fieldId: 'custcol3',
value: 6
});
}
if (GP >= 35.00) {
currRecord.setCurrentSublistValue({
sublistId: 'item',
line: i,
fieldId: 'custcol3',
value: 7
});
}
if (GP >= 40.00) {
currRecord.setCurrentSublistValue({
sublistId: 'item',
line: i,
fieldId: 'custcol3',
value: 8
});
}
if (GP >= 45.00) {
currRecord.setCurrentSublistValue({
sublistId: 'item',
line: i,
fieldId: 'custcol3',
value: 9
});
}
else {
return true;
}
} //end for
}
const CommValidate = (context) =>{
var currRecord = context.currentRecord,
lines = currRecord.getLineCount({ sublistId: 'item' }),
lineNum = currRecord.getCurrentSublistValue({ sublistId: 'item', fieldId: 'line' }),
lAmnt = currRecord.getCurrentSublistValue({ sublistId: 'item', line: lineNum, fieldId: 'amount'}),
lCost = currRecord.getCurrentSublistValue({ sublistId: 'item', line: lineNum, fieldId: 'costestimate'}),
GP = Math.trunc(((lAmnt-lCost)/lAmnt)*100); GP = GP.toFixed(2);
//console.log('line: '+lineNum,'Amount: '+lAmnt,'Cost: '+lCost,'Gross Profit: '+GP);
if (GP < 10.00) {
currRecord.setCurrentSublistValue({
sublistId: 'item',
line: lineNum,
fieldId: 'custcol3',
value: 1
});
}
if (GP >= 10.00) {
currRecord.setCurrentSublistValue({
sublistId: 'item',
line: lineNum,
fieldId: 'custcol3',
value: 2
});
}
if (GP >= 15.00) {
currRecord.setCurrentSublistValue({
sublistId: 'item',
line: lineNum,
fieldId: 'custcol3',
value: 3
});
}
if (GP >= 20.00) {
currRecord.setCurrentSublistValue({
sublistId: 'item',
line: lineNum,
fieldId: 'custcol3',
value: 4
});
}
if (GP >= 25.00) {
currRecord.setCurrentSublistValue({
sublistId: 'item',
line: lineNum,
fieldId: 'custcol3',
value: 5
});
}
if (GP >= 30.00) {
currRecord.setCurrentSublistValue({
sublistId: 'item',
line: lineNum,
fieldId: 'custcol3',
value: 6
});
}
if (GP >= 35.00) {
currRecord.setCurrentSublistValue({
sublistId: 'item',
line: lineNum,
fieldId: 'custcol3',
value: 7
});
}
if (GP >= 40.00) {
currRecord.setCurrentSublistValue({
sublistId: 'item',
line: lineNum,
fieldId: 'custcol3',
value: 8
});
}
if (GP >= 45.00) {
currRecord.setCurrentSublistValue({
sublistId: 'item',
line: lineNum,
fieldId: 'custcol3',
value: 9
});
}
}
const CommFChange = (context) =>{
}
return {
pageInit: CommLoad,
validateLine: CommValidate,
fieldChanged: CommFChange
};
});
该脚本在 pageInit 上完美运行,当订单项加载时,任何没有佣金值的订单项都将被分配一个。
我现在在 validateLine 上遇到问题,我可以更新费率,甚至添加新项目,变量将计算并分配佣金值,但我无法离开订单项,我可以继续按“添加”或“确定”,它不会带我去任何地方。
我确实尝试在语句中甚至在语句之外添加 commitLine,但我收到了此错误:RangeError 超过最大调用堆栈大小
看起来在我的 validateline 函数的末尾,我需要添加一个 return true。
添加后,我能够弹到物品上并四处走动。奇迹般有效。再次感谢氪!
/**
* @NApiVersion 2.1
* @NScriptType ClientScript
* @NModuleScope SameAccount
*/
define(['N/currentRecord','N/record'], (currentRecord,record)=>{
const CommLoad = (context)=>{
var currRecord = context.currentRecord,
lines = currRecord.getLineCount({ sublistId: 'item' });
for(let i=0; i<lines; i++){
const lineNum = currRecord.selectLine({ sublistId: 'item', line: i });
var lAmnt = currRecord.getCurrentSublistValue({ sublistId: 'item', line: i, fieldId: 'amount'});
var lCost = currRecord.getCurrentSublistValue({ sublistId: 'item', line: i, fieldId: 'costestimate'});
var GP = Math.trunc(((lAmnt-lCost)/lAmnt)*100); GP = GP.toFixed(2);
//console.log('line: '+i,'Amount: '+lAmnt,'Cost: '+lCost,'Gross Profit: '+GP);
if (GP < 10.00) {
currRecord.setCurrentSublistValue({
sublistId: 'item',
line: i,
fieldId: 'custcol3',
value: 1
});
}
if (GP >= 10.00) {
currRecord.setCurrentSublistValue({
sublistId: 'item',
line: i,
fieldId: 'custcol3',
value: 2
});
}
if (GP >= 15.00) {
currRecord.setCurrentSublistValue({
sublistId: 'item',
line: i,
fieldId: 'custcol3',
value: 3
});
}
if (GP >= 20.00) {
currRecord.setCurrentSublistValue({
sublistId: 'item',
line: i,
fieldId: 'custcol3',
value: 4
});
}
if (GP >= 25.00) {
currRecord.setCurrentSublistValue({
sublistId: 'item',
line: i,
fieldId: 'custcol3',
value: 5
});
}
if (GP >= 30.00) {
currRecord.setCurrentSublistValue({
sublistId: 'item',
line: i,
fieldId: 'custcol3',
value: 6
});
}
if (GP >= 35.00) {
currRecord.setCurrentSublistValue({
sublistId: 'item',
line: i,
fieldId: 'custcol3',
value: 7
});
}
if (GP >= 40.00) {
currRecord.setCurrentSublistValue({
sublistId: 'item',
line: i,
fieldId: 'custcol3',
value: 8
});
}
if (GP >= 45.00) {
currRecord.setCurrentSublistValue({
sublistId: 'item',
line: i,
fieldId: 'custcol3',
value: 9
});
}
} //end for
}
const CommValidate = (context) =>{
var currRecord = context.currentRecord,
lineNum = currRecord.getCurrentSublistValue({ sublistId: 'item', fieldId: 'line' }),
lAmnt = currRecord.getCurrentSublistValue({ sublistId: 'item', line: lineNum, fieldId: 'amount'}),
lCost = currRecord.getCurrentSublistValue({ sublistId: 'item', line: lineNum, fieldId: 'costestimate'}),
GP = Math.trunc(((lAmnt-lCost)/lAmnt)*100); GP = GP.toFixed(2);
//console.log('line: '+lineNum,'Amount: '+lAmnt,'Cost: '+lCost,'Gross Profit: '+GP);
if (GP < 10.00) {
currRecord.setCurrentSublistValue({
sublistId: 'item',
line: lineNum,
fieldId: 'custcol3',
value: 1
});
}
if (GP >= 10.00) {
currRecord.setCurrentSublistValue({
sublistId: 'item',
line: lineNum,
fieldId: 'custcol3',
value: 2
});
}
if (GP >= 15.00) {
currRecord.setCurrentSublistValue({
sublistId: 'item',
line: lineNum,
fieldId: 'custcol3',
value: 3
});
}
if (GP >= 20.00) {
currRecord.setCurrentSublistValue({
sublistId: 'item',
line: lineNum,
fieldId: 'custcol3',
value: 4
});
}
if (GP >= 25.00) {
currRecord.setCurrentSublistValue({
sublistId: 'item',
line: lineNum,
fieldId: 'custcol3',
value: 5
});
}
if (GP >= 30.00) {
currRecord.setCurrentSublistValue({
sublistId: 'item',
line: lineNum,
fieldId: 'custcol3',
value: 6
});
}
if (GP >= 35.00) {
currRecord.setCurrentSublistValue({
sublistId: 'item',
line: lineNum,
fieldId: 'custcol3',
value: 7
});
}
if (GP >= 40.00) {
currRecord.setCurrentSublistValue({
sublistId: 'item',
line: lineNum,
fieldId: 'custcol3',
value: 8
});
}
if (GP >= 45.00) {
currRecord.setCurrentSublistValue({
sublistId: 'item',
line: lineNum,
fieldId: 'custcol3',
value: 9
});
}
return true;
}
const CommFChange = (context) =>{
}
return {
pageInit: CommLoad,
validateLine: CommValidate,
fieldChanged: CommFChange
};
});