0

グリッドに情報が入力された後に電子メールを送信できるように、このスクリプトを作成しました。電子メールが送信される前に、情報が正しい場合にのみ続行するようにユーザーに警告する別の画面が表示されます。最後に、スクリプトは、ユーザーが入力した情報を含む電子メールを私に送信します。問題はここにあります。電子メールを受信したとき、スクリプトが置き換えると思われるフィールドが未定義として表示され、情報がありません。ここで何が間違っているかについてのアイデアはありますか?? ありがとうございました!

function runmyapp() {
 var doc = SpreadsheetApp.getActiveSpreadsheet();
var app = UiApp.createApplication().setTitle('Title 1');
  var grid = app.createGrid(4, 5);
  grid.setWidget(0, 0, app.createLabel('Time '));
  grid.setWidget(0, 1, app.createTextBox().setName('Time'));
  grid.setWidget(1, 0, app.createLabel('Minutes'));
  grid.setWidget(1, 1, app.createTextBox().setName('Minutes'));
  grid.setWidget(2, 0, app.createLabel('Enter Name'));
  grid.setWidget(2, 1, app.createTextBox().setName('Name'));
  grid.setWidget(3, 0, app.createLabel('Email'));
  grid.setWidget(3, 1, app.createTextBox().setName('email'));
  var panel = app.createVerticalPanel();
  panel.add(grid);

  var button = app.createButton('Submit').setId("button");
  var handler2 = app.createServerHandler('dis');
  handler2.addCallbackElement(grid);
  button.addClickHandler(handler2); 
  var handler = app.createServerHandler('disc');
  handler.addCallbackElement(grid);
  button.addClickHandler(handler);   

  // Add the button to the panel and the panel to the application, then display the                              application app
    panel.add(button);
    app.add(panel);
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  spreadsheet.show(app);
  }

function dis(e){
 var app = UiApp.getActiveApplication();
   app.getElementById("button").setText("Request is in process, please     wait!").setEnabled(false);
   return app;
   }; 

function disc(e){
   var app = UiApp.getActiveApplication();
   var html1 = app.add(app.createHTML("<p><p>Hello Expert,</p>"+
"<p>By clicking OK you agree that your information is correct</p>");
    var button = app.createButton('Ok').setId("button");
    app.add(button);
    var handler2 = app.createServerHandler('gsnot');
    button.addClickHandler(handler2); 
    var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  spreadsheet.show(app);
  return app;}




  function gsnot(e) {
    var advancedArgs = {bcc:e.parameter.email};
    var emailSubject = "Subject";
    var address ="albdominguez25@gmail.com";

    var emailTemplate     =SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Templates").getRange("A1").getValue(    ) ; 
    emailTemplate = emailTemplate.replace("TIME", e.parameter.Times).replace("MIN",     e.parameter.Minutes).replace("EXP", e.parameter.Name);   

    MailApp.sendEmail(address, emailSubject, emailTemplate, advancedArgs);

    Browser.msgBox("Your Email has been sent!");

    var app = UiApp.getActiveApplication();
    app.close();
    // The following line is REQUIRED for the widget to actually close.
    var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  spreadsheet.show(app);
  }
4

2 に答える 2

1

ヘンリケの答えを最高のものにしてくださいdisc(e)次のように関数を変更してみることができます:

function disc(e){
   var app = UiApp.getActiveApplication();
   var html1 = app.add(app.createHTML("<p><p>Hello Expert,</p>"+
"<p>By clicking OK you agree that your information is correct</p>"));
    var grid = app.getElementById('grid')
    var button = app.createButton('Ok').setId("button");
    app.add(button);
    var handler3 = app.createServerHandler('gsnot');// use a different name to avoid confusion
    handler3.addCallbackElement(grid);
    button.addClickHandler(handler3); 
  return app;}

また、この行のコードにはタイプミスがあります:

emailTemplate = emailTemplate.replace("TIME", e.parameter.Times).replace("MIN",     e.parameter.Minutes).replace("EXP", e.parameter.Name);   

Time元の名前の末尾に「s」がありません! ;)

最後に、私が電話をかけない場合show(app)discUI は確認中にデータの検証を維持します... (しかし、それは選択の問題です ;-)

于 2012-12-05T13:49:58.673 に答える
1

ウィジェットの値を表示するには、それ (または親パネル) をハンドラーe.parameterに追加する必要があります。callback elementこのような:

function runmyapp() {
  //...
  var grid = app.createGrid(4, 5).setId('grid');
  //...
}

function disc(e){
  //...
  var grid = app.getElementById('grid');
  var handler2 = app.createServerHandler('gsnot').addCallbackElement(grid);
  //...
}
于 2012-12-05T10:45:19.797 に答える