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
};
});
我想知道是否有人知道如何使 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
};
});