如何在 saveChanges 上捕获错误 - Google App Maker
How to catch an error on saveChanges - Google App Maker
我试图在为数据源创建新记录时捕获错误。 (数据源设置为仅接受其中一个字段的唯一值。)
当尝试强制出错时,客户端脚本运行并显示最终弹出窗口,说明已成功创建新记录。而不是显示弹出窗口来说明创建记录时发生了错误。
我和我们的一位高级开发人员谈过,他解释说这个问题是由于 saveChanges 运行 异步引起的。 (保存更改的调用运行时没有任何错误,只有在完成后才会 return 出错。)
所以我的问题是如何在 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;
}
假设您的 Stores 数据源设置为 'Manual Save' 模式,以下应该有效:
替换这段代码:
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.
参考文档中的异步操作部分
如果这对您不起作用或者您无法使用它来计算您的代码,请告诉我。
我试图在为数据源创建新记录时捕获错误。 (数据源设置为仅接受其中一个字段的唯一值。)
当尝试强制出错时,客户端脚本运行并显示最终弹出窗口,说明已成功创建新记录。而不是显示弹出窗口来说明创建记录时发生了错误。
我和我们的一位高级开发人员谈过,他解释说这个问题是由于 saveChanges 运行 异步引起的。 (保存更改的调用运行时没有任何错误,只有在完成后才会 return 出错。)
所以我的问题是如何在 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;
}
假设您的 Stores 数据源设置为 'Manual Save' 模式,以下应该有效:
替换这段代码:
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.
参考文档中的异步操作部分如果这对您不起作用或者您无法使用它来计算您的代码,请告诉我。