Siena
12/01/2020, 3:01 PMbattk
12/01/2020, 3:03 PMSiena
12/01/2020, 3:04 PMSiena
12/01/2020, 3:05 PMbattk
12/01/2020, 3:06 PMbattk
12/01/2020, 3:07 PMbattk
12/01/2020, 3:07 PMSiena
12/01/2020, 3:15 PMnew Date("11/30/2020 11:21 am")
to turn it into a Date object with timezone information and tried to use that in my next search for transactions created after thenSiena
12/01/2020, 3:18 PMtoISOString
which returned 2020-11-30T19:21:00.000Z
Siena
12/01/2020, 3:19 PMSandii
12/01/2020, 3:19 PMSiena
12/01/2020, 3:19 PMbattk
12/01/2020, 3:20 PMSandii
12/01/2020, 3:20 PMSiena
12/01/2020, 3:21 PMbattk
12/01/2020, 3:22 PMSiena
12/01/2020, 3:23 PMbattk
12/01/2020, 3:23 PMbattk
12/01/2020, 3:23 PMSiena
12/01/2020, 3:23 PMbattk
12/01/2020, 3:24 PMbattk
12/01/2020, 3:24 PMSiena
12/01/2020, 3:24 PMSiena
12/01/2020, 3:24 PMSandii
12/01/2020, 3:25 PMbattk
12/01/2020, 3:25 PMSiena
12/01/2020, 3:26 PMSiena
12/01/2020, 3:26 PM/**
* Find the last time the script ran
*
* @returns {Date} last run time
*/
function findLastScriptExecution() {
var res = search.create({
type: search.Type.SCHEDULED_SCRIPT_INSTANCE,
columns: [
search.createColumn({
name: 'startdate',
summary: 'MAX'
})
],
filters: [
['scriptdeployment.scriptid','is','CUSTOMDEPLOY_MYDEPLOYMENTNAME'],
'AND',
['mapreducestage','anyof','GET_INPUT'],
'AND',
['status','anyof','COMPLETE']
]
}).run().getRange({ start: 0, end: 1 });
if (res.length > 0) {
var scriptDateString = res[0].getValue({ name: 'startdate', summary: 'MAX' });
return new Date(scriptDateString);
}
return null;
}
Siena
12/01/2020, 3:27 PMSiena
12/01/2020, 3:27 PMvar lastRun = findLastScriptExecution();
log.debug({title: 'lastrun', details: lastRun})
var filters = [
{
name: 'recordtype',
operator: <http://search.Operator.IS|search.Operator.IS>,
values: [record.Type.FULFILLMENT_REQUEST]
},
{
name: 'mainline',
operator: <http://search.Operator.IS|search.Operator.IS>,
values: ['T']
},
{
name: 'lastmodifieddate',
operator: search.Operator.AFTER,
values: [lastRun]
}
];
return search.create({
type: search.Type.TRANSACTION,
columns: [
{ name: 'internalid' }
],
filters: filters
});
battk
12/01/2020, 3:29 PMvar scriptDateString = res[0].getValue({ name: "startdate", summary: "MAX" });
return new Date(scriptDateString);
The new Date constructor assumes that the date time string you pass in matches the javascript datetime string format and is in the pacific timezoneSiena
12/01/2020, 3:29 PMfindLastScriptExecution
, which is return new Date(scriptDateString);
it finds all documents modified in the last 3 hours (the offset of EST with PST)battk
12/01/2020, 3:29 PMSiena
12/01/2020, 3:30 PMSandii
12/01/2020, 3:30 PMSiena
12/01/2020, 3:31 PMSandii
12/01/2020, 3:33 PMbattk
12/01/2020, 3:33 PMbattk
12/01/2020, 3:33 PMSiena
12/01/2020, 3:34 PMSiena
12/01/2020, 3:35 PMbattk
12/01/2020, 3:39 PMSiena
12/01/2020, 3:39 PMbattk
12/01/2020, 3:39 PMbattk
12/01/2020, 3:40 PMSiena
12/01/2020, 3:40 PMbattk
12/01/2020, 3:41 PMSiena
12/01/2020, 3:42 PMbattk
12/01/2020, 3:42 PMSiena
12/01/2020, 3:42 PMSiena
12/01/2020, 3:42 PMSiena
12/01/2020, 3:43 PMSiena
12/01/2020, 3:46 PMbattk
12/01/2020, 3:46 PMSiena
12/01/2020, 3:49 PMreturn new Date(scriptDateString);
in findLastScriptExecution
with format.parse({value: scriptDateString, type: format.Type.DATETIME, timezone: 5})
?battk
12/01/2020, 3:52 PMSiena
12/01/2020, 3:52 PMbattk
12/01/2020, 3:54 PMbattk
12/01/2020, 3:54 PMbattk
12/01/2020, 3:55 PMbattk
12/01/2020, 3:55 PMSiena
12/01/2020, 4:00 PMSiena
12/01/2020, 4:00 PMSiena
12/01/2020, 4:00 PMSiena
12/01/2020, 4:01 PMbattk
12/01/2020, 4:11 PMSiena
12/01/2020, 4:14 PMvar lastRun = findLastScriptExecution();
log.debug({title: 'lastrun', details: lastRun})
Siena
12/01/2020, 4:14 PMSiena
12/01/2020, 4:15 PMbattk
12/01/2020, 4:16 PMbattk
12/01/2020, 4:16 PMSiena
12/01/2020, 4:17 PMbattk
12/01/2020, 4:17 PMSiena
12/01/2020, 4:17 PMformat.parse({value: scriptDateString, type: format.Type.DATETIME, timezone: 5})
battk
12/01/2020, 4:28 PMlog.debug('scriptDate', format.parse({value: scriptDateString, type: format.Type.DATETIME, timezone: 5}))
should be a string that looks like
"2020-12-01T155700.000Z"Siena
12/01/2020, 4:30 PMbattk
12/01/2020, 4:32 PMSiena
12/01/2020, 4:35 PMSiena
12/01/2020, 4:37 PMbattk
12/01/2020, 4:38 PMSiena
12/01/2020, 4:38 PMbattk
12/01/2020, 4:39 PMbattk
12/01/2020, 4:40 PMSiena
12/01/2020, 4:46 PMSiena
12/01/2020, 4:47 PMSiena
12/01/2020, 4:47 PMSandii
12/01/2020, 5:05 PMSiena
12/01/2020, 5:06 PMSiena
12/01/2020, 5:06 PMbattk
12/01/2020, 5:08 PM/**
* @NApiVersion 2.0
* @NScriptType MapReduceScript
*/
define(["N/search", "N/format", "N/runtime"], function (
search,
format,
runtime
) {
function getInputData() {
var user = runtime.getCurrentUser();
log.debug("TIMEZONE", user.getPreference({ name: "TIMEZONE" }));
log.debug("DATEFORMAT", user.getPreference({ name: "DATEFORMAT" }));
log.debug("TIMEFORMAT", user.getPreference({ name: "TIMEFORMAT" }));
var results = search
.create({
type: search.Type.SCHEDULED_SCRIPT_INSTANCE,
columns: [
search.createColumn({
name: "startdate",
summary: "MAX",
}),
],
filters: [],
})
.run()
.getRange({ start: 0, end: 1 });
var scriptDateString = results[0].getValue({
name: "startdate",
summary: "MAX",
});
log.debug("scriptDateString", scriptDateString);
var scriptDate = format.parse({
value: scriptDateString,
type: format.Type.DATETIME,
timezone: 5,
});
log.debug({ title: "scriptDate", details: scriptDate });
return [];
}
function map(context) {
log.debug("map context", context);
}
function reduce(context) {
log.debug("reduce context", context);
}
function summarize(summary) {
log.debug("summary", summary);
if (summary.inputSummary.error) {
log.error({
title: "Input Error",
details: summary.inputSummary.error,
});
}
summary.mapSummary.errors
.iterator()
.each(function (key, error, executionNumber) {
log.error({
title:
"Map error on key: " +
key +
", executionNumber: " +
executionNumber,
details: error,
});
return true;
});
summary.reduceSummary.errors
.iterator()
.each(function (key, error, executionNumber) {
log.error({
title:
"Reduce error on key: " +
key +
", executionNumber: " +
executionNumber,
details: error,
});
return true;
});
summary.output.iterator().each(function (key, value) {
log.debug("Output for key " + key, value);
return true;
});
}
return {
getInputData: getInputData,
map: map,
//reduce: reduce,
summarize: summarize,
};
});
has the log output ofbattk
12/01/2020, 5:09 PMbattk
12/01/2020, 5:09 PMbattk
12/01/2020, 5:09 PMSandii
12/01/2020, 5:12 PMbattk
12/01/2020, 5:13 PMbattk
12/01/2020, 5:13 PMSiena
12/01/2020, 5:23 PMbattk
12/01/2020, 5:25 PMbattk
12/01/2020, 5:25 PMbattk
12/01/2020, 5:25 PMbattk
12/01/2020, 5:26 PMSiena
12/01/2020, 5:27 PMSiena
12/01/2020, 5:27 PMbattk
12/01/2020, 5:28 PMbattk
12/01/2020, 5:28 PMbattk
12/01/2020, 5:28 PMbattk
12/01/2020, 5:28 PMSiena
12/01/2020, 5:45 PMSiena
12/01/2020, 5:45 PM/**
* Find the last time the script ran
*
* @returns {Date} last run time
*/
function findLastScriptExecution() {
var res = search.create({
type: search.Type.SCHEDULED_SCRIPT_INSTANCE,
columns: [
search.createColumn({
name: 'startdate',
summary: 'MAX'
})
],
filters: [
['scriptdeployment.scriptid','is','CUSTOMDEPLOY_MYDEPLOYMENT'],
'AND',
['mapreducestage','anyof','GET_INPUT'],
'AND',
['status','anyof','COMPLETE']
]
}).run().getRange({ start: 0, end: 1 });
if (res.length > 0) {
var scriptDateString = res[0].getValue({ name: 'startdate', summary: 'MAX' });
log.debug({title: 'scriptDateString', details: scriptDateString})
log.debug({title: 'new Date', details: new Date(scriptDateString)});
var scriptDate = format.parse({
value: scriptDateString,
type: format.Type.DATETIME,
timezone: 5,
});
log.debug({ title: "scriptDate", details: scriptDate });
return scriptDate;
}
return null;
}
Siena
12/01/2020, 5:45 PMSiena
12/01/2020, 5:50 PMSiena
12/01/2020, 5:50 PMbattk
12/01/2020, 5:51 PMSiena
12/01/2020, 5:53 PMbattk
12/01/2020, 5:54 PMSiena
12/01/2020, 5:54 PMSiena
12/01/2020, 5:55 PMSiena
12/01/2020, 5:55 PMbattk
12/01/2020, 5:58 PMbattk
12/01/2020, 5:58 PMbattk
12/01/2020, 5:59 PMSiena
12/01/2020, 6:21 PMbattk
12/01/2020, 6:33 PMbattk
12/01/2020, 6:34 PMSiena
12/01/2020, 6:35 PMSiena
12/01/2020, 6:35 PM