Mass Update of line level fields

Scenario

Update all the line level geography and sales channel fields with the body level geography and sales channel fields respectively.

Solution

/**
* @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{

try{

let interToSearch = search.load({
id:'customsearch13807'
});

return interToSearch;

}
catch(err)
{
log.debug("error@GetInputData",err)
}
}
catch(err)
{
log.debug("error@getInputData",err)
}

}

/**
* 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 dataObj=reduceContext.values.map(JSON.parse)
// log.debug('recordData',dataObj);
let interToId = dataObj[0].id;
let interToData = record.load({
type: record.Type.INTER_COMPANY_TRANSFER_ORDER,
id: interToId,
isDynamic: false
});
// log.debug("interToData",interToData)


let geography = interToData.getValue({
fieldId: 'cseg_geography'
});
// log.debug("geography",geography);
let salesChannel = interToData.getValue({
fieldId: 'cseg_saleschannel'
});
// log.debug("salesChannel",salesChannel);

let lineCount = interToData.getLineCount({
sublistId: 'item'
});


for(let i = 0 ; i < lineCount; i++)
{
if(geography && salesChannel ){

let lineSalesChannel = interToData.setSublistValue({
sublistId: 'item',
fieldId: 'cseg_saleschannel',
value:salesChannel,
line:i,
ignoreFieldChange: true
});
let lineGeography = interToData.setSublistValue({
sublistId: 'item',
fieldId: 'cseg_geography',
value:geography,
line:i,
ignoreFieldChange: true
});
}

}
let recordId = interToData.save({
enableSourcing: true,
ignoreMandatoryFields: true
});
log.debug("recordId",recordId)

}
catch(err)
{
log.debug("error@reduce",err)
}

}

return {getInputData, reduce}

});

Leave a comment

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