Scheduled Script To Delete Address From Employee Record

The client needs to delete all the addresses in the employee record.

We have created a scheduled script to delete them without affecting any other fields.

/**
 * @NApiVersion 2.1
 * @NScriptType MapReduceScript
 */
define(['N/record', 'N/search'],
    /**
 * @param{record} record
 * @param{search} search
 */
    (record, search) => {
        /**
         * Defines the function that is executed at the beginning of the map/reduce process and generates the input data.
         * @param {Object} inputContext
         * @param {boolean} inputContext.isRestarted - Indicates whether the current invocation of this function is the first
         *     invocation (if true, the current invocation is not the first invocation and this function has been restarted)
         * @param {Object} inputContext.ObjectRef - Object that references the input data
         * @typedef {Object} ObjectRef
         * @property {string|number} ObjectRef.id - Internal ID of the record instance that contains the input data
         * @property {string} ObjectRef.type - Type of the record instance that contains the input data
         * @returns {Array|Object|Search|ObjectRef|File|Query} The input data to use in the map/reduce process
         * @since 2015.2
         */


        const getInputData = (inputContext) => {
            try{
                var employeeSearchObj = search.create({
                    type: "employee",
                    filters:
                    [
                       ["datecreated","on","28/11/2023 5:30 am","28/11/2023 5:29 am"],
                      
                    ],
                    columns:
                    [
                       search.createColumn({name: "custentity_jj_hrims_atpl110", label: "HRIMS ID"}),
                       search.createColumn({name: "employeetype", label: "Employee Type"}),
                       search.createColumn({name: "title", label: "Job Title"}),
                       search.createColumn({
                          name: "entityid",
                          sort: search.Sort.ASC,
                          label: "Name"
                       }),
                       search.createColumn({name: "firstname", label: "First Name"}),
                       search.createColumn({name: "middlename", label: "Middle Name"}),
                       search.createColumn({name: "lastname", label: "Last Name"}),
                       search.createColumn({name: "hiredate", label: "Hire Date"}),
                       search.createColumn({name: "custentity_jj_wrk_loc_emp_atpl110", label: "Work Location"}),
                       search.createColumn({name: "mobilephone", label: "Mobile Phone"}),
                       search.createColumn({name: "email", label: "Email"}),
                       search.createColumn({name: "subsidiary", label: "Subsidiary"}),
                       search.createColumn({name: "workcalendar", label: "Work Calendar"}),
                       search.createColumn({name: "issalesrep", label: "Sales Rep"}),
                       search.createColumn({name: "supervisor", label: "Supervisor"}),
                       search.createColumn({
                          name: "custrecord_2663_entity_acct_no",
                          join: "CUSTRECORD_2663_PARENT_EMPLOYEE",
                          label: "Bank Account Number"
                       }),
                       search.createColumn({
                          name: "custrecord_2663_entity_bank_type",
                          join: "CUSTRECORD_2663_PARENT_EMPLOYEE",
                          label: "Type"
                       }),
                       search.createColumn({
                          name: "custrecord_2663_entity_branch_no",
                          join: "CUSTRECORD_2663_PARENT_EMPLOYEE",
                          label: "Branch Number"
                       }),
                       search.createColumn({
                          name: "custrecord_2663_entity_file_format",
                          join: "CUSTRECORD_2663_PARENT_EMPLOYEE",
                          label: "Payment File Format"
                       }),
                       search.createColumn({
                          name: "name",
                          join: "CUSTRECORD_2663_PARENT_EMPLOYEE",
                          label: "Name"
                       })
                    ]
                 });
                 
                 return employeeSearchObj;
            }
            catch(e){
                log.error("error@getInput",e)
            }
        }


       


        /**
         * Defines the function that is executed when the reduce entry point is triggered. This entry point is triggered
         * automatically when the associated map stage is complete. This function is applied to each group in the provided context.
         * @param {Object} reduceContext - Data collection containing the groups to process in the reduce stage. This parameter is
         *     provided automatically based on the results of the map stage.
         * @param {Iterator} reduceContext.errors - Serialized errors that were thrown during previous attempts to execute the
         *     reduce function on the current group
         * @param {number} reduceContext.executionNo - Number of times the reduce function has been executed on the current group
         * @param {boolean} reduceContext.isRestarted - Indicates whether the current invocation of this function is the first
         *     invocation (if true, the current invocation is not the first invocation and this function has been restarted)
         * @param {string} reduceContext.key - Key to be processed during the reduce stage
         * @param {List<String>} reduceContext.values - All values associated with a unique key that was passed to the reduce stage
         *     for processing
         * @since 2015.2
         */
        const reduce = (reduceContext) => {
            try{
                let searchResult =  JSON.parse(reduceContext.values)
                log.debug("searchResult",searchResult)


                let curRec= record.load({
                    type: searchResult.recordType,
                    id: searchResult.id
                });
                log.debug("curRec",curRec)
                let lineCount =curRec.getLineCount({
                    sublistId: 'addressbook'
                });
                log.debug("lineCoun",lineCount)


                for(let i=lineCount; i>0; i--){
                    curRec.removeLine({
                        sublistId: 'addressbook',
                        line: i-1
                    })
                };
                curRec.save();
            }
            catch(e){
                log.error("error@reduce",e)
            }
        }



        /**
         * Defines the function that is executed when the summarize entry point is triggered. This entry point is triggered
         * automatically when the associated reduce stage is complete. This function is applied to the entire result set.
         * @param {Object} summaryContext - Statistics about the execution of a map/reduce script
         * @param {number} summaryContext.concurrency - Maximum concurrency number when executing parallel tasks for the map/reduce
         *     script
         * @param {Date} summaryContext.dateCreated - The date and time when the map/reduce script began running
         * @param {boolean} summaryContext.isRestarted - Indicates whether the current invocation of this function is the first
         *     invocation (if true, the current invocation is not the first invocation and this function has been restarted)
         * @param {Iterator} summaryContext.output - Serialized keys and values that were saved as output during the reduce stage
         * @param {number} summaryContext.seconds - Total seconds elapsed when running the map/reduce script
         * @param {number} summaryContext.usage - Total number of governance usage units consumed when running the map/reduce
         *     script
         * @param {number} summaryContext.yields - Total number of yields when running the map/reduce script
         * @param {Object} summaryContext.inputSummary - Statistics about the input stage
         * @param {Object} summaryContext.mapSummary - Statistics about the map stage
         * @param {Object} summaryContext.reduceSummary - Statistics about the reduce stage
         * @since 2015.2
         */
        const summarize = (summaryContext) => {


        }


        return {getInputData, reduce, summarize}


    });


Leave a comment

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