Я пытаюсь отловить ошибку при создании новой записи для источника данных. (Источник данных настроен на прием уникальных значений только в одном из полей.)
При попытке вызвать ошибку клиентский сценарий запускается и отображает последнее всплывающее окно, сообщающее, что новая запись была успешно создана. Вместо отображения всплывающего окна с сообщением об ошибке возникла ошибка создания записи.
Я говорил с одним из наших старших разработчиков, и он объяснил, что проблема в том, что 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;
}