从HtmlService输入修改现有的日历事件

时间:2019-02-12 22:51:02

标签: html google-apps-script web-applications google-calendar-api

我正在尝试向Google日历活动添加“注册”链接,点击该链接后,系统会通过HtmlService提示用户提交其电子邮件地址。然后将他们的电子邮件地址添加到活动中。

这里是a similar example。我想做不同的事情是使用HtmlService来让用户输入他们的电子邮件地址,然后将其发送回GAS以添加到有问题的日历事件中。这样,他们可以选择所需的电子邮件(而不是Session.getActiveUser()。getEmail()返回的任何电子邮件)进行注册。 (通过注册,我的意思是被添加到邀请对象列表中-他们仍然必须接受邀请,但这没关系)。

这可能吗?我没有看到任何这样的例子,所以也许有更好的方法?

我开始撕掉我的小头发。我已经包含了最新的示例代码,其中将事件对象传递到HTML模板中。它没有引发错误,但是也没有起作用。先感谢您!!

Code.gs:

function doGet(event) {
  //    // shorten the event parameter path;
 var param = event.parameter;
//    // get the calendar event id passed in the query parameter
 var eventId = param.eId;
 var calId = param.calId;
 var cal = CalendarApp.getCalendarById(calId);
 var t = HtmlService.createTemplateFromFile('Index');
 t.eObj = cal.getEventById(eventId);
 return t.evaluate();
}

function addEmail(emObj,myForm){
  var guestEmail = myForm.user;
  emObj.addGuest(guestEmail)
}

和Index.html:

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
    <script>
      function update() {
        alert("Success!");
      }

    </script>
  </head>
  <body>
    <form id="myForm">
      <input id="userEmail" name="user" type="text" />
      <input type="button" value="Submit" onClick="google.script.run.withSuccessHandler(update).addEmail(eObj,this.form)" />
    </form>
 </body>
</html>

1 个答案:

答案 0 :(得分:0)

您的html文件中没有脚本,因此您无需评估模板。我为calId和eventId添加了另外2个输入字段。在投放之前,它们已在HTML中替换。然后将事件ID和Cal ID传递回表单对象。

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
    <script>
      function update() {
        alert("Success!");
      }

    </script>
  </head>
  <body>
    <form id="myForm">

      <input id="userEmail" name="user" type="text" />

      <input name="calId" type="text" style="display:none"
        value="zzz_calID_zzz"/>
      <input name="eventId" type="text" style="display:none"
        value="zzz_eventID_zzz"/>


      <input type="button" value="Submit" onClick="google.script.run
            .withSuccessHandler(update)
            .addEmail(this.form)" />
    </form>
 </body>
</html>

doGet:

function doGet(event) {
  //    // shorten the event parameter path;
 var param = event.parameter;
//    // get the calendar event id passed in the query parameter
 var eventId = param.eId;
 var calId = param.calId;

 var t = HtmlService.createHtmlOutputFromFile('Index').getContent();

 t = t.replace('zzz_calID_zzz',calId);
 t = t.replace('zzz_eventID_zzz',eventID);

 return HtmlService.createHtmlOutput(t);
}

服务器代码:

function addEmail(myForm){

  var cal = CalendarApp.getCalendarById(myForm.calId);
  var event = cal.getEventById(myForm.eventId);
  var guestEmail = myForm.user;

  event.addGuest(guestEmail)
}