开发者问题收集

Suitescript TypeError:无法读取未定义的属性“名称”

2020-11-17
2252

我创建了一个简单的客户端脚本来更新来自项目履行的销售订单子列表值。
当脚本运行 record.save() API 时,我收到错误 JS_EXCEPTION - TypeError:无法读取未定义的属性“name”。

这是我的脚本:

/**
 *@NApiVersion 2.x
 *@NScriptType ClientScript
 */
define(['N/record', 'N/currentRecord', 'N/search', 'N/log'], function (record, currentRecord, search, log) {
    function saveRecord(context) {
        var currentRecord = context.currentRecord;

        var soId = currentRecord.getValue({
            fieldId: 'createdfrom'
        });

        var soRecord = record.load({
            type: record.Type.SALES_ORDER,
            id: soId,
            isDynamic: true
        });

        var soItemCount = soRecord.getLineCount({
            sublistId: 'item'
        });
        log.debug({
            title: "soItemCount",
            details: soItemCount
        });

        for (var so = 0; so < soItemCount; so++) {
            soRecord.selectLine({
                sublistId: 'item',
                line: so
            });

            soRecord.setCurrentSublistValue({
                sublistId: 'item',
                fieldId: 'custcol_need_approval',
                value: true
            });

            soRecord.setCurrentSublistValue({
                sublistId: 'item',
                fieldId: 'custcol_fulfill_qty',
                value: 90
            });
        }
        soRecord.commitLine({
            sublistId: 'item'
        });

    soRecord.save();

    return true;
}
    return {
    saveRecord: saveRecord
};
});

有人能给我关于我的脚本的建议吗?

2个回答

您能否检查错误是否来自销售订单上部署的任何其他 UserEvent 脚本,因为当您尝试使用客户端脚本保存记录时,所有部署的用户事件脚本都将执行。

尝试取消部署其他脚本并测试一次以排除错误

Jay
2020-11-18

可能您想要的解决方案的最佳方法是使用带有 afterSubmit 事件的 UserEvent。

解决方案代码将非常相似。

/**
 * @NApiVersion 2.x
 * @NScriptType UserEventScript
 */
define(['N/record', 'N/search', 'N/log'], 
    function (record, search, log) {
        function afterSubmit(context) {
            var currentRecord = context.newRecord;

            var soId = currentRecord.getValue({
                fieldId: 'createdfrom'
            });

            var soRecord = record.load({
                type: record.Type.SALES_ORDER,
                id: soId,
                isDynamic: true
            });

            var soItemCount = soRecord.getLineCount({
                sublistId: 'item'
            });

            log.debug({
                title: "soItemCount",
                details: soItemCount
            });

            for (var so = 0; so < soItemCount; so++) {
                
                soRecord.setSublistValue({
                    sublistId: 'item',
                    fieldId: 'custcol_need_approval',
                    line: so,
                    value: true
                });

                soRecord.setSublistValue({
                    sublistId: 'item',
                    fieldId: 'custcol_fulfill_qty',
                    line: so,
                    value: 90
                });
                
            }       

            soRecord.save();
        }
    return {
        afterSubmit: afterSubmit
    };
});
Camilo Castellano
2020-11-17