执行脚本 [英] Execution of a script

查看:97
本文介绍了执行脚本的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这种情况。我几个月前完成了一个脚本,该脚本仍在谷歌网站上运行。 doGet函数是:

 函数doGet(e){
var myapp = UiApp.createApplication();


var mygrid = myapp.createGrid(5,2);
var listboxAssociazione = myapp.createListBox()。setId(listboxAssociazione)。setName(listboxAssociazione);
var labelAssociazione = myapp.createLabel(Associazione)。setId(Associazione);
var listboxMeseFatturato = myapp.createListBox()。setId(listboxMeseFatturato)。setName(listboxMeseFatturato);
var labelMeseFatturato = myapp.createLabel(Mese da fatturare)。setId(Mese da fatturare);
var listboxAnnoFatturato = myapp.createListBox()。setId(listboxAnnoFatturato)。setName(listboxAnnoFatturato);
var labelAnnoFatturato = myapp.createLabel(Anno)。setId(Anno);
var buttonCalcola = myapp.createButton()。setText(Calcola)。setId(CalcolaFattura);
var labelLavoroInCorso = myapp.createLabel()。setId(labelLavoroInCorso)。setStyleAttribute('color','blue');


mygrid.setWidget(0,0,labelAssociazione);
mygrid.setWidget(0,1,listboxAssociazione);
mygrid.setWidget(1,0,labelMeseFatturato);
mygrid.setWidget(1,1,listboxMeseFatturato);
mygrid.setWidget(2,0,labelAnnoFatturato);
mygrid.setWidget(2,1,listboxAnnoFatturato);
mygrid.setWidget(3,1,buttonCalcola);
mygrid.setWidget(4,1,labelLavoroInCorso);

var p = DocsList.getFolders();
var totcartelle = p.length;
var trovato = false;
var cartellaAssociazioni; (var j = 0; j< totcartelle&& trovato == false; j ++){
var prova = p [j] .getId();
if(p [j] .getId()==0B-H4Ioaio5w5YTg3MGFkOWQtMzYzNy00ZTFhLWEzY2YtZTVlNzIwYWJhMmJm){
trovato = true;
cartellaAssociazioni = p [j];
}

}

var cartelle = cartellaAssociazioni.getFolders();
var lunghezza = cartelle.length;
for(var i = 0; i< lunghezza; i ++)//这些数组是基于零的,它看起来像
{var prova = cartelle [i] .getName();
listboxAssociazione.addItem(prova);
}


// Aggiunta dei mesi alla listbox
listboxMeseFatturato.addItem(Gennaio);
listboxMeseFatturato.addItem(Febbraio);
listboxMeseFatturato.addItem(Marzo);
listboxMeseFatturato.addItem(Aprile);
listboxMeseFatturato.addItem(Maggio);
listboxMeseFatturato.addItem(Giugno);
listboxMeseFatturato.addItem(Luglio);
listboxMeseFatturato.addItem(Agosto);
listboxMeseFatturato.addItem(Settembre);
listboxMeseFatturato.addItem(Ottobre);
listboxMeseFatturato.addItem(Novembre);
listboxMeseFatturato.addItem(Dicembre);

// Aggiunta dell'anno di fatturazione
var d = new Date();
var annoAttuale = parseInt(d.getFullYear());
listboxAnnoFatturato.addItem(+ annoAttuale);
listboxAnnoFatturato.addItem(+(annoAttuale-1));


var formpanel = myapp.createFormPanel()。setId(form);


var serverClickHandler = myapp.createServerClickHandler('GeneraFattura');
serverClickHandler.addCallbackElement(formpanel);
buttonCalcola.addClickHandler(serverClickHandler);

var serverClickHandlerStatus = myapp.createServerClickHandler('ChangeStatus');
serverClickHandlerStatus.addCallbackElement(formpanel);
buttonCalcola.addClickHandler(serverClickHandlerStatus);




formpanel.add(mygrid);
myapp.add(formpanel);
返回myapp;


$ b $ //禁用按钮以避免双击
函数的功能ChangeStatus(e){
var app = UiApp.getActiveApplication() ;
app.getElementById(labelLavoroInCorso)。setText(Attendere!Calcolo della richiesta di pagamento in corso ...);
app.getElementById(CalcolaFattura)。setEnabled(false);
返回应用程序;

$ / code>

现在我的问题是,当我点击网站中的按钮Calcola ,似乎函数GeneraFattura运行一些随机时间而不是1.



如果我在Google站点的脚本编辑器中运行相同的函数3给出的参数

  var valoreAssociazione =Volley; 
var valoreMese =May;
var valoreAnno =2012;

而不是上面的表格,它可以正常工作。



当我说它正常工作时,我的意思是在函数GeneraFattura中只有一行我复制电子表格。如果我从脚本编辑器运行脚本,则输出是电子表格的一个副本,如果我从站点运行脚本,我会得到5 6份电子表格。



你认为哪里是问题?为什么谷歌网站脚本编辑器执行和脚本执行嵌入在谷歌网站之间的不同行为?

预先感谢您

解决方案

这是一个我们正在积极研究的已知错误。运行超过30秒的处理程序最终可能会被调用3次。查看此问题:



http://code.google.com/p/google-apps-script-issues/issues/detail?id=1504


I have this situation. I had done a script few month ago that is still running on a google sites. The doGet Function is :

    function doGet(e) {
  var myapp = UiApp.createApplication();


 var mygrid = myapp.createGrid(5, 2);
  var listboxAssociazione=myapp.createListBox().setId("listboxAssociazione").setName("listboxAssociazione");
  var labelAssociazione=myapp.createLabel("Associazione").setId("Associazione");
  var listboxMeseFatturato=myapp.createListBox().setId("listboxMeseFatturato").setName("listboxMeseFatturato");
  var labelMeseFatturato=myapp.createLabel("Mese da fatturare").setId("Mese da fatturare");
  var listboxAnnoFatturato=myapp.createListBox().setId("listboxAnnoFatturato").setName("listboxAnnoFatturato");
  var labelAnnoFatturato=myapp.createLabel("Anno").setId("Anno");
  var buttonCalcola=myapp.createButton().setText("Calcola").setId("CalcolaFattura");
  var labelLavoroInCorso=myapp.createLabel("").setId("labelLavoroInCorso").setStyleAttribute('color', 'blue');


  mygrid.setWidget(0, 0,labelAssociazione);
  mygrid.setWidget(0, 1, listboxAssociazione);
  mygrid.setWidget(1, 0, labelMeseFatturato);
  mygrid.setWidget(1, 1, listboxMeseFatturato);
  mygrid.setWidget(2, 0, labelAnnoFatturato);
  mygrid.setWidget(2, 1, listboxAnnoFatturato); 
  mygrid.setWidget(3, 1, buttonCalcola);
  mygrid.setWidget(4, 1, labelLavoroInCorso);

  var p=DocsList.getFolders();
  var totcartelle = p.length;
  var trovato= false;
  var cartellaAssociazioni;
  for(var j=0;j<totcartelle && trovato==false;j++){
    var prova=p[j].getId();
    if(p[j].getId()=="0B-H4Ioaio5w5YTg3MGFkOWQtMzYzNy00ZTFhLWEzY2YtZTVlNzIwYWJhMmJm"){
    trovato=true;
     cartellaAssociazioni=p[j]; 
    }

  }

  var cartelle =cartellaAssociazioni.getFolders();
   var lunghezza = cartelle.length;
  for(var i = 0; i < lunghezza; i++) //these arrays are zero based it looks like
   { var prova=cartelle[i].getName();
    listboxAssociazione.addItem(prova); 
   }


  //Aggiunta dei mesi alla listbox
  listboxMeseFatturato.addItem("Gennaio");
  listboxMeseFatturato.addItem("Febbraio");
  listboxMeseFatturato.addItem("Marzo");
  listboxMeseFatturato.addItem("Aprile");
  listboxMeseFatturato.addItem("Maggio");
  listboxMeseFatturato.addItem("Giugno");
  listboxMeseFatturato.addItem("Luglio");
  listboxMeseFatturato.addItem("Agosto");
  listboxMeseFatturato.addItem("Settembre");
  listboxMeseFatturato.addItem("Ottobre");
  listboxMeseFatturato.addItem("Novembre");
  listboxMeseFatturato.addItem("Dicembre");

  //Aggiunta dell'anno di fatturazione
  var d= new Date();
  var annoAttuale=parseInt(d.getFullYear());
  listboxAnnoFatturato.addItem(""+annoAttuale);
  listboxAnnoFatturato.addItem(""+(annoAttuale-1));


  var formpanel=myapp.createFormPanel().setId("form");


  var serverClickHandler = myapp.createServerClickHandler('GeneraFattura');
  serverClickHandler.addCallbackElement(formpanel);
  buttonCalcola.addClickHandler(serverClickHandler);

  var serverClickHandlerStatus = myapp.createServerClickHandler('ChangeStatus');
  serverClickHandlerStatus.addCallbackElement(formpanel);
  buttonCalcola.addClickHandler(serverClickHandlerStatus);




  formpanel.add(mygrid);
  myapp.add(formpanel);
  return myapp;
}


//Function to disable the button to avoid double click
function ChangeStatus(e){
  var app = UiApp.getActiveApplication();
  app.getElementById("labelLavoroInCorso").setText("Attendere! Calcolo della richiesta di pagamento in corso...");
  app.getElementById("CalcolaFattura").setEnabled(false);
  return app;
}

Now my problem is that when i click the button "Calcola" in the site, it seems that the function "GeneraFattura" runs a number of random times instead of 1.

If i run the same function from the script editor in Google site with the same 3 parameter given by me

var valoreAssociazione = "Volley";
var valoreMese="May";
var valoreAnno = "2012";

instead from the form above, it works correctly.

When i say it works correctly i mean that in the function "GeneraFattura" there is only one line where i copy a spreadsheet. If i run the script from the script editor the output is one copy of the spreadsheet, if i run the script from the sites i get 5 6 copy of the spreadsheet.

Where do you think is the problem??Why a different behaviour between google sites script editor execution and the script execution embedded in the google site??

Thank you in advance

解决方案

This is a known bug that we are actively working on. Handlers that run more than 30 seconds may end up being called up to 3 times. See this issue:

http://code.google.com/p/google-apps-script-issues/issues/detail?id=1504

这篇关于执行脚本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆