这里的基本背景故事/问题是我的自定义(套件)在一种环境中运行良好,但由于硬编码到 css 文件的链接而在其他环境中崩溃。
我有一个带有 serverWidget 表单的 suitelet,我在其中添加了多个字段和一个内联 HTML 字段。
var form = serverWidget.createForm({
title: 'Customer Locations'
});
HTML 基本上是添加一个 div,客户端脚本将内容添加到该 div 中。
我像这样附加客户端脚本:
form.clientScriptModulePath = "./Customer Map geostored.js";
一切顺利。但我正在使用的模块(传单)有自己的 css 文件来渲染地图。在客户端脚本中我正在这样做:
var head = document.getElementsByTagName('head')[0];
var link = document.createElement('link');
link.id = 'customCSS';
link.rel = 'stylesheet';
link.type = 'text/css';
link.href = 'https://xxxx.app.netsuite.com/core/media/media.nl?id=4949949&c=3903104&h=oGKTyQwF9Hg1BOaex_GWREN9IQGxFKIOB_f26Sh7eStm2l8S&_xt=.css';
link.media = 'all';
var link2 = document.createElement('link');
link2.id = 'LeafletCSS';
link2.rel = 'stylesheet';
link2.type = 'text/css';
link2.href = 'https://xxxx.app.netsuite.com/core/media/media.nl?id=4949967&c=3903104&h=LwHy6rO0fXmyEIIr_PINP38vQ5n5R7Ga_LSTtYwUKo32naWH&_xt=.css';
link2.media = 'all';
head.insertBefore(link, head.firstChild);
head.insertBefore(link2, head.firstChild);
正如您所看到的,href 是我们生产帐户的直接路径,因此沙箱或发布预览中的 URL 是不同的。我很想以某种方式使用 N/file 之类的东西获得相对路径,但支持人员表示这是不可能的,他们正在创建增强请求。所以我想知道其他人如何处理这种情况,你是否将路径作为来自 suitelet 的参数传递?
我看到我可以像这里一样进行 DOM hack:https://ursuscode.com/netsuite-tips/loading-custom-html-and-bootstrap-within-a-suitelet-form/但更愿意避免这种情况如果可以的话。
谢谢!
而不是
link.href = 'https://xxxx.app.netsuite.com/core/media/media.nl?id=4949949&c=3903104&h=oGKTyQwF9Hg1BOaex_GWREN9IQGxFKIOB_f26Sh7eStm2l8S&_xt=.css';
尝试使用
link.href = '/core/media/media.nl?id=4949949&c=3903104&h=oGKTyQwF9Hg1BOaex_GWREN9IQGxFKIOB_f26Sh7eStm2l8S&_xt=.css';
即省略域协议和域路径。
但不确定您是否需要调整这些乱码值
确实,客户端脚本不支持
N/file
模块 - 似乎这就是“支持”在说这是不可能时所回答的问题。但是,您可以使用N/search
模块在给定文件名的情况下检索文件的URL。
let theURL;
search.create({
type: 'file',
filters: [
['name', 'is', {{theFileName}}]
],
columns: [
'url'
]
}).run().each( r => {
vwURL = r.getValue({
name: 'url'
});
return false;
});
return theURL;
(当然,您需要在文件顶部将
N/search
模块声明为 search
)