我环顾四周,找不到如何从SS 2中的用户事件调用后端Suitelet并返回JSON或纯文本的示例。我有一个常见的Suitelet,我想附加到许多用户事件,我可以简单地在URL中或作为对象传递所需的值。当我尝试返回的数据是一个HTML页面,并在页面中间指出:“注意你必须在访问这个页面之前登录。我已经在url中传递了compid,所以我不确定是该怎么做。我已经多次使用客户端的后端Suitelets,没有任何问题。感谢任何帮助。
答案 0 :(得分:5)
我建议使用SS 2.0自定义模块脚本库,而不是从UE脚本调用suitlet。无论如何,如果您真的想要使用suitlet进行操作,请转到您的suitlet脚本部署并选中“Available without login”复选框。 UE脚本中的代码应如下所示:
// in UE script, make sure you resolve properly the suitlet external URL:
var suitletURL = url.resolveScript({
scriptId: 'customscript_your_suitlet_scriptid',
deploymentId: 'customdeploy_your_suitlet_deploymentid',
returnExternalUrl: true
});
var response = https.post({
url : suitletURL,
headers : myHeaders,
body : myBody
});
答案 1 :(得分:1)
使用SS2.0模块是最佳解决方案。对于SS1.0,您可以考虑将此代码包含在库中,然后在多个用户事件脚本之间共享它。
关于将Suitelet标记为“无需登录即可使用”,这是一种不良的安全做法。您不希望任何具有URL来调用Suitelet的人都可以使用您的代码(可能很难猜测出确切的URL,但是可以在日志中找到该URL,例如在代理中),其次,您可能希望登录出于审核目的而调用脚本的用户。
理想情况下,您应该能够告诉NetSuite重用当前的用户会话,但是不幸的是,到目前为止,还没有类似的API(可能由于某种原因而没有)。
如果由于某些原因无法使用SS2.0模块或SS1.0库,更好的方法是在用户事件脚本中获取JSESSIONID cookie,并将其添加到Suitelet的请求中。因此,随后将在当前用户会话的上下文中调用Suitelet。但是请注意由于涉及网络调用和链接的用户事件而可能对性能造成的影响(如果您的Suitelet进行任何记录操作,它将触发该记录的用户事件脚本)。
下面是一个示例SS1.0脚本回显所有cookie的示例。
/**
* @param {nlobjRequest} nsRequest
* @param {nlobjResponse} nsResponse
*/
function kkzTestSuitelet(nsRequest, nsResponse) {
nsResponse.writeLine('SUCCESS - Suitelet call okay, headers follow:');
nsResponse.writeLine('');
var allHdrs = nsRequest.getAllHeaders();
for (var hdrName in allHdrs)
nsResponse.writeLine(hdrName + ' = ' + JSON.stringify(allHdrs[hdrName]));
}