javascript - 如何在SuiteScript中只初始化记录而不触发 "validateline"函数?

标签 javascript netsuite suitescript2.0 clientscript

NetSuite的Invoice记录中有2个字段。

一个是poUnitCost字段,另一个是poTotalCost”字段。

poTotalCost 的值等于 poUnitCost 乘以数量

(公式:poTotalCost = poUnitCost x 数量)

创建记录后,脚本将调用 pageInit 来查找相应的字段并将其填充到发票记录中。

但是,脚本不仅会触发 pageInit 函数,还会触发 validateLine 函数。

如何在创建记录时只触发pageInit而不触发validate函数?

代码如下:

/**
 *@NApiVersion 2.x
 *@NScriptType ClientScript
 */
define(['N/currentRecord', 'N/record', 'N/search'],
    function (currentRecord, record, search) {

        function pageInit(context) {
            console.log('inside pageinit function');

            var rec = context.currentRecord;
            var createdFromID = rec.getValue({
                fieldId: 'createdfrom'
            });
            var so_record = record.load({
                type: record.Type.SALES_ORDER,
                id: createdFromID
                // isDynamic: true
            });

            var inv_lines = rec.getLineCount({
                sublistId: 'item'
            });

            for (var i = 0; i < inv_lines; i++) {
                var soLineID = rec.getCurrentSublistValue({
                    sublistId: 'item',
                    fieldId: 'so_line_id_in_Inv',
                    line: i
                });

                // Find the index of line whose 'custcol_so_line_id' field is soLineIDINV
                var soLineNumber = so_record.findSublistLineWithValue({
                    sublistId: 'item',
                    fieldId: 'so_line_id_in_SO',
                    value: soLineID
                });

                var poUnitCost = so_record.getSublistValue({
                    sublistId: 'item',
                    fieldId: 'unit_cost_in_SO',
                    line: soLineNumber
                });

                rec.setCurrentSublistValue({
                    sublistId: 'item',
                    fieldId: 'unit_cost_in_Inv',
                    value: poUnitCost,
                    line: i
                    // fireSlavingSync: true
                });

                var lineQty = rec.getCurrentSublistValue({
                    sublistId: 'item',
                    fieldId: 'quantity',
                    line: i
                });

                var poTotalCost = lineQty * poUnitCost;

                rec.setCurrentSublistValue({
                    sublistId: 'item',
                    fieldId: 'total_cost_in_Inv',
                    value: poTotalCost,
                    line: i
                    // fireSlavingSync: true
                });
            }
            return true;
        }

        function validateLine(context) {
            console.log('inside validateLine function');

            var rec = context.currentRecord;
            var sublistName = context.sublistId;

            if (sublistName == 'item') {
                var poUnitCost = rec.getCurrentSublistValue({
                    sublistId: 'item',
                    fieldId: 'unit_cost_in_Inv',
                });

                var lineQty = rec.getCurrentSublistValue({
                    sublistId: 'item',
                    fieldId: 'quantity',
                });

                var poTotalCost = lineQty * poUnitCost;

                rec.setCurrentSublistValue({
                    sublistId: 'item',
                    fieldId: 'total_cost_in_Inv',
                    value: poTotalCost
                    // fireSlavingSync: true
                });
            }
            return true;
        }

        return {
            pageInit: pageInit,
            validateLine: validateLine
        }
    });

最佳答案

您无法阻止子列表事件的触发。当提交一行时,validateLine 将触发。您需要调整您的 validateLine 处理程序,以便在您不希望它执行正常逻辑的任何情况下返回 true

关于javascript - 如何在SuiteScript中只初始化记录而不触发 "validateline"函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53553321/

相关文章:

netsuite - 在保存的搜索中多选作为可用过滤器

javascript - "The entity name must immediately follow the ' & ' in the entity reference."

javascript - 类型错误 : Cannot call method "split" of undefined in SuiteScript

netsuite - 从销售订单转换为 Material 履行错误

netsuite - 源状态记录到子列表字段

javascript - 如何用JavaScript模拟点击让当前输入失去焦点

javascript - Firebase数据库返回null;刷新后,它返回正确的值

javascript - backbone.js 路由不工作

javascript - 使用用户输入的文本来引用变量

javascript - 如何使用 javascript 将必填字段设置为 false