从用户事件 SS 2 调用 Suitelet

Call Suitelet from User Event SS 2

我环顾四周,找不到一个示例来说明如何从 SS 2 和 return JSON 或纯文本中的用户事件调用后端 Suitelet。我有一个通用 Suitelet,我想将其附加到多个用户事件,我可以简单地在 url 中或作为对象传递所需的值。当我尝试 returned 的数据是一个 HTML 页面并且页面中间是状态:“请注意,您必须先登录才能访问此页面。我将 compid 传递给 url 已经,所以我不确定该怎么做。我已经多次从客户端使用后端 Suitelets,没有任何问题。感谢任何帮助。

我建议使用 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
});

使用SS2.0模块是最佳方案。对于 SS1.0,您可以考虑将此代码包含为一个库,然后在多个用户事件脚本之间共享它。

关于将您的 Suitelet 标记为 "Available Without Login",这是一种糟糕的安全做法。您不希望任何可能拥有 URL 来调用您的 Suitelet 的人都可以使用您的代码(可能很难猜测确切的 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]));
}