Javascript 气体点击事件处理程序导致;意外错误“;用户界面内Web应用程序

Javascript 气体点击事件处理程序导致;意外错误“;用户界面内Web应用程序,javascript,user-interface,google-apps-script,dom-events,Javascript,User Interface,Google Apps Script,Dom Events,我已经编写了一个Google apps脚本,它首先在UI应用程序中创建并显示一个折线图,然后根据选定的列表框值重新绘制图形,使用单击按钮事件处理程序在图形“刷新”时触发 我试图解决的问题是,当作为web应用程序发布时,当触发我收到的单击事件时: 遇到错误:发生意外错误 这段代码在电子表格中运行得非常完美(除了一些烦人的权限问题,其他用户被要求下载panel对象;我将稍后再讨论),我真的很想知道为什么它不能翻译 以下是它的价值代码: function doGet(){ var app = Ui

我已经编写了一个Google apps脚本,它首先在UI应用程序中创建并显示一个折线图,然后根据选定的列表框值重新绘制图形,使用单击按钮事件处理程序在图形“刷新”时触发

我试图解决的问题是,当作为web应用程序发布时,当触发我收到的单击事件时:

遇到错误:发生意外错误

这段代码在电子表格中运行得非常完美(除了一些烦人的权限问题,其他用户被要求下载panel对象;我将稍后再讨论),我真的很想知道为什么它不能翻译

以下是它的价值代码:

function doGet(){
  var app = UiApp.createApplication().setWidth(800).setHeight(650).setTitle('FLEET Chart');
  var e = 'undefined';
  lb(app);
  return click(e, app);
 }

function lb(app){
  var lb = app.createListBox(true).setId('myId').setName('myLbName');// add items to ListBox      
  var lb2 = app.createListBox(true).setId('myId2').setName('myLbName2');
  var lb3 = app.createListBox(true).setId('myId3').setName('myLbName3');
  var bttn = app.createButton('Refresh').setId('myBttn');
  lb3.addItem('2011').addItem('2012');
  lb2.addItem('January')
     .addItem('February')
     .addItem('March')
     .addItem('April')
     .addItem('May')
     .addItem('June')
     .addItem('July')
     .addItem('August')
     .addItem('September')
     .addItem('October')
     .addItem('November')
     .addItem('December');
   lb.addItem('Drug1')    
     .addItem('Drug2')    
     .addItem('Drug3')    
     .addItem('Drug4');
  var mypanel = app.createHorizontalPanel().setVisible(true);
  mypanel.add(lb).add(lb2).add(lb3).add(bttn);
  app.add(mypanel);
  var handler = app.createServerChangeHandler('click').addCallbackElement(mypanel);
  handler.addCallbackElement(bttn);
  bttn.addClickHandler(handler);
}

function click(e, app) {
  var valuelb = new Array('Drug1','Drug2','Drug3','Drug4');
  var valuelb2 = new Array    ('January','February','March','April','May','June','July','August','September','October','November','December');
  var valuelb3 = new Array('2011','2012');
  var SS = SpreadsheetApp.openById('0Am8DRqAEaxH7dF9NWFJLSTdWZGRxeEFfMkFjNlFCT2c');
  var sheeteff = SS.getSheetByName('Efficiency');
  var data = sheeteff.getDataRange().getValues();
  if (String(e) != 'undefined') {
    app.setWidth(800).setHeight(650).setTitle('FLEET Chart');
    var valuelb = String(e.parameter.myLbName);
    if (valuelb.indexOf(',') != -1) {
      var valuelb = e.parameter.myLbName.split(',');
    }
    var valuelb2 = String(e.parameter.myLbName2);
    if (valuelb2.indexOf(',') != -1) {
      var valuelb2 = e.parameter.myLbName2.split(',');
    }
    var valuelb3 = String(e.parameter.myLbName3);
    if (valuelb3.indexOf(',') != -1) {
      var valuelb3 = e.parameter.myLbName3.split(',');
    }
    SS.getSheetByName('Sheet2').getRange(1,1).setValue(String(valuelb2) + ' ' + valuelb.indexOf(','));//for unformation purposes
    lb(app);
  }else{
    SS.getSheetByName('Sheet2').getRange(1,1).setValue(String(e));//for information purposes
  }
  var usedata = ArrayLib.filterByText(ArrayLib.filterByText(ArrayLib.filterByText(data, 3, valuelb), 1, valuelb2), 0, valuelb3);

  //Build data table
  var dataTable = Charts.newDataTable();

  //Add Column types
  dataTable.addColumn(Charts.ColumnType.DATE, data[0][2]);
  dataTable.addColumn(Charts.ColumnType.NUMBER, data[0][9]);
  dataTable.addColumn(Charts.ColumnType.NUMBER, data[0][8]);
  //Add rows
  for(var j=0; j<usedata.length; j++){
    dataTable.setValue(j, 0, usedata[j][2]);
    dataTable.setValue(j, 1, usedata[j][9]);
    dataTable.setValue(j, 2, usedata[j][8]);
  }

  //Create and build chart
  var chart = Charts.newLineChart()
      .setDataTable(dataTable)
      .setTitle('Efficiency over Time \nConfiguration: [' + valuelb + ']\n' + 'Month: [' + valuelb2 + ']\n' + 'Year: [' + valuelb3 + ']')
      .setXAxisTitle('Time')
      .setYAxisTitle('Percentage')
      .setDimensions(750, 600)
      .setPointStyle(Charts.PointStyle.MEDIUM)
      .build();
  app.add(chart);
  return app;
}
函数doGet(){
var app=UiApp.createApplication().setWidth(800).setHeight(650).setTitle('FLEET Chart');
变量e=‘未定义’;
lb(app);
返回点击(e,app);
}
功能lb(应用程序){
var lb=app.createListBox(true).setId('myId').setName('myLbName');//将项目添加到ListBox
var lb2=app.createListBox(true).setId('myId2').setName('myLbName2');
var lb3=app.createListBox(true).setId('myId3').setName('myLbName3');
var bttn=app.createButton('Refresh').setId('myBttn');
lb3.附加条款('2011')。附加条款('2012');
lb2.附加条款(“一月”)
.addItem('二月')
.addItem('三月')
.addItem('April')
.addItem('May')
.addItem('June')
.addItem('July')
.addItem('8月')
.addItem('9月')
.addItem('10月')
.addItem('11月')
.addItem(“12月”);
lb.addItem('Drug1')
.addItem('Drug2')
.addItem('Drug3')
.addItem(“药物4”);
var mypanel=app.createHorizontalPanel().setVisible(true);
mypanel.add(lb).add(lb2).add(lb3).add(bttn);
应用程序添加(mypanel);
var handler=app.createServerChangeHandler('click').addCallbackElement(mypanel);
handler.addCallbackElement(bttn);
bttn.addClickHandler(处理程序);
}
功能点击(e,应用程序){
var valuelb=新数组('Drug1','Drug2','Drug3','Drug4');
var valuelb2=新数组(“一月”、“二月”、“三月”、“四月”、“五月”、“六月”、“七月”、“八月”、“九月”、“十月”、“十一月”、“十二月”);
var valuelb3=新数组('2011'和'2012');
var SS=SpreadsheetApp.openById('0am8drqaexh7df9nwfjlstdwzgrxeffmkfjnlfct2c');
var sheeteff=SS.getSheetByName(“效率”);
var data=sheeteff.getDataRange().getValues();
if(字符串(e)!=‘未定义’){
附录.设置宽度(800).设置高度(650).设置标题(“车队图表”);
var valuelb=String(e.parameter.myLbName);
if(valuelb.indexOf(',')!=-1){
var valuelb=e.parameter.myLbName.split(',');
}
var valuelb2=字符串(e.parameter.myLbName2);
if(valuelb2.indexOf(',')!=-1){
var valuelb2=e.parameter.myLbName2.split(',');
}
var valuelb3=字符串(e.parameter.myLbName3);
if(valuelb3.indexOf(',')!=-1){
var valuelb3=e.parameter.myLbName3.split(',');
}
SS.getSheetByName('Sheet2').getRange(1,1).setValue(String(valuelb2)+''+valuelb.indexOf(',');//用于非格式化目的
lb(app);
}否则{
SS.getSheetByName('Sheet2').getRange(1,1).setValue(String(e));//仅供参考
}
var usedata=ArrayLib.filterByText(ArrayLib.filterByText(数据,3,值lb),1,值lb2),0,值lb3);
//建立数据表
var dataTable=Charts.newDataTable();
//添加列类型
dataTable.addColumn(Charts.ColumnType.DATE,数据[0][2]);
dataTable.addColumn(Charts.ColumnType.NUMBER,数据[0][9]);
dataTable.addColumn(Charts.ColumnType.NUMBER,数据[0][8]);
//添加行

对于(var j=0;j我还没有看完您的全部代码,但我肯定看到这是错误的-您已将doGet设置为要在处理程序上调用的函数。除了第二次尝试调用UiApp.createApplication()之外,没有任何问题,这是不允许的


我建议您将处理程序更改为调用另一个函数(lb,可能),而不是doGet。

我还有“意外错误”在我的代码中。为了解决这些问题,我编写了一个简单的库来帮助查找服务器处理程序中的问题。这是一个演示如何使用库的示例。示例源代码为。要将库添加到脚本中,需要使用
资源->管理库
拨号中的
mr6tkhuvejjyr-NnLUNbEkFO7CoOZA03
项目键g、 库使用
ScriptProperties
服务来存储自己的内部变量。

感谢Srik,我删除了除初始方法之外的所有createApplication方法,并将处理程序设置为调用click(e)函数;这实际上是它最初的设置方式,但我一直在胡思乱想,试图找出问题所在。唉……仍然没有刷新。尊敬的Ryanok,在这种情况下,您应该在单击(e)时执行var app=UiApp.getActiveApplication()代码。@megabyte1024..是否可以在UI Builder应用程序中使用您的函数?我有一个基于代码的初始登录屏幕,调试窗口在UI页面覆盖它之前闪烁。@JoeFoley,您能给我一个使用UI Builder的应用程序的详细场景吗?我不使用UI Builder,也没有测试我的库w我将检查可以做什么。@JoeFoley。我使用UI生成器创建了一个。是示例源代码。它包含两个按钮,具有与上一个演示类似的处理程序。