【问题标题】:Prevent record deletion with SuiteScript使用 SuiteScript 防止记录删除
【发布时间】:2017-01-20 01:20:29
【问题描述】:

我想根据 NetSuite 中的某些条件防止记录被删除。但是,我似乎找不到验证失败事件? UserEvent 上的 BeforeSubmit 有一个 delete type,但它没有函数的返回值,所以我不能只说 return false,可以吗?

我如何防止删除记录,或失败某种类型的记录提交?

【问题讨论】:

    标签: netsuite suitescript


    【解决方案1】:

    不是返回 false,而是抛出一个错误。对用户不友好,但据我所知,这是唯一的选择。

    由于是在Before Submit User Event中,所以提交或删除都会失败。

    【讨论】:

    • 是的,这可以做到。在用户事件脚本期间停止将记录存储在数据库中的唯一方法是从beforeSubmit 引发错误。
    • 最安全(最佳实践?)的方法是什么?投掷功能?我以前从未使用过它,但它看起来是正确的解决方案?
    • throw 函数将是正确的解决方案。您还可以使用 SuiteScript 1.0 中的 nlapiCreateError 来创建您的自定义错误。
    【解决方案2】:

    您需要使用beforeSubmit 用户事件脚本并使用nlapiCreateError 引发错误。这是一个例子:

    function beforeSubmit(type) {
      if(type == 'delete') {
        // NOTE `nlapiGetFieldValue` returns nil/empty during a delete event
        //      `nlapiGetOldRecord` needs to be used to pull the entire record
    
        var payment = nlapiGetOldRecord();
    
        if(payment.getFieldText('paymentmethod') == 'cash') {
          throw nlapiCreateError(
            'AN_ERROR',
            'Message to the user!',
            true
          );
        }
      }
    }
    

    【讨论】:

      【解决方案3】:

      您还可以使用工作流来阻止 删除 按钮向用户显示:

      【讨论】:

        【解决方案4】:

        您可以添加客户端代码以在尝试删除要阻止的记录时向用户弹出消息。话虽如此,您仍然希望放置一个 UserEvent 脚本来防止删除操作。这将阻止用户通过限制

        【讨论】:

        • 客户端的什么事件会这样做?我最初确实看过它,如果事情失败,我当前的“计划”是在用户尝试编辑它时简单地将用户自动重定向回查看记录,但我没有看到会注册的客户端事件类型“删除”类型