我还是NetSuite的新手,并接管了承包商为我们做的项目,所以这可能是一个简单的问题 . 我们有一个Suitelet,它使用nlapiRequestURL调用另一个Suitelet . 正在调用的Suitelet应该返回一个ID . 相反,我们得到一个“无效页面参数”响应 .
我查看了所调用的Suitelet的配置,并且有一个参数设置,但该参数的'Preference'字段为空,根据文档建议,在这种情况下,应定义参数值在部署中,在参数选项卡上 . 它是什么,并且似乎是正确的值 .
所以我假设问题是在nlapiRequestURL中使用的URL中的一个参数,而不是在Netsuite中的脚本记录中定义的参数 . 以下是其中一个网址的示例 . 我刚刚改变了compid,原因很明显:
我确认'147'是正确的脚本ID . 我也尝试从URL中逐个删除每个参数,但这不起作用 . 根据我删除的那个,我得到'发生意外错误'或'缺少必需参数' . 在Suitelet中使用的唯一参数是'internalids' . 我可以看到它是通过'request.getParameter(“internalIds”)'获得的 . (见下面的代码)
作为旁注,我不确定URL中的'h'参数是什么,并且无法找到配置它或compid或deploy的位置 . 我想知道这个'h'值是不正确的,但我不确定它的用途是什么 . 为什么“compid”,“deploy”和“h”都包含在URL中?我可以假设compid用于识别我们的公司,但我没有看到有人可以确定如何为请求构建URL,因为我不知道有哪些强制性参数 . 我猜我不知道在哪里可以找到Netsuite来查找配置 . 某处有基本URL的设置吗?
无论如何,这是下面的脚本被调用 . 另一个脚本相当长,并且有一些公司相关的信息,所以我不打算包含它,但我认为无论如何都不重要 . 唯一需要知道的是我们使用上面的URL和nlapiRequestURL调用下面的脚本,并在结果上调用'getBody' .
function suitelet(request, response){
nlapiLogExecution('DEBUG', 'suitelet', 'In the Preview_Link.suitelet function');
nlapiLogExecution('DEBUG', 'suitelet', 'The request is ' + JSON.stringify(request));
nlapiLogExecution('DEBUG', 'suitelet', 'The response is ' + JSON.stringify(response));
var context = nlapiGetContext();
var folderInternalId = context.getSetting('SCRIPT', 'custscript_buffer_folder_for_temp_pdf');
var strInternalIds = request.getParameter('internalIds');
if(!strInternalIds)
return;
var internalIds = strInternalIds.split(',');
if(!internalIds || internalIds.length == 0)
return;
var xml = "<?xml version=\"1.0\"?>\n<!DOCTYPE pdf PUBLIC \"-//big.faceless.org//report\" \"report-1.1.dtd\">\n";
xml += "<pdfset>";
for (var index = 0; index < internalIds.length; index++)
{
var internalId = internalIds[index];
xml += "<pdf src='"+ nlapiEscapeXML(nlapiLoadFile(internalId).getURL()) +"'/>";
}
xml += "</pdfset>";
var file = nlapiXMLToPDF(xml);
file.setName(internalIds[0] + '_' + internalIds.length + '_' + Math.random() +'.pdf');
file.setFolder(folderInternalId);
file.setIsOnline(true);
var internalIDUpdatedData = nlapiSubmitFile(file);
response.writeLine(internalIDUpdatedData);
}
因此'custscript_buffer_folder_for_temp_pdf'是在Netsuite中的脚本记录中定义的参数,并且在该参数选项卡上的该脚本的“部署”选项卡上有一个值为“36”,这是我们想要的值 . 这是文件柜中的'TEMP'文件夹 . 'internalIds'在调用上面的脚本的脚本中定义,它可以是单个整数,也可以是逗号分隔的列表 . (虽然它似乎总是单一的 Value )
我应该提一下,这在我们的 生产环境 实例中有效,我们两天前根据 生产环境 情况刷新了我们的Sandbox实例 . 它在刷新之前在Sandbox中也不起作用 . 我能看到的唯一区别是,在 生产环境 中,域名在URL中是不同的,当然它必须是 . 除了两种环境之外,所有代码和设置看起来都是相同的 .
就像我说的,我是Netsuite的新手,所以我之前没有使用过nlapiRequestURL . 所以这可能是我忽略的令人难以置信的愚蠢 . 我已经完成了执行调用的脚本中的代码,但我似乎无法调试使用nlapiRequestURL调用的Suitelet . 我将一个nlapiLogExecution调用作为脚本中的第一行调用,但它似乎从来没有打过 . 在我真正进入该脚本之前,我只是得到了上面提到的一个错误 .
如果有人有任何建议,我会很感激 . 我或多或少地耗尽了我的知识和资源 . 在此先感谢,如果您需要进一步的信息,请告诉我 .
1 回答
您可能想尝试的一些事情:
测试发送你的GET查询参数(内部)都是小写的,我遇到过问题之前的参数案例被转换,它会产生不必要的麻烦 .