如何调用从服务器功能在谷歌Apps脚本?(How to call function from ser

2019-10-21 09:19发布

我使用的气体嵌入在一个谷歌的电子表格工具条的形式。

如何关闭这个侧边栏的形式已经提交并确认用户后?

该验证的数据发送到服务器之前完成。 在此之后,用户必须确认他想用是/否警告框提交表单。

如果他点击是:侧边栏关闭,数据提交

如果他不点击:侧边栏保持打开状态,并没有任何反应。

在code.gs:

function onOpen() {
  SpreadsheetApp.getUi() 
      .createMenu('Test')
      .addItem('New Test', 'showSidebar')
      .addToUi()  
}

function include (file) {
  return HtmlService.createTemplateFromFile(file).evaluate().getContent();
}

function showSidebar() {
  var html = HtmlService.createTemplateFromFile('Page')
      .evaluate()
      .setTitle('Sidebar')
      .setWidth(200);
  SpreadsheetApp.getUi() 
      .showSidebar(html);
}

function processF(form){

  var ui = SpreadsheetApp.getUi();
  var result = ui.alert(
    'Please confirm',   
    ui.ButtonSet.YES_NO);

  if (result == ui.Button.YES) {
    Browser.msgBox('Yes');
    return true;
  } else{
    return false;
    //throw new Error( "Optional message" ); 
  }
}

在HTML:

<link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/jqueryui/1.11.1/themes/smoothness/jquery-ui.css" />
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.11.2/jquery-ui.min.js"></script>


<script>

function validar(){

  try{
  var form=document.getElementById('configs');

  if(!document.getElementById('nome').value || !document.getElementById('datepicker').value){
    return false;
  } else {
    this.disabled=true;
    google.script.run
    //.withFailureHandler(google.script.host.close)
    .withSuccessHandler(function(closeTF){
      if(closeTF==true){
        google.script.host.close();
      }
    }).processF(form);
    //google.script.host.close();
  }

  } catch(e){
    alert('Erro: '+e.message);
  }
};

</script>


<div class="painel">
 <form id="configs" action="#">
 <fieldset>


<label>Name</label>
<p><input type="text" name="nome" id="nome" minlength="2" required/></p>

<label>1-Choose date:</label>

<p><input type="text" name="datepicker" id="datepicker" required/></p>

<label>2-Choose:</label>

<p>
<select name="horizonte" id="horizonte">
  <option value=1>1 Month</option>
  <option value=2>2 Months</option>
  <option value=3 selected="selected">3 Months</option>
  <option value=6>6 Months</option>
</select>
</p>

<label>3-Choose:</label>
<p>
<select name="relatorio" id="relatorio">
<option value=1>Week</option>
<option value=2>Month</option>
</select>

</p>

<p>
<input type="submit" id="enviar" value="Submit" onclick="validar()" />
</p>

</fieldset>
</form>
</div>


<?!= include('Javascript'); ?>

有了这个代码,工具条始终关闭,无论用户单击Yes或No.

Answer 1:

更新答案

感谢您的代码,@NunoNogueira的其余部分。 我花了大量时间用它进行试验,我相信这个问题是与使用的alert 。 这可能是相关发行4428 ,但我不能肯定。 这可能是因为该警报是压倒一切的一些窗口的上下文信息。 什么是明确的是,服务器返回undefined的successHandler,所以它在客户端没用。 我的建议是放弃使用alert此工作流程。

如果你坚持要验证表单之前有一个确认,你可以使用一个confirm()在客户端上:

function validar(){
  if (!confirm("Por favor, confirme")) return;
  ...

原来的答案 - 正确的信息,而不是什么问题了。

该调用return false将触发successHandler ,因为它是一个return

要调用failureHandler相反,服务器功能必须失败 。 取而代之的return

throw new Error( "Optional message" );

...然后添加一个failureHandler在HTML代码中。



文章来源: How to call function from server in Google Apps Script?