0

更新: doGet 関数を追加しました。

登録プロセスに使用する Web アプリがあります。ユーザーが [登録] ボタンをクリックしたときにメールを送信する確認メールを作成しました。

私の質問は、電子メール フィールドが空白のままになっている場合、機能の実行を停止するにはどうすればよいですか? この時点でスクリプト全体を実行すると、電子メール アドレスを入力しないと [登録] をクリックするとエラー メッセージが表示されます。関数がエラーをスローしたくないので、まだ登録できるようにしたいです。

function doGet(e) {
 var app = UiApp.createApplication().setTitle('Education Registration');
  app.setStyleAttribute("background", "#DBE8C4");
var panel1 = app.createAbsolutePanel().setId('panel1');
  panel1.setHeight(900);
  panel1.setWidth(1500);

  //Register button

var dateSelection = app.createButton('Register').setSize(140, 40);
var loadingWait = app.createLabel('After clicking Register, please allow 5 - 30 seconds for the webpage to process the request.');
var clickHandler = app.createServerHandler("respondToDateSelection");
  dateSelection.addClickHandler(clickHandler);
  clickHandler.addCallbackElement(panel1);

//Email Handler
var emailHandler = app.createServerHandler("emailConfirmation");
  dateSelection.addClickHandler(emailHandler);
  emailHandler.addCallbackElement(panel1);

  return app;

}


function emailConfirmation(e) {
 var app = UiApp.getActiveApplication();

  app.getElementById('fNameText1');
  app.getElementById('lNameText1');
  app.getElementById('eAddressText1');
  app.getElementById('dataItemsLB');
  app.getElementById('aemailAddressText');

  var fNameText1 = e.parameter.fNameText1;
  var lNameText1 = e.parameter.lNameText1;
  var eAddressText1 = e.parameter.eAddressText1;
  var dataItemsLB = e.parameter.dataItemsLB;
  var aemailAddressText = e.parameter.aemailAddressText;

  var subject = "Class Registration Confirmation - " + fNameText1 + " " + lNameText1;
  var emailBody = "This is an Email Confirmation.";

            MailApp.sendEmail(eAddressText1, subject,
                 emailBody, {cc: aemailAddressText});


  return app;

}
4

1 に答える 1

0

それを行うには多くの方法があります。最も「エレガントな」方法は、おそらく関数でクライアントハンドラーバリデーターdoGetを使用することですが、それを示していませんでした...(電子メールには特定のバリデーターがあります)別の方法は最初は非表示e.parameter.eAddressText1で、有効な電子メールではないか空の場合に表示される UI の警告ラベルの場合、同じ条件がsendEmailコマンドに適用され、有効でない場合はスキップされ、UI に戻ります。

より正確な回答を可能にするために、doGet関数を自由に投稿してください。


編集: コードを投稿していただきありがとうございます。不完全であり、興味深い例にするためにいくつかの作業が必要でしたが、最終的にはこのコードで、clientHandlers、バリデーター、および電子メールアドレスの try/catch の使用を説明します...

これがコードです。展開とバージョン管理を避けるためにスプレッドシートで動作するように変更しました。これは単なるテストであり、それ以上のものではありません...

function doGet(e) {
 var app = UiApp.createApplication().setTitle('Education Registration');
  app.setStyleAttribute("background", "#DBE8C4");
  var panel0 = app.createFlowPanel().setId('panel0');
  var panel1 = app.createVerticalPanel().setId('panel1');
  var fNameText1=app.createTextBox().setName('fNameText1').setId('fNameText1');;
  var lNameText1=app.createTextBox().setName('lNameText1').setId('lNameText1');;
  var eAddressText1=app.createTextBox().setName('eAddressText1').setId('eAddressText1').setText('mail')
  var dataItemsLB=app.createTextBox().setName('dataItemsLB').setId('dataItemsLB');;
  var aemailAddressText=app.createTextBox().setName('aemailAddressText').setId('aemailAddressText').setText('mail');
  panel1.add(fNameText1).add(lNameText1).add(eAddressText1).add(dataItemsLB).add(aemailAddressText)
  panel0.add(panel1)

//Register button
  var dateSelection = app.createButton('Register').setSize(140, 40).setId('dateSelection');
  var loadingWait = app.createLabel('After clicking Register, please allow 5 - 30 seconds for the webpage to process the request.').setVisible(false).setId('loadingWait');
  var clickHandler = app.createServerHandler("respondToDateSelection").validateEmail(eAddressText1);
  dateSelection.addClickHandler(clickHandler);
  clickHandler.addCallbackElement(panel0);

//Email Handler
  var emailHandler = app.createServerHandler("emailConfirmation").validateEmail(eAddressText1);
  dateSelection.addClickHandler(emailHandler);
  emailHandler.addCallbackElement(panel1);

//client handlers
  var warning = app.createLabel('Please enter your email where necessary').setId('warning').setVisible(false).setStyleAttribute('background','yellow')
  var clientHandlerwait = app.createClientHandler().forTargets(loadingWait).setVisible(true).validateEmail(eAddressText1)
  var clientHandler1 = app.createClientHandler().validateNotEmail(eAddressText1)
    .forTargets(warning).setVisible(true).forEventSource().setStyleAttribute('color','red')
  var clientHandler2 = app.createClientHandler().validateNotEmail(aemailAddressText)
    .forTargets(warning).setVisible(true).forEventSource().setStyleAttribute('color','red')

  dateSelection.addClickHandler(clientHandlerwait).addClickHandler(clientHandler1).addClickHandler(clientHandler2)

  app.add(panel1.add(dateSelection).add(loadingWait).add(warning))
  SpreadsheetApp.getActive().show(app)
//  return app;
}

function respondToDateSelection(){
return
}

 function emailConfirmation(e) {
  var app = UiApp.getActiveApplication();
   app.getElementById('warning').setVisible(false);
   app.getElementById('dateSelection').setStyleAttribute('color','black')

  var fNameText1 = e.parameter.fNameText1;
  var lNameText1 = e.parameter.lNameText1;
  var eAddressText1 = e.parameter.eAddressText1;
  var dataItemsLB = e.parameter.dataItemsLB;
  var aemailAddressText = e.parameter.aemailAddressText;
  var subject = "Class Registration Confirmation - " + fNameText1 + " " + lNameText1;
  var emailBody = "This is an Email Confirmation.";
    try{
//            MailApp.sendEmail(eAddressText1, subject,emailBody, {cc: aemailAddressText});
        Utilities.sleep(500)// simulate a duration to read the message
        app.getElementById('loadingWait').setText('mail sent').setVisible(true)
}catch(err){
        app.getElementById('loadingWait').setText('error sending mail').setVisible(true)
}
  return app;
}
于 2013-01-09T20:42:29.420 に答える