【问题标题】:Update sales order in NetSuite where order status is pending fulfillment through map/reduce在 NetSuite 中通过 map/reduce 更新订单状态等待履行的销售订单
【发布时间】:2020-10-06 12:19:57
【问题描述】:

当我的 Map/Reduce suiteScript 运行时,我需要执行以下操作。它搜索所有状态为Pending Fulfillment的销售订单,并更新其自定义复选框字段(字段键为my_custom_field_is_proccessed)。

我想要做的如下所示;

/**
         * @NApiVersion 2.0
         * @NScriptType MapReduceScript
         */
define(['N/search', 'N/record'], function (search, record) {

    function getInputData() {
        var filter1 = search.createFilter({
            name: 'orderstatus',
            operator: search.Operator.IS,
            values: 'Pending Fulfillment'
        });
        return search.create({
            type: search.Type.SALES_ORDER,
            columns: [],
            filters: [filter1]
        });
    }

    function map(context) {

        try {
            var data = JSON.parse(context.value); //read the data
            var transId = data.tranid;
            var orderstatus = data.orderstatus
            var isProcessed = data.my_custom_field_is_proccessed

            /*
              var order = record.save({
             'fromId':data.values['internalid'].value,
             'my_custom_field_is_proccessed':true
              });
            */

            // Update as per below answer
            data.forEach(function (order) {
                var id = record.submitFields({
                    type: 'salesOrder',
                    id: order.internalid,
                    values: {
                        my_custom_field_is_proccessed: true
                    },
                    options: {
                        enableSourcing: false,
                        ignoreMandatoryFields: true
                    }
                });
            });


        } catch (ex) {
            log.error({ title: 'map: error saving records', details: ex });
        }

    }

    function reduce(context) {
        // your code here ...
    }

    function summarize(summary) {
        // your code here ...
    }

    return {
        getInputData: getInputData,
        map: map,
        reduce: reduce,
        summarize: summarize
    };
});  

【问题讨论】:

    标签: javascript mapreduce netsuite suitescript suitescript2.0


    【解决方案1】:

    你能尝试一下这个代码,只做一些改动吗

             /**
             * @NApiVersion 2.0
             * @NScriptType MapReduceScript
             */
    define(['N/search', 'N/record'], function (search, record) {
    
        function getInputData() {
    var arrResults = [];
            var filter1 = search.createFilter({
                name: 'orderstatus',
                operator: search.Operator.IS,
                values: 'Pending Fulfillment'
            });
            return search.create({
                type: search.Type.SALES_ORDER,
                columns: ["internalid"],
                filters: [filter1]
            });
                 var id = result.getValue({name: "internalid"});
                    log.debug({ title: 'id',details: id});
                    if(id) {
                        arrResults.push({"id": id, "custom_field_id":custom_field_id});
                    }
    return arrResults;
        }
    
        function map(context) {
    
            try {
                var data = JSON.parse(context.value); //read the data
                var recordId = data.id;
                var transId = data.tranid;
                var orderstatus = data.orderstatus
                var isProcessed = data.my_custom_field_is_proccessed
        var recordUpdateData = {
                        "type": record.Type.SALES_ORDER,
                        "id": recordId,
                        "values": {}
                    };
               recordUpdateData["values"][custom_field_id] =  10;
    
            record.submitFields(recordUpdateData);
    
            } catch (ex) {
                log.error({ title: 'map: error saving records', details: ex });
            }
    
        }
    
        function reduce(context) {
            // your code here ...
        }
    
        function summarize(summary) {
            // your code here ...
        }
    
        return {
            getInputData: getInputData,
            map: map,
            reduce: reduce,
            summarize: summarize
        };
    });
    

    【讨论】:

    • 我猜search.create 不会返回,而是存储在变量result
    【解决方案2】:

    使用record.submitFields 代替record.save。

    var id = record.submitFields({
        type: recordType,
        id: id,
        values: {
            fieldId: value
        },
        options: {
            enableSourcing: false,
            ignoreMandatoryFields : true
        }
    });
    

    【讨论】:

    • recrodType 将是salesorder 我猜。 id 是internalid。我已经更新了问题,请提出建议。
    猜你喜欢
    • 1970-01-01
    • 2021-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-02
    • 1970-01-01
    • 1970-01-01
    • 2021-10-04
    相关资源
    最近更新 更多