【问题标题】:google.script.run is not working when using shared script from library使用库中的共享脚本时 google.script.run 不起作用
【发布时间】:2016-12-12 17:56:24
【问题描述】:

我正在编写一个脚本,为此我正在使用独立脚本从库中调用一个函数:

HTML 文件如下所示:

<!DOCTYPE html>
<html>
  <head>
  
<link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/jqueryui/1.9.1/themes/cupertino/jquery-ui.css">
<style type="text/css"> .demo { margin: 0px ; color : #AAA ; font-family : arial sans-serif ;font-size : 10pt } 
                            p { color : black ; font-size : 11pt } 
                            .ui-datepicker th {padding:5px;}
                            .ui-datepicker table {font-size:10px;}
                            .ui-widget {font-size:12px;}
                        input{width:100%;}
</style>
    <base target="_top">
  </head>
  <body>
    <div class="demo" >
<div style="width:30%;text-align:left;float:left;">
<p> Candidate Email : </p>
<p> Updated Status : </p>
<p> Assigned To :</p>
<p> Date :</p>
</div>
<div style="width:70%;text-align:left;float:left;">
<p> <input class="email" type="text" /></p>
<p><input class="status" type="text" /></p>
<p><input class="assigned" type="text" /></p>
<p><input type="text" name="StartDate" id="startdatepicker" /> </p>
</div>

<input class="submit" type="button" value="Submit" disabled=""/>
</div>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.9.1/jquery-ui.min.js"></script>
<script>
$(document).ready(function(){
$(".email").val(email);
$(".status").val(status);
$(".assigned").val(assigned);
$(document).on('click','input.submit',function(){

submitDates();

});
   $( "#startdatepicker" ).datepicker({
      showWeek: true,
      firstDay: 0,
     });
$(document).on('change','#startdatepicker',function(){
 if($("#startdatepicker").val()!='')
 {
   $("input.submit").removeAttr("disabled");
 }
 else { 
 $("input.submit").attr("disabled","true");
 }
});

});

</script>
<script>
function submitDates() {

  var startDate = $("#startdatepicker").val();
  var email = $(".email").val();
  var status = $(".status").val();
  var assigned = $(".assigned").val();
  
  google.script.run
        .withSuccessHandler(
        
           // Dates delivered, close dialog
           function() {
             
             google.script.host.close();
           })
           // Display failure messages
         .withFailureHandler(
           function() {
             var div = $('<div id="error" class="error">' + "Please enter the correct Date" + '</div>');
             div.after($("#demo"));
           })
         .statusLogger(email, status, assigned, startDate);*/
}


</script>
  </body>
</html>

gs 文件看起来像这样:

function onEdit(event) { 

var lSheet = SpreadsheetApp.getActive().getSheetByName("Status Logs");
var sheet = event.source.getSheetByName('Tracker'); 
var actRng = event.source.getActiveRange(); 
var editColumn = actRng.getColumn(); 
var index = actRng.getRowIndex(); 
var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues(); 
var dateCol = headers[0].indexOf("Status Change Date"); 
var updateCol = headers[0].indexOf("Application Status");
var emailCol = headers[0].indexOf("Email");
var assignCol = headers[0].indexOf("Assigned To");
var intType = sheet.getRange(index,updateCol+1).getValue();
var email = sheet.getRange(index,emailCol+1).getValue();
var assignedTo = sheet.getRange(index,assignCol+1).getValue();

if (dateCol > -1 && index > 1 && editColumn == updateCol+1) { 
//lSheet.appendRow([email, intType, sheet.getRange(index, dateCol + 1).getValue(),assignedTo]);

var html = HtmlService.createHtmlOutputFromFile('dateDialogue')
  .setWidth(300)
  .setHeight(200)
  .getContent();

var html2 =  HtmlService.createHtmlOutput(html + '<script>var email= "'+ email +'";var status="'+ intType +'";var assigned="'+ assignedTo +'";</script>');
SpreadsheetApp.getUi() 
  .showModalDialog(html2, 'Please enter the Date');
} 
}

statusLogger 函数只是在工作表中追加一行。

问题是,google.script.run 不工作,尽管 google.script.host.close() 工作正常。有什么帮助吗?

【问题讨论】:

  • 在您的 HTML 文件中,尝试删除 .statusLogger() 函数末尾的 */ (:

标签: html jquery google-apps-script web-applications


【解决方案1】:

根据您的问题,我得出的结论是您有 2 个脚本。一个是文档绑定脚本,另一个是独立脚本,作为库包含在您的文档绑定脚本中。

当您在项目中添加脚本作为库时,您会为其分配一个标识符。然后可以使用此标识符从 code.gs 调用库函数。

例子:

我有一个名为 stackflow 的独立脚本,我将它作为外部库包含在我的项目中。

我给库的标识符是stackflow

在我的独立脚本中(作为库包含)

function testLibraryFunction(){
  return "successful execution of library function";
}

在我的实际项目中,我会尝试像这样访问库函数

code.gs

function executeLibraryCode(){
  var result = stackflow.testLibraryFunction();
  Logger.log(result);
  return result
} 

在我的 html 文件中,我将调用 executeLibraryCode(),它将从库中调用 testLibraryFunction() 函数。

HTML 文件:

google.script.run
    .withSuccessHandler(
          // callback function
       )
     .withFailureHandler(
          // callback function
       )
     .executeLibraryCode();

如@ocordova 在 cmets 中提到的,请在 .statusLogger 之后从您的 html 文件中删除 */。

【讨论】:

  • 感谢您的回复,*/ 在那里是因为我正在做一些测试,虽然我发现了问题,但这是因为 .statusLogger 功能的授权。现在它运行良好。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-17
  • 2017-02-11
  • 2019-06-04
  • 2017-08-05
  • 1970-01-01
相关资源
最近更新 更多