在netsuite的文档中没有找到从报表获取数据的api,但是有部分插件的数据是通过表表获取的,希望能通过源码找到获取报表数据的方法。
首先通过追踪脚本发现他的数据来源为自定义记录:customrecord_cn_income_report_data,代码如下:
function getCachedReportData(reportDataId) {
var reportData = record.load({
type: 'customrecord_cn_income_report_data',
id: reportDataId
});
return JSON.parse(encode.convert({
string: reportData.getValue('custrecord_cn_income_reportdata'),
inputEncoding: encode.Encoding.BASE_64,
outputEncoding: encode.Encoding.UTF_8
}));
}
很明显是通过其他的定时脚本或者MR脚本进行定时更新,我在代码中搜索该自定义记录的使用情况,发现果然是通过定时任务调取Restlet脚本进行的,在Restlet脚本中发现了获取报表数据的api:nlapiRunReport(reportId,nlobjReportSettings)。
function runReport(requestParams) {
setup();
try {
var pivotTable = nlapiRunReport(reportId(requestParams), reportSettings(parameters(requestParams)));
} catch (ex) {
nlapiLogExecution('ERROR', 'rl_cn_run_income_report.js: runReport', 'error occurred ' + JSON.stringify(ex));
throw nlapiCreateError('RunReportError', ex.message, true);
}
var reportData = handleReportResults(pivotTable);
var reportDataId = cacheReportData(requestParams, reportData);
tearDown();
return JSON.stringify({
reportDataId: reportDataId
});
}
但是该api没有出现在官方文档当中,在谷歌中搜索也只搜到了一条 An internal SuiteScript api function nlapiRunReport() will be used to execute the “Budget vs Actual” report and retrieve the result data. Since this is not a published API, there is a theoretical possibility that it will be removed by NetSuite in the future although the possibility is very low.(内部SuiteScript api函数nlapiRunReport()将用于执行“预算与实际”报告并检索结果数据。由于这不是已发布的API,因此理论上有可能在将来将它由NetSuite删除,尽管可能性很小。) 在插件脚本中有几个参数定义在了nlobjReportSettings当中,代码如下:
function reportSettings(params) {
var settings = new