在向数据源创建新记录时,我试图捕获错误。 (数据源设置为仅接受其中一个字段的唯一值。)
当尝试强制错误时,客户端脚本将运行并显示最终弹出窗口,说明已成功创建新记录。并未显示弹出窗口来说明创建记录的错误。
我与一位高级开发人员进行了交谈,他解释说该问题是由于saveChanges异步运行引起的。 (保存更改的调用运行时没有任何错误,只有完成后才返回错误。)
所以我的问题是,在saveChanges完成并显示弹出窗口后如何捕获错误。 (如果记录创建成功或失败。)
我的代码:
//Creates New Stores
function createNewStores() {
var newCert = '{"ShopCertificates":[{"Certificate_ID":"","Certificate_Name":"","Valid_From":"","Valid_To":"","Renewal_Date":"","Date_Applied_For_Renewal":"","Date_Compliance_Received":"","Date_Compliance_Issues_Resolved":"","Compliance_Notice_Date":"","Certificate_URL":""}]}';
//Get the Datasource, set it to create mode and create a new blank item.
var createDatasource = app.datasources.Stores.modes.create;
var draft = createDatasource.item;
//Get the selected values from the page.
var brand = app.pages.A_Add_Store.descendants.Dropdown_Brand_Selector.value;
var division = app.pages.A_Add_Store.descendants.Dropdown_Division_Selector.value;
var storeName = app.pages.A_Add_Store.descendants.Dropdown_Stores_Selector.value;
//Set the values of the draft record to be the values entered in the form.
draft.StoreId = parseInt(storeName);
draft.Brand = brand;
draft.Division = division;
draft.Store_Name = storeName;
draft.Cert_JSON = newCert;
//Create the new record in the datasource and save changes to the datasource.
try{
createDatasource.createItem();
app.datasources.Stores.saveChanges();
}
catch(err){
app.popups.Error_Store_Already_Exists.visible = true;
}
//After record is created set values in form to null.
app.pages.A_Add_Store.descendants.Dropdown_Brand_Selector.value = null;
app.pages.A_Add_Store.descendants.Dropdown_Division_Selector.value = null;
app.pages.A_Add_Store.descendants.Dropdown_Stores_Selector.value = null;
//Display Popup stating store has been added.
app.popups.New_Store_Added.visible = true;
}
答案 0 :(得分:2)
假设您的商店数据源设置为“手动保存”模式,则应该可以进行以下操作:
替换此部分代码:
try{
createDatasource.createItem();
app.datasources.Stores.saveChanges();
}
catch(err){
app.popups.Error_Store_Already_Exists.visible = true;
}
与此:
createDatasource.createItem();
app.datasources.Stores.saveChanges({
success: function() {
app.popups.New_Store_Added.visible = true;
},
failure: function() {
app.popups.Error_Store_Already_Exists.visible = true;
}
});
如果您的数据源设置为自动保存,则saveChanges()函数将被忽略,您将无法在该函数中回叫。请在https://developers.google.com/appmaker/scripting/client#asynchronous_operations这里参考文档中的异步操作部分。
如果这对您不起作用,或者您无法使用它来确定您的代码,请告诉我。