2012-07-03 230 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個服務器處理器,你不能確定哪一個會先執行。由於立即響應,它也提供了更好的用戶體驗(嗯,這是我的意見;-)