How do you pass back a custom error message from google apps scripts?

后端 未结 3 1615
甜味超标
甜味超标 2020-12-16 13:15

When running a google apps script from a google spreadsheet, if one of the google apis is used incorrectly a red \"butterbar\" error is shown at the top of the spreadsheet.

相关标签:
3条回答
  • 2020-12-16 13:18

    As with any javascript, you can use:

    try {
      ...
    }
    catch (error) {
      throw new Error( "More meaningful error." );
    {
    

    There are numerous examples of this in use, even if the questions aren't exactly yours.

    My personal opinion is that it's best if you check the input to your function and throw errors on that (like this answer), rather than catching the errors from service calls. An appropriate time to use try..catch would be when you have no practical way to validate parameters, as in this answer.

    0 讨论(0)
  • 2020-12-16 13:35

    Here is the best way to pass data from your script into your error message. First setup a global variable object to store your data that you need for the error handling. Then store data to this object in each function's try{} section. Finally in catch(e) call an errHandler function that will pass the error data object. See the following code: code.gs.

    var onErrObj = {}
    function myFunction(){
    
     try{
      // function code goes here;
      // add more elements to onErrObj as desired;
     }catch(e){
          onErrObj['data1'] = 'someData';
          onErrObj['data'] = 'some Other Data';
          errHandler(e,'myFunction');
     }
    
     function errHandler(e,strFunc){
          var message = e.message+'\n in file: '+e.fileName+' on line: '+e.lineNumber;
          var sendto = 'yourname@youremail.com';
          var subject = 'My App encountered an error occured in '+strFunc;
          var errProps = JSON.stringify(this.onError);
          message = subject+'\n'+message+'\n onError: '+errProps;
          GmailApp.sendEmail(sendto, subject, message); 
    }
    
    0 讨论(0)
  • 2020-12-16 13:37

    You can try to have a look to the Base class that gives you the possibility to add alert box or other dialogs to interact with the user of your application if it is bound to a Spreadsheet (for example msgBox()). For a DocumentApp use the Ui class to interact with its interface.

    I never tried but if you use a try...catch structure with a throw statement it can also work.

    Cheers

    Nicolas

    0 讨论(0)
提交回复
热议问题