【问题标题】:Is there a client side function to save record in Suitescript?是否有客户端功能可以在 Suitescript 中保存记录?
【发布时间】:2022-06-22 14:03:59
【问题描述】:

我正在尝试使用客户端脚本的 saveRecord 入口点重定向到另一个页面。

但是,为了做到这一点,我的理解是我需要先保存并提交记录。

有没有办法使用客户端脚本(即无需用户单击该按钮)来执行此操作(基本上复制用户在记录上按下 Netsuite 的本机“保存”按钮时发生的情况)?

我已经尝试过record.submitfields,虽然这不会触发saveRecord下的功能。

【问题讨论】:

    标签: netsuite suitescript2.0


    【解决方案1】:

    这不是一个纯 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 
    

    【讨论】:

    • 再次感谢 B. Assem 对代码的帮助和易于理解的解释。我才刚刚开始学习如何编码所以真的很感激它
    【解决方案2】:

    如果您尝试重定向到记录 url,您可以使用 'N/url' 模块并在保存后立即调用 url.resolveRecord() API:

     url.resolveRecord({
         recordType: record.Type.EMPLOYEE,    
         isEditMode: true,
         params:{}
     })
    

    这是员工记录类型的示例。

    【讨论】:

    • 谢谢罗德里戈。尽管客户端脚本的触发器存在问题,但我已经尝试过。即我试图在保存后重定向,但没有发生“保存”事件,因为这取决于用户单击“保存”按钮(B.Assem 在下面的回答中提供了解决方案)
    【解决方案3】:

    我的建议是你触发一个存档——the answer above 就可以了。

    但是,对于关键要求

    [保存后]重定向到另一个页面。

    这很狡猾,因为保存它会重新加载页面,因此它会刷新一堆东西。

    a) 你可以打开一个新标签吗?如果是这样,则使用window.open(yourUrl) 打开一个新标签。

    b) 您的新目的地是否需要原始记录中可能已更改的信息?如果是这样,那么您需要等到保存完成。

    以下内容将有助于 a=no 和/或 b=yes。

    在触发保存之前,您会使用浏览器删除一条信息。而且您有一段客户端脚本会查找该信息,以便在重新加载页面时您可以使用该信息来加载新页面。

    A 算法将是:

    1. 留下一个带有重定向指令的标志
    2. 触发保存
    3. 加载时查找重定向标志
    4. 如果它不存在,则从这里中断。
    5. 如果存在,则执行 B。

    B 算法将是:

    1. 将标志复制到变量中
    2. 如果有标志,请删除它。
    3. 根据变量重定向

    您可以使用浏览器的localstorage 作为存储此标志的位置。你也可以使用sessionstorage,它会在会话结束时过期。

    对于纯 NetSuite 解决方案,您可以使用存储会话变量 (N/runtime) 的套件进行检查。还有一点工作。

    注意:请记住删除您的标志或至少考虑该状态的到期(因此,如果它“太旧”,请不要遵循它)。

    【讨论】:

    • 感谢 Gillyspy。我非常感谢您的详细回复。目前,我已经使用以下方法进行重定向: objRecord.save({ enableSourcing: true, ignoreMandatoryFields: false, }); window.location.assign("app.netsuite.com/app/site/hosting/…");尽管您发布的内容对于了解重定向的工作原理非常有帮助
    • @Lefemmenikita 试图做类似的事情,但不认为你可以解雇 objRecord.save({ enableSourcing: true, ignoreMandatoryFields: false, });在客户端脚本中?
    • @Chris,说实话,我不知道这是否有效。它不会引发错误并且重定向有效,因此我假设部分代码正常工作。我对编写这个特定脚本非常陌生,需要反复试验
    【解决方案4】:

    点击保存按钮的netuiste原生方式是使用getNLMultiButtonByName全局:

    window.getNLMultiButtonByName('multibutton_submitter').onMainButtonClick(this);
    

    但是 jQuery 选择器选项也应该可以工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-28
      相关资源
      最近更新 更多