如何在 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{...} 即可。