Обработка ответов и ошибок в скриптах Google Apps. doPost? withFailureHandler ()? - PullRequest
2 голосов
/ 20 марта 2020

Я надеюсь, что все в безопасности и здоровы, учитывая текущую ситуацию.

У меня есть вопрос по поводу проекта со скриптом Google Apps. У меня есть веб-приложение, и я смог выяснить маршрутизацию с помощью doGet (), используя ссылки и т. Д. c.

//global variables
const sheetId = "foo";
const Route = {};
Route.path = function(route, callback){
  Route[route] = callback;
}

function doGet(e){

  Route.path("newAccountForm",loadNewForm);
  Route.path("updateBrandForm", loadUpdateForm);

  if(Route[e.parameters.v]) {
       return Route[e.parameters.v](); 
  } else {
    return render("home") 
  }
};

function loadNewForm() {

 const sheetActive = SpreadsheetApp.openById(sheetId);
 const mySheet = sheetActive.getSheetByName("Sheet1");

  const title = "title";
  const index = "index";

  return render("addNewAccount",{title: title, index: index});  

}

function loadUpdateForm () {
  const sheetActive = SpreadsheetApp.openById(sheetId);
  const mySheet = sheetActive.getSheetByName("Sheet1");


  return render("updateBrand");

}

function render(file,argsObject) {
  const tmp = HtmlService.createTemplateFromFile(file);
  if(argsObject) {
    const keys = Object.keys(argsObject);
    keys.forEach(function(key){
      tmp[key] = argsObject[key];
    })   
  }  // END IF  
  return tmp.evaluate();  
}

Ссылки ..

    <a href="<?= ScriptApp.getService().getUrl(); ?>?v=newAccountForm">Add New Brand</a> 
    <a href="<?= ScriptApp.getService().getUrl(); ?>?v=updateBrandForm">Update Exisiting Brand</a> 
    <a href="<?= ScriptApp.getService().getUrl(); ?>?v=reports">Analytics / Reports</a> 

Теперь я немного застрял в обработке ответов и ошибок. Я попытался с помощью doPost (), который работает для рендеринга новой HTML страницы. Моя проблема в том, что я не уверен, как определить, был ли запрос успешным в doPost. Есть ли способ проверить это? Я могу получить все параметры через объект события, но не через состояние.

<form id="myForm" onsubmit="handleNewAccountFormSubmit(this);"  method="post" action="<?= ScriptApp.getService().getUrl(); ?>">

Я также пытался обработать его с помощью включенного .withFailureHandler (), но не уверен, как его запустить или если можно вызвать функцию из моего .GS. Я также пытался использовать функцию onFail () вне функции FormSubmit.

function handleNewAccountFormSubmit(formObject) {
google.script.run.withFailureHandler(onFail).withSuccessHandler().processNewAccountForm(formObject);
  function onFail(error) {
  Logger.log(error)
  console.log(error)
  return google.script.run.onError();
}
}

Я в основном хочу показать, была ли функция успешно запущена для удобства пользователя, но я не уверен в наилучшей практике или как или даже если это возможно (я уверен, что это так!)

Я с нетерпением жду любых идей, исправлений, и если что-то неясно, я сделаю все возможное, чтобы предоставить больше информации.

Еще раз спасибо.

1 Ответ

2 голосов
/ 20 марта 2020

Используйте обработчики успеха или неудач, чтобы предупредить пользователя:

function handleNewAccountFormSubmit(formObject) {    
    alert("Please wait..!")  
    google.script.run
        .withFailureHandler(e => {
            console.error(e.message);
            alert("Unexpected error! Contact support!")
        })
        .withSuccessHandler(e => alert("Form submitted successfully!"))
        .processNewAccountForm(formObject);
}
...