服务器端脚本

服务器端的脚本是指SuiteScript中Server-side Script,即运行是在服务器上完成的脚本。这类包括User Event(用户事件),Map/Reduce(映射/减少),RESTlet(外界调用NetSuite的接口),Mass Update(大量更新),Scheduled(定时)等等类型,即非客户端脚本都是服务器端脚本。

在开发时如果使用new Date()创建,JavaScript的时间类型的对象的时区是服务器时间,一般为GMT(格林威治时间)。

var test = new Date();
log.debug('test', test);
//北京时间是2021年7月24日10:07PM
//2021-07-24T14:07:21.719Z

客户端脚本

客户端脚本(ClientScript)的时区是由本地设备通过浏览器提供的,一般情况下是本地设备设置的时区和时间。

function pageInit() {
    console.log(new Date());
    //北京时间2021年7月25日7:11AM
    //电脑修改成澳大利亚东部时间,console结果是Sun Jul 25 2021 09:11:22 GMT+1000 (Australian Eastern Standard Time)
}

潜在冲突例一:服务端脚本根据当前日期做逻辑推断

比如用户位于东八区,当创建一条记录之后与一个日期型字段custbody_deadline作比较判断哪个日期更靠后,结果有时候正确,有时候错误。

function beforeSubmit(context) {
    var recObj = context.newRecord;
    var currentDate = new Date();//"2021-07-20T14:07:21.719Z"
    var getDate = recObj.getValue({fieldId: 'custbody_deadline'});"2021-07-20T07:00:00.000Z"
    log.debug("is it overdue?", getDate > currentDate);
}

这种情况下首先不确定因素之一就是new Date()的返回的日期实际是带有时间的日期,而通过recObj.getValue()返回的值是不带日期的,而比较过程是将二者转换成为毫秒再比较,日期一样的情况下new Date()几乎绝对大于get到的时间(除非0点0分0秒那一瞬间,几乎不可能)。

(待续)

Last modified: 25/07/2021

Author

Comments

Write a Reply or Comment

Your email address will not be published.