2012-07-03 52 views
1

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

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; 
} 

现在我的问题是,当我在网站上点击按钮“Calcola”,似乎功能“GeneraFattura”跑一定数量的随机时间而不是1

如果我从上面的表格所填报的

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

,而不是相同的3个参数运行在谷歌网站上的脚本编辑器相同的功能,它工作正常。

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

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

预先感谢您

回答

0

不知道这是你的问题的实际原因,但该方法createServerClickHandler() 是在list of deprecated members所以我建议更换为推荐。

应该是这样的:(当然对于两个处理器;-)相同的修改

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

注:我还建议另一种方法,以避免在使用客户端处理您的按钮多个点击。这可能是这样的:

//Client Handler to disable the button to avoid double click (insert in the UI definition function) 
     var msg = app.getElementById("labelLavoroInCorso").setText("Attendere! Calcolo della richiesta di pagamento in corso...").setVisible(false); 
     var Clienthandler = app.createClientHandler() 
     .forEventSource().setEnabled(false); 
     .forTargets(msg).setVisible(true); 
     buttonCalcola.addClickHandler(Clienthandler) 
    // then at the end of the serverhandler function you will have to re-enable the button and setVisible(false) the message 

编辑:客户端处理器的interrest是它有立竿见影的效果,当你使用2个服务器处理器,你不能确定哪一个会先执行。由于立即响应,它也提供了更好的用户体验(嗯,这是我的意见;-)