Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Netsuite 从用户事件SS 2调用Suitelet_Netsuite_Suitescript - Fatal编程技术网

Netsuite 从用户事件SS 2调用Suitelet

Netsuite 从用户事件SS 2调用Suitelet,netsuite,suitescript,Netsuite,Suitescript,我环顾四周,找不到一个确切的例子,说明如何从SS2中的用户事件调用后端Suitelet并返回JSON或纯文本。我有一个公共的Suitelet,我想将它附加到许多用户事件,我可以在url中或作为对象传递所需的值。当我尝试返回的数据是一个HTML页面,在页面的中间是状态:“请注意,您必须先登录才能访问此页面。我已经在url中传递了compid,所以我不确定该怎么做。我已经多次从客户端使用后端Suitelet,没有问题。感谢您的帮助 我建议使用SS2.0自定义模块脚本库,而不是从UE脚本调用Suite

我环顾四周,找不到一个确切的例子,说明如何从SS2中的用户事件调用后端Suitelet并返回JSON或纯文本。我有一个公共的Suitelet,我想将它附加到许多用户事件,我可以在url中或作为对象传递所需的值。当我尝试返回的数据是一个HTML页面,在页面的中间是状态:“请注意,您必须先登录才能访问此页面。我已经在url中传递了compid,所以我不确定该怎么做。我已经多次从客户端使用后端Suitelet,没有问题。感谢您的帮助

我建议使用SS2.0自定义模块脚本库,而不是从UE脚本调用Suitelet。无论如何,如果您确实想使用Suitelet执行此操作,请转到Suitelet脚本部署并选中“无需登录即可使用”复选框。UE脚本中的代码应如下所示:

//在UE脚本中,确保正确解析Suitelet外部URL:
var suitelURL=url.resolveScript({
scriptId:'customscript\u您的\u Suitelet\u scriptId',
deploymentId:'customdeploy\u您的\u Suitelet\u deploymentId',
returnExternalUrl:true
});
var response=https.post({
url:SuitelURL,
标题:myHeaders,
身体:我的身体
});

我建议使用SS2.0自定义模块脚本库,而不是从UE脚本调用Suitelet。无论如何,如果您确实想使用Suitelet执行此操作,请转到Suitelet脚本部署并选中“无需登录即可使用”复选框。UE脚本中的代码应如下所示:

//在UE脚本中,确保正确解析Suitelet外部URL:
var suitelURL=url.resolveScript({
scriptId:'customscript\u您的\u Suitelet\u scriptId',
deploymentId:'customdeploy\u您的\u Suitelet\u deploymentId',
returnExternalUrl:true
});
var response=https.post({
url:SuitelURL,
标题:myHeaders,
身体:我的身体
});

使用SS2.0模块是最理想的解决方案。对于SS1.0,您可以考虑将此代码包含为一个库,然后将其在多个用户事件脚本中共享。 关于将您的Suitelet标记为“无需登录即可使用”,这是一种糟糕的安全做法。您不希望您的代码可供任何可能有URL调用您的Suitelet的人使用(可能很难猜出确切的URL,但它可能在日志中找到,例如在代理中),其次,您可能希望记录调用脚本进行审核的用户

理想情况下,您应该能够告诉NetSuite重用您当前的用户会话,但不幸的是,到目前为止还没有类似的API可用(它可能是由于某种原因而不可用)

如果由于某些原因无法使用SS2.0模块或SS1.0库,更好的方法是在用户事件脚本中获取JSESSIONID cookie,并将其添加到Suitelet的请求中。因此,将在当前用户会话的上下文中调用Suitelet。但要注意由于涉及网络调用和链接用户事件(如果Suitelet执行任何记录操作,它会触发此记录的用户事件脚本)而可能产生的性能影响

下面是一个SS1.0脚本回显所有cookie的示例

/**
*@param{nlobjRequest}nsRequest
*@param{nlobjResponse}nsrresponse
*/
函数kkzTestSuitelet(nsRequest、nsrresponse){
nsrresponse.writeLine('SUCCESS-Suitelet call ok,后面跟着头:');
nsrresponse.writeLine(“”);
var allHdrs=nsRequest.getAllHeaders();
用于(所有HDR中的var hdrName)
nsResponse.writeLine(hdrName+'='+JSON.stringify(allHdrs[hdrName]);
}

使用SS2.0模块是最理想的解决方案。对于SS1.0,您可以考虑将此代码包含为一个库,然后将其在多个用户事件脚本中共享。 关于将您的Suitelet标记为“无需登录即可使用”,这是一种糟糕的安全做法。您不希望您的代码可供任何可能有URL调用您的Suitelet的人使用(可能很难猜出确切的URL,但它可能在日志中找到,例如在代理中),其次,您可能希望记录调用脚本进行审核的用户

理想情况下,您应该能够告诉NetSuite重用您当前的用户会话,但不幸的是,到目前为止还没有类似的API可用(它可能是由于某种原因而不可用)

如果由于某些原因无法使用SS2.0模块或SS1.0库,更好的方法是在用户事件脚本中获取JSESSIONID cookie,并将其添加到Suitelet的请求中。因此,将在当前用户会话的上下文中调用Suitelet。但要注意由于涉及网络调用和链接用户事件(如果Suitelet执行任何记录操作,它会触发此记录的用户事件脚本)而可能产生的性能影响

下面是一个SS1.0脚本回显所有cookie的示例

/**
*@param{nlobjRequest}nsRequest
*@param{nlobjResponse}nsrresponse
*/
函数kkzTestSuitelet(nsRequest、nsrresponse){
nsrresponse.writeLine('SUCCESS-Suitelet call ok,后面跟着头:');
nsrresponse.writeLine(“”);
var allHdrs=nsRequest.getAllHeaders();
用于(所有HDR中的var hdrName)
nsResponse.writeLine(hdrName+'='+JSON.stringify(allHdrs[hdrName]);
}

Hi ad感谢您提供的信息,应该发送哪些标题,再次感谢您想做什么?我正在传递一组(一个或多个)项目ID,并希望返回成功或失败信息。在该方法中,我检查某些方面并设置项的属性。谢谢你的帮助在这种情况下,你不需要任何标题。仅使用url和正文参数调用https.post。正文应该直接包含项目ID数组。在我的示例中:var myBody=[itemid,itemid2,itemid3];您好,谢谢您提出使用cu的想法