如何用NetSuite SuiteQL查询创建超2800天的有效访问令牌?
问题排查与修正建议
你的代码存在几个关键问题,以下是具体修正方案:
1. SQL语句语法不完整
你的SQL字符串模板未正确闭合,缺少结束的反引号,同时查询语句末尾也没有正确收尾,这会直接导致语法解析失败。
2. 日期参数传递错误
使用format.parse处理后的日期对象可能无法被SuiteQL正确识别,NetSuite SuiteQL接受标准的YYYY-MM-DD格式字符串作为日期参数,无需额外解析。
修正后的完整代码
// 计算2800天前的日期 const today = new Date(); today.setDate(today.getDate() - 2800); // 转换为SuiteQL兼容的YYYY-MM-DD格式 const pastDate = today.toISOString().split('T')[0]; // 补全语法的SuiteQL查询 const sqlStr = ` SELECT OAuthToken.tba_token_name AS tokenName, OAuthToken.dCreated AS createdDate FROM OAuthToken WHERE OAuthToken.bInactive = 'F' AND DATE(OAuthToken.dCreated) < ? `; const tokens = query.runSuiteQL({ query: sqlStr, params: [pastDate] }).asMappedResults();
更优方案:直接在SuiteQL中计算日期
为了避免前端日期计算的时区偏差问题,推荐直接在查询语句中用SQL函数计算2800天前的日期,无需传递参数:
SELECT OAuthToken.tba_token_name AS tokenName, OAuthToken.dCreated AS createdDate FROM OAuthToken WHERE OAuthToken.bInactive = 'F' AND DATE(OAuthToken.dCreated) < CURRENT_DATE - INTERVAL '2800 days'
对应的JavaScript调用简化为:
const sqlStr = ` SELECT OAuthToken.tba_token_name AS tokenName, OAuthToken.dCreated AS createdDate FROM OAuthToken WHERE OAuthToken.bInactive = 'F' AND DATE(OAuthToken.dCreated) < CURRENT_DATE - INTERVAL '2800 days' `; const tokens = query.runSuiteQL({ query: sqlStr }).asMappedResults();
内容的提问来源于stack exchange,提问作者Maira S
相关产品推荐
相关产品推荐

