SuiteScript 密码验证允许保存不等于五个字符的记录

SuiteScript password validation allows to save a record not to equal five characters

我创建的 SuiteScript 密码验证脚本应该在密码长度不完全为 5 个字符的任何时候捕获,但是当我保存记录时,它会保存而不显示警报,"password does not match",当密码不是等于 5。我该如何解决这个问题?

/**
 * @NApiVersion 2.x
 * @NScriptType ClientScript
 * @NModuleScope SameAccount
 */
define(['N/currentRecord', 'N/search'],

function(currentRecord, search) {

    /**
     * Function to be executed after page is initialized.
     *
     * @param {Object} scriptContext
     * @param {Record} scriptContext.currentRecord - Current form record
     * @param {string} scriptContext.mode - The mode in which the record is being accessed (create, copy, or edit)
     *
     * @since 2015.2
     */
    function pageInit(scriptContext) {
        return true;
    }

    /**
     * Function to be executed when field is changed.
     *
     * @param {Object} scriptContext
     * @param {Record} scriptContext.currentRecord - Current form record
     * @param {string} scriptContext.sublistId - Sublist name
     * @param {string} scriptContext.fieldId - Field name
     * @param {number} scriptContext.lineNum - Line number. Will be undefined if not a sublist or matrix field
     * @param {number} scriptContext.columnNum - Line number. Will be undefined if not a matrix field
     *
     * @since 2015.2
     */
    function fieldChanged(scriptContext) {
        //alert(JSON.stringify(scriptContext.fieldId));
        var objRecord = scriptContext.currentRecord;
        if (scriptContext.fieldId === 'custrecord_cc_password'){

            var value = objRecord.getValue({
                fieldId: 'custrecord_cc_password'
            });

            if (value.match == 5) {
                //alert("OK");
                return true;
            }

            else {
                alert("Your password should be 5 digits");
                return false;
            }

        }

match函数(它是一个函数而不是属性)用于匹配字符串而不是字符串的长度。

要验证字符串的长度,您需要使用length 属性。

所以在你的情况下,用长度替换匹配应该可以解决问题。

if (value.length === 5) {
  //alert("OK");
  return true;
}

然而 fieldChanged 事件只会在用户更新密码时触发,所以为了避免这种情况你还应该实现 saveRecord 和 return false 如果您的验证没有像下面那样通过。

/**
 * @NApiVersion 2.x
 * @NScriptType ClientScript
 */
define([],
  function () {

    function saveRecord(context) {
      var currentRecord = context.currentRecord;

      var password = currentRecord.getValue({ fieldId: 'custrecord_cc_password' });

      if (password.length < 5) {
        // show error
        return false;
      }

      return true;
    }

    return { saveRecord: saveRecord };
  }
);