gpt4 book ai didi

javascript - 如何在 Suitelet 打印输出 (Netsuite) 中对行项目使用高阶函数而不是 FOR 循环?

转载 作者:行者123 更新时间:2023-12-01 00:52:54 25 4
gpt4 key购买 nike

我的上级要求我使用高阶函数(.filter/.map/.reject/.reduce)打印行项目的值。我很困惑如何编写高阶函数而不是 for 循环(用于打印发票打印输出中的行值)。我只需要在数量超过 3 时打印该行。我是一名实习生,我不知道它是如何工作的,请帮忙。

链接到代码片段:https://drive.google.com/file/d/1uVQQb0dsg_bo53fT3vk9f0G8WwZomgQg/view?usp=sharing

只有当数量字段的值大于 3 时,我总是使用 if 条件来打印行。我什至知道如何 .filter 但我不知道如何调用它以及在哪里调用它。请帮忙

最佳答案

我不相信 Array.from 在服务器端代码中工作。如果确实如此,则使用它。我一直在使用的是以下功能。它们不符合指定的高阶函数,但它们使用 Netsuite 语法,并且在简化子列表处理和封装代码方面大有帮助:

//SS2.x
//I have this as a snippet that can be included in server side scripts
function iter(rec, listName, cb){
var lim = rec.getLineCount({sublistId:listName});
var i = 0;
var getV = function (fld){
return rec.getSublistValue({sublistId:listName, fieldId:fld, line:i});
};
for(; i< lim; i++){
cb(i, getV);
}
}
// to use it:
iter(ctx.newRecord, 'item', function(idx, getV){
if(parseInt(getV('quantity')) >3){
...
}
});

或者对于 SS1 脚本,我有以下内容,允许在 UserEvent 和计划脚本或 Suitelet 之间共享代码

function forRecordLines(rec, machName, op, doReverse) {
var i, pred, incr;
var getVal = rec ? function(fld) {
return rec.getLineItemValue(machName, fld, i);
} : function(fld) {
return nlapiGetLineItemValue(machName, fld, i);
};
var getText = rec ? function(fld) {
return rec.getLineItemText(machName, fld, i);
} : function(fld) {
return nlapiGetLineItemText(machName, fld, i);
};
var setVal = rec ? function(fld, val) {
rec.setLineItemValue(machName, fld, i, val);
} : function(fld, val) {
nlapiSetLineItemValue(machName, fld, i, val);
};
var machCount = rec ? rec.getLineItemCount(machName) : nlapiGetLineItemCount(machName);

if(!doReverse){
i = 1;
pred = function(){ return i<= machCount;};
incr = function(){ i++;};
}else{
i = machCount;
pred = function(){ return i>0;};
incr = function(){ i--;};
}

while(pred()){
var ret = op(i, getVal, getText, setVal);
incr();
if (typeof ret != 'undefined' && !ret) break;
}

}

// User Event Script:
forRecordLines(null, 'item', function(idx, getV, getT, setV){
if(parseInt(getV('quantity')) >3){
...
}
});

// in a Scheduled Script:
forRecordLines(nlapiLoadRecord('salesorder', id), 'item', function(idx, getV, getT, setV){
if(parseInt(getV('quantity')) >3){
...
}
});

关于javascript - 如何在 Suitelet 打印输出 (Netsuite) 中对行项目使用高阶函数而不是 FOR 循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56834876/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com