APL函数踩坑

125 阅读1分钟

场景1

  • 需求:

    新建/编辑客户对象时,要校验客户名称字段是否与客户对象历史数据中的客户曾用名字段有重复。如果重复,则阻止提交。

  • 错误思路:

    1. 函数挂载: 新建/编辑的提交按钮前验证
    2. 通过sql语句(select)进行条件查询,查询是否有客户对象的客户曾用名与当前新建/编辑客户表单中的客户名称相同。
    3. 对sql语句的返回结果(可以提取出一个List)作判空,如果为空,则代表不存在重复,允许提交数据;如果不为空,则代表存在重复,阻止提交数据。
  • 错误点:

    编辑客户对象时, 按上面思路进行sql语句(select)进行条件查询,如果当前编辑的这个客户对象在新建时填写了客户曾用名字段,则毫无疑问sql语句的返回结果(可以提取出一个List)的size是1。按上面思路的话,不为空代表重复,会阻止我们提交刚刚编辑的数据。

  • 正确思路:

    // 客户id(三元表达式兼顾了新建/编辑操作)
    String id = (context.data._id != null) ? context.data._id : ''
    
    // 这条sql语句也兼顾了新建/编辑操作
    String sql = "select _id from AccountObj where 客户曾用名的apiname  like %" + "'$当前客户name字段的内容'" + "% and _id != '$id'"
    
  • 总结:

    利用sql进行查重的时候要考虑编辑操作(因为编辑操作时利用sql查重会查到本身的一条数据)