开发者问题收集

NetSuite:在 SUITESCRIPT 2.0 中使用 SUITESCRIPT 1.0

2016-05-19
5225

是否可以在 SS2.0 文件中使用 SS1.0?我是否需要添加一些注释,或者这是否可行?

2个回答

这是不允许的。请参阅以下摘录自 SuiteAnswers。

https://netsuite.custhelp.com/app/answers/detail/a_id/44630

SuiteScript 2.0 – Getting Started

版本共存规则

您的脚本(入口点脚本和支持库脚本)必须使用 SuiteScript 1.0 或 SuiteScript 2.0。您不能在一个脚本中使用两个版本的 API。

但是,您可以拥有使用不同 SuiteScript 版本的多个脚本。这些可以部署在同一个帐户、同一个 SuiteApp 和同一个记录中。


https://netsuite.custhelp.com/app/answers/detail/a_id/31709/kw/Suitescript%202.0

Version 2016 Release 1 (2016.1) Release Notes

nlapi/nlobj 前缀停用

SuiteScript 2.0 的模型看起来和行为都像现代 JavaScript。为了实现这一目标,SuiteScript 2.0 方法和对象不以 nlapi 和 nlobj 为前缀。

此更改还反映了 SuiteScript 2.0 的模块化组织。SuiteScript 1.0 方法和对象分别属于 nlapi 和 nlobj 命名空间。SuiteScript 2.0 方法和对象封装在各种模块中。

Leibnitz Jacquard
2016-05-21

我们有一个脚本,需要更新商机上的许多字段,其中包含许多子列表项。使用我们的脚本,选择每个子列表项然后调用 setCurrentSublistValue() 的 2.0 方法大约需要 40 秒才能完成 59 个子列表项。我使用了 window.nlapiSetLineItemValue() 破解方法,大约需要 2 秒。

它可能不推荐,YMMV,但我确实进行了一些检查,看看是否可行。请参阅下面的代码...

var canUseLegacyApi = typeof window.nlapiSetLineItemValue === "function";
// Loop the sublist and update
for (var k = 0; (itemCount >= 0) && (k < itemCount); k++) {
    if (!canUseLegacyApi) { // If the Suite Script 1.0 API isn't available, do it the slow way.
        currentRecordOpp.selectLine({
            sublistId: 'item',
            line: k
        })
    }

    if(canUseLegacyApi) {
        // TODO: HACK: Change this total hack once SS2.x supports updating line item values (without doing a 
        // selectLine, which takes too long)
        // NOTE: SS1.0 sub-list calls are 1-based vs SS2.x calls being 0-based. Hence the k+1
        window.nlapiSetLineItemValue('item', 'field_id, k+1, 'new value');
        // Update other fields here...
    } else {
        currentRecordOpp.setCurrentSublistValue({
            sublistId: 'item',
            fieldId: 'field_id',
            value: 'new value',
            fireSlavingSync: true
        });
        // Update other fields here...
    }

    if(!canUseLegacyApi) {
        currentRecordOpp.commitLine({sublistId: 'item'});
    }

    // TODO: HACK: This is required to re-paint the sublist after the nlapiSetLineItemValue calls. Remove once SS2.x 
    // supports this.
    currentRecordOpp.selectLine({
        sublistId: HVAC_SUBLIST,
        line: 0
    })
}
josh
2017-09-12