Netsuite suitelet 响应 UI,站点构建器捆绑

Netsuite suitelet responsive UI, sitebuilder bundling

我想知道是否有人知道如何使 suitelet 响应?我相信 netsuite(不是 sitebulider 和 suitecommerce)没有 have/support 响应 UI。有没有办法让它在没有 "hacking" 的情况下响应?另一个问题是您可以捆绑在 sitebuilder 中创建的网站吗?

您实际上对 NetSuite CSS 没有太多控制权,但 Suitelet 可以输出原始 HTML/CSS 而不必使用标准 NetSuite UI。有了这些信息,您就可以走极端路线,从您的 Suitelet 构建 React 或 Angular 应用程序和 运行 应用程序。因为它 运行 作为 Suitelet,您可以使用 RESTlet(在同一会话中,因此不需要额外的身份验证)从 React 应用程序获取所有数据。

这为您提供了两全其美的体验,一个完全自定义的(响应式)UI 以及将您的数据存储在 NetSuite 中的所有好处。

/**
 * Suitelet for React frontend
 * @NApiVersion 2.1
 * @NModuleScope Public
 * @NScriptType Suitelet
 */
define([
    'N/log',
    'N/search',
], function (log, search) {
    function onRequest(context) {
        const appInfo = {
            title: 'Application Title',
            cssFile: getFileUrl('react.app.css'),
            jsFile: getFileUrl('react.app.js'),
        };

        const html = `<!doctype html>
                       <html lang="en">
                           <head>
                               <link rel="stylesheet" type="text/css" href="${appInfo.cssFile}">
                               <meta charset="utf-8">
                               <title>${appInfo.title}</title>
                               <script>window.appTitle = ${appInfo.title};</script>
                           </head>
                           <body id="body">
                               <div id="app-site"></div>
                           </body>
                           <script src="${appInfo.jsFile}"></script>
                       </html>`;

        context.response.write({ output: html });
    }

    //////////////////////////////////////////////////////////

    function getFileUrl(filename) {
        const results = search.create({
            type: 'file',
            filters: [['name', 'is', filename]],
            columns: ['url']
        }).run().getRange({ start: 0, end: 1 });

        if (results && results.length > 0) {
            return results[0].getValue({ name: 'url' });
        }

        return '#';
    }

    return {
        onRequest
    };
});