【发布时间】:2022-06-22 14:03:59
【问题描述】:
我正在尝试使用客户端脚本的 saveRecord 入口点重定向到另一个页面。
但是,为了做到这一点,我的理解是我需要先保存并提交记录。
有没有办法使用客户端脚本(即无需用户单击该按钮)来执行此操作(基本上复制用户在记录上按下 Netsuite 的本机“保存”按钮时发生的情况)?
我已经尝试过record.submitfields,虽然这不会触发saveRecord下的功能。
【问题讨论】:
我正在尝试使用客户端脚本的 saveRecord 入口点重定向到另一个页面。
但是,为了做到这一点,我的理解是我需要先保存并提交记录。
有没有办法使用客户端脚本(即无需用户单击该按钮)来执行此操作(基本上复制用户在记录上按下 Netsuite 的本机“保存”按钮时发生的情况)?
我已经尝试过record.submitfields,虽然这不会触发saveRecord下的功能。
【问题讨论】:
这不是一个纯 SuiteScript 解决方案,它更像是一个纯 JavaScript/Html 解决方案,我在代码中使用没有问题;如果您牢记 Netsuite UI 只是一个 Web 应用程序(它只是一个网站!),那么您可以在客户端脚本上执行许多标准 SuiteScript 所不具备的功能。
在您的情况下,您只需在代码中触发标准“保存”按钮的单击事件,并且由于 Netsuite 使用 jQuery,因此您可以这样做:
// your code
jQuery('#btn_multibutton_submitter').click();
// #btn_multibutton_submitter is just an example, get the right id of your button by checking the Netsuite page source code, or using Chrome Inspect
【讨论】:
如果您尝试重定向到记录 url,您可以使用 'N/url' 模块并在保存后立即调用 url.resolveRecord() API:
url.resolveRecord({
recordType: record.Type.EMPLOYEE,
isEditMode: true,
params:{}
})
这是员工记录类型的示例。
【讨论】:
我的建议是你触发一个存档——the answer above 就可以了。
但是,对于关键要求
[保存后]重定向到另一个页面。
这很狡猾,因为保存它会重新加载页面,因此它会刷新一堆东西。
a) 你可以打开一个新标签吗?如果是这样,则使用window.open(yourUrl) 打开一个新标签。
b) 您的新目的地是否需要原始记录中可能已更改的信息?如果是这样,那么您需要等到保存完成。
以下内容将有助于 a=no 和/或 b=yes。
在触发保存之前,您会使用浏览器删除一条信息。而且您有一段客户端脚本会查找该信息,以便在重新加载页面时您可以使用该信息来加载新页面。
A 算法将是:
B 算法将是:
您可以使用浏览器的localstorage 作为存储此标志的位置。你也可以使用sessionstorage,它会在会话结束时过期。
对于纯 NetSuite 解决方案,您可以使用存储会话变量 (N/runtime) 的套件进行检查。还有一点工作。
注意:请记住删除您的标志或至少考虑该状态的到期(因此,如果它“太旧”,请不要遵循它)。
【讨论】:
点击保存按钮的netuiste原生方式是使用getNLMultiButtonByName全局:
window.getNLMultiButtonByName('multibutton_submitter').onMainButtonClick(this);
但是 jQuery 选择器选项也应该可以工作。
【讨论】: