// 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
}
});
1 回答
避免数据重复的最佳方法是使用Cloud SQL对表执行“唯一”约束 .
如果您不想使用Cloud SQL并希望使用 Drive Tables ,则可以使用锁定,查询和模型事件手动模拟唯一约束:
您需要
lock
来防止其他线程同时创建违反您的唯一约束的记录 .然后你可以在
createItem
函数回调中处理UI上的错误: