Netsuite 保存的搜索 API 未返回完整的行集

问题描述 投票:0回答:1

我被分配的任务是从已保存的搜索中提取数据到虚拟机 (VM)。在我的研究过程中,我发现了蒂姆·迪特里希(Tim Dietrich)实现这一目标的方法。我实现了他的方法,其中涉及使用 RESTlet 并通过 Python 脚本调用它。最初,这个过程似乎很成功。

但是,在比较 API 提取和 NetSuite 标准 Excel 导出之间的行数时,我注意到存在显着差异。与 Excel 工作簿相比,API 提取产生的行数要少得多。

这种意外的数据量差异引发了人们对 API 提取方法完整性的担忧。我现在正在寻求了解造成这种差异的原因,并找到解决方案以确保从 NetSuite 保存的搜索中准确完整地提取数据。

经过进一步调查,我发现问题可能与分页有关。我的研究表明分页需要在 RESTlet 本身内实现。根据这些信息,我修改了 RESTlet 的 JavaScript 代码,并将其重新部署到 NetSuite 中。然而,尽管有这些变化,API 提取的行数仍然低于预期。

var 
    log,
    query,
    response = new Object();    


define( [ 'N/log', 'N/query' ], main );


function main( logModule, queryModule ) {

    log = logModule;
    query = queryModule;

    return { post: postProcess }

}


function postProcess( request ) {   
    
    try {
    
        if ( ( typeof request.query == 'undefined' ) || ( request.query === null ) || ( request.query == '' ) ) {       
            throw { 'type': 'error.SuiteAPIError', 'name': 'INVALID_REQUEST', 'message': 'No query was specified.' }
        }   
    
        if ( typeof request.params == 'undefined' ) { request.params = new Array(); }
                    
        response.rows = query.runSuiteQL( { query: request.query, params: request.params } ).asMappedResults(); 
                            
        return response;
                
    } catch( e ) {  
        log.debug( { 'title': 'error', 'details': e } );
        return { 'error': { 'type': e.type, 'name': e.name, 'message': e.message } }
    }   
        
}
python netsuite restlet saved-searches netsuite-rest-api
1个回答
0
投票

您发布的代码没有显示任何分页 API 的使用。

如果它有帮助,一个简单的例子是:

function processQuery(queryStr){
    const results = query.runSuiteQLPaged({
        query: queryStr,
        pageSize: 1000
    });

    let data = [];
    results.iterator().each((res)=>{
        data = data.concat(res.value.data.asMappedResults());
        return true;
    });

    return data;
};
© www.soinside.com 2019 - 2024. All rights reserved.