【问题标题】:Google App Maker how to apply custom data validationGoogle App Maker 如何应用自定义数据验证
【发布时间】:2019-05-28 19:24:01
【问题描述】:

应用制作工具具有默认验证和正则表达式验证,一旦发生错误,它们会突出显示字段。

我们需要进行自定义验证以检查模型中的重复记录。是否有任何功能可以检查验证还是我们需要执行任何脚本?

【问题讨论】:

    标签: google-app-maker


    【解决方案1】:

    避免数据重复的最佳方法是使用 Cloud SQL 对您的表实施“唯一”约束。

    如果您不想使用 Cloud SQL 并想使用 Drive Tables,您可以使用锁、查询和模型事件手动模拟唯一约束:

    // onCreate model event (actually it is onBeforeCreate)
    // this events accepts about-to-create record as parameter
    var lock = LockService.getScriptLock();
    lock.waitLock(5000);
    
    var query = app.models.MyModel.newQuery();
    query.filters.SomeField._equals = record.SomeField;
    
    var records = query.run();
    
    if (records.length > 0) {
      throw new Error('Record with SomeField value equal to ' + record.SomeField +
                       ' already exists.');
    }
    
    lock.releaseLock();
    

    您需要在此处使用lock 以防止其他线程同时创建违反您的唯一约束的记录。

    然后你可以在createItem函数回调中处理UI上的错误:

    // create button onClick handler
    widget.datasource.createItem({
      success: function(record) {
        // TODO
      },
      failure: function(error) {
        // TODO
      }
    });
    

    【讨论】:

    • 谢谢,但我想在字段下方的前端向用户显示此消息。
    • 我在答案中添加了客户端部分。
    • // 创建按钮 onClick 处理程序 widget.datasource.createItem({ success: function(record) { // TODO }, failure: function(error) { // TODO } });这是您提到的代码块。我想在控件下方显示错误消息,就像所需的错误消息一样。
    • 有不同的方式来访问小部件本身(app.PageName.descendants.WidgetName...app.currentPage.descendants.WidgetName...,或者如果你在事件处理程序中,则只是widget),但是afaik只有一种方法可以以编程方式设置错误:...widget.validationErrors = ['error text here'];
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-25
    • 2019-06-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多