如何从 RESTlet 调用内部 Suitelet?

How to call internal Suitelet from RESTlet?

我正在尝试通过搜索锁定 return 事务的 Suitelet,但我无法从 RESTlet POST 访问它,除非它无需登录即可使用。如果我将 Suitelet 设置为内部并从 RESTlet 调用它,它将 return 一个提示登录的页面。

有没有办法在不让 Suitelet 不登录的情况下完成此操作?

Suitelet 示例(删除了一些不相关的代码以简化):

define(['N/search', 'N/runtime'],
function(search, runtime) {

function onRequest(context) {
    try {
        var startDate = context.request.parameters.start_date;

        var scriptObj = runtime.getCurrentScript();

        if (!startDate) {
            context.response.write('The start date is required in order to load the relevant records.');
            return;
        }
        else {
            log.debug('Start date parameter is: ' + startDate);
        }

        var searchCriteria = {
            type: "invoice",
            filters:
            [
                ["datecreated","after", startDate], 
                "AND", 
                ["mainline","is","T"]
            ],
            columns:
            [
                search.createColumn({name: "tranid", label: "Document Number"}),
                search.createColumn({name: "total", label: "Total"})
            ]
        };

        var searchObj = getAllResults(searchCriteria);
        var searchResultCount = searchObj.length;
        log.debug("searchObj result count", searchResultCount);

        var invoices = [];
        for (var i = 0; i < searchResultCount; i++) {
            var tranId = searchObj[i].getValue({name: 'tranid'});
            var total = searchObj[i].getValue({name: 'total'});

            invoices.push({
                tranId: tranId, 
                total: total
            });
        }

            var jsonObj = {
                success: 'true',
            };

    } catch (error) {

        var jsonObj = {
            success: 'false'
        };

        log.error('error', error);
        return jsonObj;
    }

    log.debug('JSON obj', jsonObj);
    context.response.write(JSON.stringify(jsonObj));
    return jsonObj;
}

示例 RESTlet:

define(['N/search','N/error','N/https','N/url','N/runtime'],

function(search, error, https, url, runtime) {

    function doGet(request) {

        log.audit({title:'request', details:request});
        var startDate = request.startdate;

        var params = {
            'start_date': startDate,
            'current_role': currentRole
        };

        var header = [];
        header['Content-Type']='application/json';

        try {
            var suiteletURL = url.resolveScript({
                scriptId: 'customscript_get_invoices',
                deploymentId: 'customdeploy_get_invoices',
                returnExternalUrl: true
            });
            log.debug('Suitelet URL', suiteletURL);

            var formRequest = https.post({
                url: suiteletURL,
                body: params
            });

            return formRequest;

        }
        catch(e) {
            var errorStr = 'Error posting to suitelet link';
            log.error(errorStr, e.message);
            throw error.create({
                name: errorStr,
                message: e.message,
                notifyOff: true
            });
        }
    }

    return {
        get: doGet
    };
});

与将共享代码移动到库脚本文件并从 Suitelet 和 Restlet 调用它相比,这将消耗额外的并发性。

因此,应避免在 NetSuite 中调用环绕式 Web 服务。