0

最も単純なことを機能させるために、私は気が狂ってしまうような気がします!GoogleドライブのGoogleスプレッドシートにメーリングリストがあります。ユーザーが電子メールに含めたいメッセージの入力を求めるユーザーインターフェイスを作成しました。私のコードは次のようになります。

function startBulkEmailUI(e) {
  //create main form
  var app = UiApp.createApplication().setTitle('Send Email').setWidth(602).setHeight(402);
  var scrollPanel = app.createScrollPanel().setId('scrollPanel').setAlwaysShowScrollBars(true) ;
  var mainPanel = app.createVerticalPanel().setId('mainPanel');
  mainPanel.setStyleAttribute('border', '1px solid #C0C0C0').setWidth("100%").setHeight("100%");
  scrollPanel.add(mainPanel);
  //create panel for input boxes etc
  var inputPanel =     app.createVerticalPanel().setId('inputPanel').setWidth("100%").setHeight("100%").setSpacing(0);
  var messageLabel = app.createLabel('E-mail Message');
  var messageBox = app.createTextArea().setName('messageBox').setId('messageBox').setVisible(true).setWidth(400).setHeight(150);
  var attachmentLabel = app.createLabel('E-mail Attachment');
  var attachmentCheckBox = app.createCheckBox('Attach a file').setValue(false);
 inputPanel.add(messageLabel).add(messageBox).add(attachmentLabel).add(attachmentCheckBox);
  mainPanel.add(inputPanel).setCellHorizontalAlignment(inputPanel, UiApp.HorizontalAlignment.CENTER) ;
  inputPanel.setCellHorizontalAlignment(messageLabel, UiApp.HorizontalAlignment.CENTER);
  inputPanel.setCellHorizontalAlignment(messageBox, UiApp.HorizontalAlignment.CENTER);
  inputPanel.setCellHorizontalAlignment(attachmentLabel, UiApp.HorizontalAlignment.CENTER);
  inputPanel.setCellHorizontalAlignment(attachmentCheckBox, UiApp.HorizontalAlignment.CENTER);
  //add function buttons
  var buttonsPanel = app.createHorizontalPanel().setStyleAttribute('margin', '20px').setWidth(500);
  var closeButton = app.createButton('Close',app.createServerHandler('close_'));
  var sendButton = app.createButton('Send!').setId("sendButton");
  buttonsPanel.setId('buttonsPanel').add(closeButton).add(sendButton);
  mainPanel.add(buttonsPanel).setCellHorizontalAlignment(buttonsPanel, UiApp.HorizontalAlignment.CENTER);
  buttonsPanel.setCellHorizontalAlignment(closeButton, UiApp.HorizontalAlignment.CENTER).setCellHorizontalAlignment(sendButton, UiApp.HorizontalAlignment.CENTER);
  app.add(scrollPanel);
  //handlers
  var handlerSendEmails = app.createServerClickHandler('sendEmails');
  handlerSendEmails.addCallbackElement(inputPanel);
  sendButton.addClickHandler(handlerSendEmails);

  //show the form
  ss.show(app);

  return app;
}

function sendEmails(e) {
  var contactDetail = getContactDetail();
  var count = 0;
  var failed = 0;
  for (i in contactDetail) {
  var row = contactDetail[i];
  var emailAddress = row[9];

  var stuff = e.parameter.messageBox.value;
  Logger.log(e.parameter);
  var message = 'Hi, ' + row[4] + '\n\n' + 'This is a test!';       // Second column
  var subject = 'Test Email';
  try {
//      MailApp.sendEmail(emailAddress, subject, message);
      count = count+1;
    } catch(e) {
      failed = failed+1;
    }
  }
  var msg = stuff;
  Browser.msgBox('Debug Msg', msg, Browser.Buttons.OK);
}

ユーザーにテキストエリアに情報を入力してもらい、それをメールの本文として使用できるようにします。getTextがないことを発見したので、上記のコードのように見えるはずだという答えが何百も見つかりました。callbackhandlerを作成し、e.parameter.OBJECT_NAME.valueを使用してテキストを取得します。それは単に私にとってはうまくいきません、そして私は私が考えることができるすべての回避策を試しました。助言がありますか?私のコードに欠陥がありますか(私はそれが厄介であることを知っています...)?

4

1 に答える 1

0

ハンドラー関数でウィジェットの値を取得する「通常の」方法は形式でe.parameter.widgetNameあるため、この場合は単に使用する必要があります。

var stuff = e.parameter.messageBox; 「.value」がない場合、結果は文字列になります。

于 2013-03-24T07:44:13.753 に答える