Как отловить ошибку на saveChanges - Google App Maker - PullRequest
0 голосов
/ 31 октября 2018

Я пытаюсь отловить ошибку при создании новой записи для источника данных. (Источник данных настроен на прием уникальных значений только в одном из полей.)

При попытке вызвать ошибку клиентский сценарий запускается и отображает последнее всплывающее окно, сообщающее, что новая запись была успешно создана. Вместо отображения всплывающего окна с сообщением об ошибке возникла ошибка создания записи.

Я говорил с одним из наших старших разработчиков, и он объяснил, что проблема в том, что 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;
}

1 Ответ

0 голосов
/ 31 октября 2018

При условии, что ваш источник данных Stores установлен в режим «Ручное сохранение», должно работать следующее:

Заменить этот раздел кода:

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.

Если это не работает для вас или вы не можете использовать это для определения своего кода, пожалуйста, дайте мне знать.

...