0

J'essaye de créer une boîte de dialogue de type 'Are You Sure' en utilisant une DialogBox. Ainsi, lorsque quelqu'un clique sur un bouton, une fenêtre contextuelle s'affiche avec des boutons oui/non pour que l'utilisateur confirme qu'il souhaite poursuivre l'action. Je l'ai compris la plupart du temps, mais je n'arrive pas à comprendre comment le faire apparaître sans rappeler à un gestionnaire de serveur.Script Google Apps Script DialogBox du clienthandler

J'ai essayé d'utiliser la commande show() avec un gestionnaire de client, mais cela ne fonctionne pas. J'ai essayé d'utiliser setVisibility() aussi, mais je n'ai pas pu le faire fonctionner non plus.

Je ne veux pas faire un aller-retour juste pour montrer la boîte de dialogue pour des raisons d'expérience utilisateur évidentes.

Quelqu'un a-t-il des suggestions?

Merci à l'avance Chris

+0

Avez-vous essayé une recherche sur ce forum? voici le résultat qui pourrait vous intéresser: http: //stackoverflow.com/search? q =% 5Bgoogle-apps-script% 5Ddialogbox –

+2

Lorsque vous posez une question ici, il est préférable de montrer votre travail. Bien sûr, vous avez utilisé la méthode show() - mais le fait que cela ne fonctionne pas vous dit que vous avez fait quelque chose de mal. Peut-être que vous avez oublié de retourner une instance d'interface utilisateur [comme ce gars] (http://stackoverflow.com/questions/17764814/google-script-unable-to-update-web-page/17788550#17788550). Peut-être que vous avez fait quelque chose d'autre qu'un autre groupe d'yeux pouvait voir. Comment saurions-nous jamais? – Mogsdad

Répondre

0

Voici un petit extrait que j'ai créé précisément pour cette raison. Il utilise cependant un gestionnaire de serveur ...

function MsgBox(message, title, id, buttons, handler, modal, autoHide){ 
    this.message=message; 
    this.title=title; 
    this.id=id; 
    this.buttons=buttons; 
    this.handler=handler; 
    this.modal=(modal)?true:false;//Default is false 
    this.autoHide=(autoHide)?new Boolean(autoHide):true;//Default is true 

    this.position={}; 
    this.position.top=100; 
    this.position.left=550; 
    this.position.width=400; 

    this.button={}; 
    this.button.ok={name:"Ok",id:"OK_BTN"}; 
    this.button.yes={name:"Yes",id:"YES_BTN"}; 
    this.button.no={name:"No",id:"NO_BTN"}; 
    this.button.cancel={name:"Cancel",id:"CANCEL_BTN"}; 
    this.button.retry={name:"Retry",id:"RETRY_BTN"}; 

    this.addButton=function(btn){ 
    try{ 
     if(this.buttons==undefined){this.buttons=[];} 
     if(typeof btn=="string"){btn=this.button[btn.toLowerCase()];}//If a string, convert to the intended object 
     if(btn.name==undefined){return this;}//Check if we've actualy got one of the buttons by checking one of it's properties. Exit if not. 
     this.buttons.push(btn); 
    }catch(err){ 
     Logger.log(err.message); 
    } 
    return this; 
    }; 

    this.show=function(e, app){ 
    if(app==undefined){app=UiApp.getActiveApplication();} 
    if(this.buttons==undefined){this.buttons=[this.button.ok];}//The default is one 'Ok' button 
    var dialog=app.createDialogBox(true,true).setId(this.id).setText(this.title); 
    dialog.setPopupPosition(this.position.left,this.position.top); 
    dialog.setGlassEnabled(this.modal); 
    dialog.setAutoHideEnabled(this.autoHide); 
    var basePanel=app.createVerticalPanel().setWidth(this.position.width+""); 
    basePanel.add(app.createLabel(this.message).setWordWrap(true).setStyleAttribute("padding", "10px"));//Add message 
    var buttonPanel=app.createHorizontalPanel().setId("ButtonPanel"); 
    basePanel.add(buttonPanel.setStyleAttribute("display", "block").setStyleAttribute("margin-left", "auto").setStyleAttribute("margin-right", "auto")); 
    var btnHandler=app.createServerHandler("msgBox_close").addCallbackElement(buttonPanel); 
    for(var i=0;i<this.buttons.length;i++){ 
     var btn=app.createButton(this.buttons[i].name, btnHandler).setId(this.buttons[i].id).setTag(this.id); 
     if(this.handler!=undefined){btn.addClickHandler(this.handler);} 
     buttonPanel.add(btn); 
    } 
    dialog.add(basePanel).show(); 
    return app; 
    }; 
} 

function msgBox_close(e, app){ 
    if(app==undefined){app=UiApp.getActiveApplication();} 
    var dialogId=e.parameter[e.parameter.source+"_tag"]; 
    app.getElementById(dialogId).hide(); 
    return app; 
} 

Voici un petit exemple pour l'utiliser.

var msgBox=new MsgBox("Testing 123...", "This is a test", "MyMsgBox"); 
msgBox.show(e, app); 

En utilisant le paramètre « _tag » pour faire référence à son propre ID vous faire un aller-retour propre avec peu de tracas.

Vous pouvez ajouter des boutons standard en appelant la fonction .addButton(). Exemple:

msgBox.addButton("yes").addButton("no"); 

En passant votre propre gestionnaire, vous pouvez appeler vos propres fonctions. Exemple:

function myOwnHandler(e, app){ 
    if(app==undefined){app=UiApp.getActiveApplication();} 
    if(e.parameter.source.indexOf("YES_BTN")!=-1){ 

    } 
    return app; 
} 
+0

Tim. Merci beaucoup pour ce code mec. Il m'a fallu un peu de temps pour comprendre ce que je voulais faire et savoir comment passer le conducteur, mais je l'ai réussi. Je pense que je vais m'en tenir au gestionnaire de serveur, et utiliser votre code, car il est beaucoup plus sophistiqué que ma tentative. À la vôtre, Chris. – ChrisG

+0

Tim, pour rendre la boîte de dialogue correctement modale Je pense que la ligne devrait être:

this.autoHide = (autoHide)? New Boolean (autoHide): false; // Par défaut est vrai

Ensuite, si vous passez false, il empêche le l'utilisateur fermant la boîte de dialogue en cliquant en dehors de celui-ci. – ChrisG

+0

ne peut pas tout à fait obtenir le coup de formatage de la réponse :) – ChrisG