Mass Update Script to update Purchase order item line values

/**

 /**

 * @NApiVersion 2.1

 * @NScriptType MassUpdateScript

 */

/********************************************************************************************************************************************************************

 * IBS Electronics Group-USA-NS

 *

 * ${IEGUN-510} : ${Set Requsted Order by Line Key on Purchase Order}

 *

 *********************************************************************************************************************************************************************

 *

 * Author: Jobin & Jismi

 *

 * Date Created : 16-January-2024

 *

 * Description :This Mass script is used to set the request order based on the request key for historal purchase orders.

 *

 * REVISION HISTORY

 *

 * @version 1.0 IEGUN-510 : 16-January-2024 : Created the initial build by JJ0170

 *

 ***********************************************************************************************************************************************************************/

define([‘N/record’, ‘N/search’],

    /**

     * @param{record} record

     * @param{search} search

     */

    (record, search) => {

        /**

         * Function to check whether the given parameter argument has value on it or is it empty.

         * @param {*} parameter – parameter which contains/references some values

         * @returns {boolean} – true if there exist a value else false

         */

        function checkForParameter(parameter) {

            try {

                if (parameter !== “” && parameter !== null && parameter !== undefined && parameter !== false && parameter !== “null” && parameter !== “undefined” && parameter !== ” “ && parameter !== ‘false’) {

                    return true;

                }

                else {

                    return false;

                }

            }

            catch (e) {

                log.error(“Error @ checkForParameter”, e);

                return false;

            }

        }

        /**

         * Function to fetch the sales order id based on the item line unique key

         * @param {number} requestKeyArray – Line unique key

         * @returns {number} requestOrderArray – array of objects containing request key and request order

         */

        function fetchRequestOrderFromSalesOrder(requestKeyArray) {

            try {

                let requestKeys = [];

                if (typeof (requestKeyArray) == “string”) {

                    requestKeys = `’${requestKeyArray}‘` //to put requestKeysArray within single quotes

                }

                else if (requestKeyArray.length > 0 && typeof (requestKeyArray) == “object”) {

                    for (let i = 0; i < requestKeyArray.length; i++) {

                        if (i == 0) {

                            if (requestKeyArray.length == 1) {

                                requestKeys += “‘”

                                requestKeys += requestKeyArray[i].trim();

                                requestKeys += “‘”

                            }

                            else {

                                requestKeys += “‘”

                                requestKeys += requestKeyArray[i].trim();

                                requestKeys += “‘,”

                            }

                        }

                        else if (i == (requestKeyArray.length 1)) {

                            if (requestKeyArray.length !== 1) {

                                requestKeys += “‘”

                                requestKeys += requestKeyArray[i].trim();

                                requestKeys += “‘”

                            }

                        }

                        else {

                            requestKeys += “‘”

                            requestKeys += requestKeyArray[i].trim();

                            requestKeys += “‘,”

                        }

                    }

                }

                let salesorderSearchObj = search.create({

                    type: “salesorder”,

                    filters:

                        [

                            [“type”, “anyof”, “SalesOrd”],

                            “AND”,

                            [“mainline”, “is”, “F”],

                            “AND”,

                            [“formulanumeric: case when {lineuniquekey} in (“ + requestKeys + “) then 1 else 0 end”, “equalto”, “1”]

                        ],

                    columns:

                        [

                            search.createColumn({ name: “lineuniquekey”, label: “Line Unique Key” }),

                            search.createColumn({ name: “internalid”, label: “Internal ID” })

                        ]

                });

                let searchResultCount = salesorderSearchObj.runPaged().count;

                let requestOrderArray = [];

                if (searchResultCount > 0) {

                    salesorderSearchObj.run().each(function (result) {

                        let requestOrderObj = {};

                        requestOrderObj.requestKey = result.getValue({ name: “lineuniquekey”, label: “Line Unique Key” });

                        requestOrderObj.requestOrder = result.getValue({ name: “internalid”, label: “Internal ID” });

                        requestOrderArray.push(requestOrderObj);

                        return true;

                    });

                }

                return requestOrderArray;

            }

            catch (e) {

                log.error(“Error @ fetchRequestOrderFromSalesOrder”, e);

                return [];

            }

        }

        /**

         * Function to set the request order in the purchase order item line

         * @param {object} purchaseOrderRec – object of the transaction

         */

        function setRequestOrderOnItemLine(purchaseOrderRec) {

            try {

                let itemCount = purchaseOrderRec.getLineCount({ sublistId: “item” });

                let requestKeyArray = [];

                for (let i = 0; i < itemCount; i++) {

                    let requestKey = purchaseOrderRec.getSublistValue({

                        sublistId: “item”,

                        fieldId: “custcol_mhi_ibs_request_key”,

                        line: i

                    });

                    requestKeyArray.push(requestKey);

                }

                let requestOrderArray = [];

                if (checkForParameter(requestKeyArray)) {

                    requestOrderArray = fetchRequestOrderFromSalesOrder(requestKeyArray);

                }

                //set the request order

                for (let i = 0; i < itemCount; i++) {

                    let requestKeyFromPurchaseOrder = purchaseOrderRec.getSublistValue({

                        sublistId: “item”,

                        fieldId: “custcol_mhi_ibs_request_key”,

                        line: i

                    });

                    let foundOrder = requestOrderArray.find(item => item.requestKey == requestKeyFromPurchaseOrder);

                    if (checkForParameter(requestOrderArray) && foundOrder) {

                        purchaseOrderRec.setSublistValue({

                            sublistId: “item”,

                            fieldId: “custcol_mhi_ibs_request_order”,

                            line: i,

                            value: foundOrder.requestOrder

                        });

                    }

                    else {

                        purchaseOrderRec.setSublistValue({

                            sublistId: “item”,

                            fieldId: “custcol_mhi_ibs_request_order”,

                            line: i,

                            value:

                        });

                    }

                }

                purchaseOrderRec.save();

            } catch (e) {

                log.error(“Error @ setRequestOrderOnItemLine”, e);

            }

        }

        /**

         * Defines the Mass Update trigger point.

         * @param {Object} params

         * @param {string} params.type – Record type of the record being processed

         * @param {number} params.id – ID of the record being processed

         * @since 2016.1

         */

        const each = (params) => {

            try {

                let purchaseOrderRec = record.load({

                    type: params.type,

                    id: params.id

                });

                setRequestOrderOnItemLine(purchaseOrderRec);

            }

            catch (e) {

                log.error(“Error @ each”, e);

            }

        }

        return { each }

    });

Leave a comment

Your email address will not be published. Required fields are marked *