Jira Code: ECSI-32
Here it will take the non-store field value from the transaction record and update it in the corresponding customer record. The scheduled script will run to update the field value in every interval.
/**
* @NApiVersion 2.x
* @NScriptType ScheduledScript
* @NModuleScope SameAccount
*/
/* * Script Description
*
* UPDATE NEW LAST - SO,QUOTE,SALEC CALL,EMLAIL,PROACTIVE OUTBOUND DATE IN CUSTOMER RECORD.
*******************************************************************************
* EAST COAST STAINLESS INC
* **************************************************************************
*
* Date: 27/08/2018
*
* Author: Jobin & Jismi IT Services LLP
*
*
*******************************************************************************/
define(['N/runtime', 'N/record', 'N/search', 'N/task'],
/**
* @param {email} email
* @param {http} http
* @param {https} https
* @param {record} record
* @param {runtime} runtime
* @param {search} search
* @param {url} url
*/
function(runtime, record, search, task) {
function checkForParameter(parameter, parameterName) {
try {
if (parameter != "" && parameter != null && parameter != undefined && parameter != "null" && parameter != "undefined" && parameter != " " && parameter != false) {
return true;
} else {
if (parameterName)
log.debug('Empty Value found', 'Empty Value for parameter ' + parameterName);
return false;
}
} catch (e) {
log.debug({
title: 'checkForParameter error',
details: e.message
});
}
}
//To assign a default value if the it is empty
function assignDefaultValue(value, defaultValue) {
try {
if (checkForParameter(value))
return value;
else
return defaultValue;
} catch (e) {
log.debug({
title: 'assignDefaultValue error',
details: e.message
});
}
}
/**
* Definition of the Scheduled script trigger point.
*
* @param {Object} scriptContext
* @param {string} scriptContext.type - The context in which the script is executed. It is one of the values from the scriptContext.InvocationType enum.
* @Since 2015.2
*/
function execute(scriptContext) {
try {
var count = runtime.getCurrentScript().getParameter("custscript_current_customer_value");
count = assignDefaultValue(count, 0);
var baseSearch = customerSearch();
log.debug('baseSearch', baseSearch);
for (var i = count; i < baseSearch.length; i++) {
var currentI = i;
log.debug('currentI', currentI);
var currentInternalId = baseSearch[i].internalid;
log.debug('currentInternalId', currentInternalId);
var Transaction_date = transaction(currentInternalId);
log.debug('Transaction_date', Transaction_date);
var current_Quate = "";
var current_SO_Value = "";
for (var j = 0; j < Transaction_date.length; j++) {
if (Transaction_date[j].TYPE == "Estimate") {
current_Quate = Transaction_date[j].LastDate;
log.debug('Newcurrent_Quate', current_Quate);
} else if (Transaction_date[j].TYPE == "SalesOrd") {
current_SO_Value = Transaction_date[j].LastDate;
log.debug('Newcurrent_SO_Value', current_SO_Value);
}
}
var Last_Email_Date = lastEmail_Search(currentInternalId);
log.debug('Last_Email_Date', Last_Email_Date);
var Last_proactive_Outbound_Date = proactive_Outbound_Date(currentInternalId);
log.debug('Last_proactive_Outbound_Date', Last_proactive_Outbound_Date);
var Last_Sales_Call_Date = sales_Call_Date(currentInternalId);
log.debug('Last_Sales_Call_Date', Last_Sales_Call_Date);
if (Last_Email_Date.length >= 0) {
var current_Email = Last_Email_Date[0].Last_Email;
log.debug('current_Email', current_Email);
var SetEmailValue = record.submitFields({
type: record.Type.CUSTOMER,
id: currentInternalId,
values: {
custentity_jj_new_last_email_customer: current_Email
},
options: {
enableSourcing: false,
ignoreMandatoryFields: true
}
});
log.debug('SUCSESS0');
var current_proactive_Outbound_Date = Last_proactive_Outbound_Date[0].proactive_Outbound_Date;
log.debug('current_proactive_Outbound_Date', current_proactive_Outbound_Date);
var SetProactiveOutboundValue = record.submitFields({
type: record.Type.CUSTOMER,
id: currentInternalId,
values: {
custentity_new_lastproactiveoutbound_cm: current_proactive_Outbound_Date
},
options: {
enableSourcing: false,
ignoreMandatoryFields: true
}
});
log.debug('SUCSESS1');
var current_sales_Call_Date = Last_Sales_Call_Date[0].last_Sales_Call_Date;
log.debug('current_sales_Call_Date', current_sales_Call_Date);
var SetSalesCallValue = record.submitFields({
type: record.Type.CUSTOMER,
id: currentInternalId,
values: {
custentity_new_last_sales_call_date_cm: current_sales_Call_Date
},
options: {
enableSourcing: false,
ignoreMandatoryFields: true
}
});
log.debug('SUCSESS2');
var SetSOValue = record.submitFields({
type: record.Type.CUSTOMER,
id: currentInternalId,
values: {
custentity_jj_last_so_date_test: current_SO_Value
},
options: {
enableSourcing: false,
ignoreMandatoryFields: true
}
});
log.debug('SUCSESS3');
var SetQuoteValue = record.submitFields({
type: record.Type.CUSTOMER,
id: currentInternalId,
values: {
custentity_new_last_quote_date: current_Quate
},
options: {
enableSourcing: false,
ignoreMandatoryFields: true
}
});
log.debug('SUCSESS4');
}
if (isReschedule(currentI++))
break;
}
} catch (e) {
log.debug({
title: 'Main Function error',
details: e.message
});
}
}
/*
*****************************************************************************************************/
/*SavedSearch To Fetch Internal id of active customer*/
function customerSearch() {
try {
var Customerarray = new Array();
var customerObject = new Object();
var customerSearchObj = search.create({
type: "customer",
filters: [
["status", "anyof", "13"]
],
columns: [
search.createColumn({
name: "internalid",
sort: search.Sort.ASC,
label: "Internal ID"
}),
search.createColumn({ name: "entityid", label: "Name" })
]
});
var searchResultCount = customerSearchObj.runPaged().count;
log.debug("customerSearchObj result count", searchResultCount);
customerSearchObj.run().each(function(result) {
// .run().each has a limit of 4,000 results
customerObject = new Object();
customerObject.internalid = result.getValue({
name: "internalid",
sort: search.Sort.ASC,
label: "Internal ID"
});
Customerarray.push(customerObject);
return true;
});
return Customerarray;
} catch (e) {
log.debug({
title: 'customerSavedSearch error',
details: e.message
});
}
}
/*
*****************************************************************************************************/
/*SavedSearch To Fetch LAST_SO_DATE , LAST QUOTE DATE Of customer*/
function transaction(currentInternalId) {
try {
var TransactionArray = new Array();
var TransactionObj = new Object();
var transactionSearchObj = search.create({
type: "transaction",
filters: [
["mainline", "is", "T"],
"AND", ["type", "anyof", "SalesOrd", "Estimate"],
"AND", ["customer.internalid", "anyof", currentInternalId]
],
columns: [
search.createColumn({
name: "formuladate",
summary: "MAX",
formula: "{trandate}",
label: "Formula (Date)"
}),
search.createColumn({
name: "type",
summary: "GROUP",
label: "Type"
})
]
});
var searchResultCount = transactionSearchObj.runPaged().count;
log.debug("transactionSearchObj result count", searchResultCount);
transactionSearchObj.run().each(function(result) {
// .run().each has a limit of 4,000 results
TransactionObj = new Object();
TransactionObj.LastDate = result.getValue({
name: "formuladate",
summary: "MAX",
formula: "{trandate}",
label: "Formula (Date)"
});
TransactionObj.TYPE = result.getValue({
name: "type",
summary: "GROUP",
label: "Type"
});
TransactionArray.push(TransactionObj);
return true;
});
return TransactionArray;
} catch (e) {
log.debug({
title: 'transaction error',
details: e.message
});
}
}
/*
*****************************************************************************************************/
/*SavedSearch To Fetch LAST_email_DATE Of customers*/
function lastEmail_Search(currentInternalId) {
try {
var tempEmailArray = new Array();
var tempEmailObj = new Object();
var calendareventSearchObj = search.create({
type: "calendarevent",
filters: [
["custevent2", "anyof", "5"],
"AND", ["attendeecustomer.internalid", "anyof", currentInternalId]
],
columns: [
search.createColumn({
name: "formuladatetime",
summary: "MAX",
formula: "{startdate}",
label: "Formula (Date/Time)"
})
]
});
var searchResultCount = calendareventSearchObj.runPaged().count;
log.debug("calendareventSearchObj result count", searchResultCount);
calendareventSearchObj.run().each(function(result) {
// .run().each has a limit of 4,000 results
tempEmailObj.Last_Email = result.getValue({
name: "formuladatetime",
summary: "MAX",
formula: "{startdate}",
label: "Formula (Date/Time)"
});
tempEmailArray.push(tempEmailObj);
return true;
});
return tempEmailArray;
} catch (e) {
log.debug({
title: 'lastEmail_Search error',
details: e.message
});
}
}
/* *************************************************************************************/
/*SavedSearch To Fetch LAST proactive_Outbound_Date Of customers*/
function proactive_Outbound_Date(currentInternalId) {
try {
var proactive_Outbound_Array = new Array();
var proactive_Outbound_Obj = new Object();
var calendareventSearchObj = search.create({
type: "calendarevent",
filters: [
["custevent2", "anyof", "8", "9"],
"AND", ["attendeecustomer.internalid", "anyof", currentInternalId]
],
columns: [
search.createColumn({
name: "formuladatetime",
summary: "MAX",
formula: "{startdate}",
label: "Formula (Date/Time)"
})
]
});
var searchResultCount = calendareventSearchObj.runPaged().count;
log.debug("calendareventSearchObj result count", searchResultCount);
calendareventSearchObj.run().each(function(result) {
// .run().each has a limit of 4,000 results
proactive_Outbound_Obj.proactive_Outbound_Date = result.getValue({
name: "formuladatetime",
summary: "MAX",
formula: "{startdate}",
label: "Formula (Date/Time)"
});
proactive_Outbound_Array.push(proactive_Outbound_Obj);
return true;
});
return proactive_Outbound_Array;
} catch (e) {
log.debug({
title: 'proactive_Outbound_Date error',
details: e.message
});
}
}
/* *************************************************************************************/
/*SavedSearch To Fetch LAST sales_Call_Date Of customers*/
function sales_Call_Date(currentInternalId) {
try {
var last_Sales_Call_Array = new Array();
var last_Sales_Call_Obj = new Object();
var calendareventSearchObj = search.create({
type: "calendarevent",
filters: [
["custevent2", "anyof", "1"],
"AND", ["attendeecustomer.internalid", "anyof", currentInternalId]
],
columns: [
search.createColumn({
name: "formuladate",
summary: "MAX",
formula: "{startdate}",
label: "Formula (Date)"
})
]
});
var searchResultCount = calendareventSearchObj.runPaged().count;
log.debug("calendareventSearchObj result count", searchResultCount);
calendareventSearchObj.run().each(function(result) {
// .run().each has a limit of 4,000 results
last_Sales_Call_Obj.last_Sales_Call_Date = result.getValue({
name: "formuladate",
summary: "MAX",
formula: "{startdate}",
label: "Formula (Date)"
});
last_Sales_Call_Array.push(last_Sales_Call_Obj);
return true;
});
return last_Sales_Call_Array;
} catch (e) {
log.debug({
title: 'sales_Call_Date error',
details: e.message
});
}
}
/* *************************************************************************************/
function isReschedule(currentI) {
var remainingTime = runtime.getCurrentScript().getRemainingUsage();
if (parseInt(remainingTime) < 500) {
var rescheduleTask = task.create({
taskType: task.TaskType.SCHEDULED_SCRIPT,
scriptId: "customscript_ecsi32_jj_ss_emailcustomer",
deploymentId: "customdeploy_ecsi32_jj_emailcustomer",
params: {custscript_current_customer_value : currentI}
});
var scriptTaskId = rescheduleTask.submit();
return true;
} else
return false;
}
return {
execute: execute,
checkForParameter: checkForParameter,
assignDefaultValue : assignDefaultValue,
customerSearch: customerSearch,
transaction : transaction,
lastEmail_Search: lastEmail_Search,
proactive_Outbound_Date: proactive_Outbound_Date,
sales_Call_Date: sales_Call_Date,
isReschedule: isReschedule
};
});