Update custom record according to the customer address sublist

Jira code: AD 13

The client has a custom record “ADV – Ship To” that they need to maintain and keep up to date for EDI customers. So, if the customer is an EDI customer (EDI Trading Partner ID field is populated), then they want to insert new records and update existing records in ADV – Ship To based on insertions/edits in the customer address sub-record.

User event script

/**
 * @NApiVersion 2.x
 * @NScriptType UserEventScript
 * @NModuleScope SameAccount
 */
/*******************************************************************************
 * CLIENTNAME:ADVANTUS AD 27 -Workflow or script to keep custom record "ADV -
 * Ship To" record updated from Customer Address sublist/records
 * ************************************************************************ Date :
 * 28/12/2018
 * 
 * Author: Jobin & Jismi IT Services LLP Script Description : Workflow or script
 * to keep custom record "ADV - Ship To" record updated from Customer Address
 * sublist/records
 * 
 * Date created : 28/12/2018
 * 
 * REVISION HISTORY
 * 
 * Revision 1.1 ${12/01/2019} aj : modified for changes in mapping & Upon Edit
 * new record must enter Revision 1.0 ${28/12/2018} aj : created
 * 
 * 
 ******************************************************************************/
define(
		[ 'N/record', 'N/search' ],
		/**
		 * @param {record}
		 *            record
		 * @param {search}
		 *            search
		 */
		function(record, search) {

			/**
			 * Function definition to be triggered before record is loaded.
			 * 
			 * @param {Object}
			 *            scriptContext
			 * @param {Record}
			 *            scriptContext.newRecord - New record
			 * @param {Record}
			 *            scriptContext.oldRecord - Old record
			 * @param {string}
			 *            scriptContext.type - Trigger type
			 * @Since 2015.2
			 */
			function afterSubmit(scriptContext) {
				try {
					var addressArray = [];

					// to get the old record
					var oldCustomerRec = scriptContext.oldRecord;

					// to get the New record
					var newCustomerRec = scriptContext.newRecord;

					var customerName = newCustomerRec.getValue({
						fieldId : 'companyname'
					});

					var custID = scriptContext.newRecord.id;

					// to get EDI CustomerID
					// custentity_adv_edi_partner_id
					var EDI_ID = newCustomerRec.getValue({
						fieldId : 'custentity_adv_edi_partner_id'
					});

					if (EDI_ID) {

						var customerSearchObj = search
								.create({
									type : "customer",
									filters : [ [ "internalidnumber",
											"equalto", custID ] ],
									columns : [
											search.createColumn({
												name : "altname",
												label : "Name"
											}),

											search
													.createColumn({
														name : "custrecord_adv_customer_address_ref_num",
														join : "Address",
														label : "Customer Address Reference Number"
													}),
											search
													.createColumn({
														name : "custentity_adv_edi_partner_id",
														label : "EDI Partner ID"
													}),
											search
													.createColumn({
														name : "custrecord_adv_customer_address_store_id",
														join : "Address",
														label : "Customer Address Store ID"
													}),
											search
													.createColumn({
														name : "custrecord_adv_customer_address_dc",
														join : "Address",
														label : "Customer Address DC"
													}),

											search.createColumn({
												name : "address",
												join : "Address",
												label : "Address"
											}), search.createColumn({
												name : "addressinternalid",
												join : "Address",
												label : "Address Internal ID"
											}) ]
								});
						var searchResultCount = customerSearchObj.runPaged().count;

						var searchResult = customerSearchObj.run().getRange({
							start : 0,
							end : searchResultCount
						});
						if (searchResultCount > 0) {
							for (var i = 0; i < searchResultCount; i++) {
								var addressObj = {};
								// to get the address ID

								// Reference NUM
								var RefNum = searchResult[i]
										.getValue({
											name : "custrecord_adv_customer_address_ref_num",
											join : "Address",
											label : "Customer Address Reference Number"
										});

								// EDI partner ID
								var EDI_ID = searchResult[i].getValue({
									name : "custentity_adv_edi_partner_id",
									label : "EDI Partner ID"
								});

								// Store ID
								var storeID = searchResult[i]
										.getValue({
											name : "custrecord_adv_customer_address_store_id",
											join : "Address",
											label : "Customer Address Store ID"
										});

								// DC ID
								var dcID = searchResult[i]
										.getValue({
											name : "custrecord_adv_customer_address_dc",
											join : "Address",
											label : "Customer Address DC"
										});

								// type same as of store id

								// shipTo Address Book Id
								var id = searchResult[i].getValue({
									name : "addressinternalid",
									join : "Address",
									label : "Address Internal ID"
								});

								// Ship address
								var shipAddress = searchResult[i].getValue({
									name : "address",
									join : "Address",
									label : "Address"
								});

								addressObj = {
									RefNum : RefNum,
									EDI_ID : EDI_ID,
									storeID : storeID,
									dcID : dcID,
									shipAddress : shipAddress,
									id : id
								};

								addressArray.push(addressObj);

							}

							// to craete a EDI record in ShipTo

							for (var j = 0; j < addressArray.length; j++) {

								// to search for existing or not
								var customrecord_adv_ship_toSearchObj = search
										.create({
											type : "customrecord_adv_ship_to",
											filters : [ [
													"custrecord_adv_ship_to_addressbook_id",
													"anyof",
													addressArray[j]["id"] ]

											],
											columns : [ search.createColumn({
												name : "internalid",
												label : "Internal ID"
											}) ]
										});
								var searchResultCountShipTo = customrecord_adv_ship_toSearchObj
										.runPaged().count;

								if (searchResultCountShipTo == 0) {

									// craete a new record in ADV-SHipTo
									var shipTo = record.create({
										type : 'customrecord_adv_ship_to'
									});
									// to set values
									shipTo
											.setValue({
												fieldId : 'custrecord_adv_ship_to_customer',
												value : custID
											});

									shipTo.setValue({
										fieldId : 'name',
										value : checkif(customerName)
									});

									shipTo
											.setValue({
												fieldId : 'custrecord_adv_ship_to_addressbook_id',
												value : checkif(addressArray[j]["id"])
											});

									shipTo
											.setValue({
												fieldId : 'custrecord_adv_ship_to_address',
												value : checkif(addressArray[j]["shipAddress"])
											});

									shipTo
											.setValue({
												fieldId : 'custrecord_adv_ship_to_dc_id',
												value : checkif(addressArray[j]["dcID"])
											});
									shipTo
											.setValue({
												fieldId : 'custrecord_adv_ship_to_refnum',
												value : checkif(addressArray[j]["RefNum"])
											});
									// store id
									shipTo
											.setValue({
												fieldId : 'custrecord_adv_ship_to_store_id',
												value : checkif(addressArray[j]["storeID"])
											});
									// type
									shipTo
											.setValue({
												fieldId : 'custrecord_adv_ship_to_type',
												value : checkif(addressArray[j]["storeID"])
											});
									// EDI Partner Id

									shipTo
											.setValue({
												fieldId : 'custrecord_adv_ship_to_edi_trad_partner',
												value : EDI_ID
											});

									var shipID = shipTo.save();

								} else if (searchResultCountShipTo > 0) {
									// already existing records
									var searchResult = customrecord_adv_ship_toSearchObj
											.run().getRange({
												start : 0,
												end : 1
											});
									// to get the internal id
									var ID = searchResult[0].getValue({
										name : "internalid",
										label : "Internal ID"
									});

									// craete a new record in ADV-SHipTo
									var shipTo = record.load({
										type : 'customrecord_adv_ship_to',
										id : ID

									});
									shipTo
											.setValue({
												fieldId : 'custrecord_adv_ship_to_customer',
												value : custID
											});

									shipTo.setValue({
										fieldId : 'name',
										value : customerName
									});

									shipTo
											.setValue({
												fieldId : 'custrecord_adv_ship_to_addressbook_id',
												value : checkif(addressArray[j]["id"])
											});

									shipTo
											.setValue({
												fieldId : 'custrecord_adv_ship_to_address',
												value : checkif(addressArray[j]["shipAddress"])
											});

									shipTo
											.setValue({
												fieldId : 'custrecord_adv_ship_to_dc_id',
												value : checkif(addressArray[j]["dcID"])
											});
									shipTo
											.setValue({
												fieldId : 'custrecord_adv_ship_to_refnum',
												value : checkif(addressArray[j]["RefNum"])
											});
									// store id
									shipTo
											.setValue({
												fieldId : 'custrecord_adv_ship_to_store_id',
												value : checkif(addressArray[j]["storeID"])
											});
									// type
									shipTo
											.setValue({
												fieldId : 'custrecord_adv_ship_to_type',
												value : checkif(addressArray[j]["storeID"])
											});
									// EDI Partner Id

									shipTo
											.setValue({
												fieldId : 'custrecord_adv_ship_to_edi_trad_partner',
												value : EDI_ID
											});

									var shipID = shipTo.save();

								}
							}
						}
					}

				} catch (e) {
					log.debug("Err@ FN afterSubmit ", e.message);
					 log.error("Err@ afterSubmit FN ",e.message);
				}

			}
			/*******************************************************************
			 * @Function to check if the content is null, if null returns -
			 */
			function checkif(singleitem) {

				if (singleitem == "" || singleitem == null
						|| singleitem == undefined) {
					return "-";
				} else {

					return singleitem;
				}
			}

			/*******************************************************************
			 * @Function to check if the content is null, if null returns - Ends
			 */
			return {

				afterSubmit : afterSubmit
			};

		});

Leave a comment

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