google-apps-script - 如何在谷歌日历插件上获取输入值?
问题描述
我正在为 Google 日历编写我的第一个插件,但我无法从输入字段或日期选择器中获取值。
我创建了一张带有几个日期选择器(事件开始日期和结束日期)、一个文本输入(用于事件标题)和一个按钮的卡片。我想要做的是单击一个按钮后,我想获取文本输入的输入值并(现在)记录它。
这就是我所拥有的:
var card = CardService.newCardBuilder();
var textInputTitle = CardService.newTextInput()
.setFieldName("text_input_title")
.setTitle("Title for editor");
function onHomepage(e) {
return createCard(e.hostApp, true);
}
function createCard(text) {
// Create action button for submitting entered data
var action = CardService.newAction()
.setFunctionName('onCreateEvent')
.setParameters({text: text});
var button = CardService.newTextButton()
.setText('Create event')
.setOnClickAction(action)
.setTextButtonStyle(CardService.TextButtonStyle.FILLED);
var buttonSet = CardService.newButtonSet()
.addButton(button);
var startDateTimePicker = CardService.newDateTimePicker()
.setTitle("Event start date")
.setFieldName("date_time_field_start")
.setValueInMsSinceEpoch(new Date().getTime())
.setTimeZoneOffsetInMins(+2 * 60)
.setOnChangeAction(CardService.newAction()
.setFunctionName("handleDateTimeChange"));
var endDateTimePicker = CardService.newDateTimePicker()
.setTitle("Event end date")
.setFieldName("date_time_field_end")
.setValueInMsSinceEpoch(new Date().getTime())
.setTimeZoneOffsetInMins(+2 * 60)
.setOnChangeAction(CardService.newAction()
.setFunctionName("handleDateTimeChange"));
var section = CardService.newCardSection().setHeader("I am section header")
.addWidget(startDateTimePicker)
.addWidget(endDateTimePicker)
.addWidget(textInputTitle)
.addWidget(buttonSet);
card.addSection(section);
return card.build();
}
function onCreateEvent(e){
Logger.log("Text input%s ",JSON.stringify(e) );
}
我试图记录 textInputs 值,但我得到的只是空值。我还检查了Google 应用脚本,gmail 插件获取解决类似问题的 TextInput 值,但我不知道e.formInput
是从哪里来的。
更新添加我的清单文件
{
"timeZone": "America/New_York",
"dependencies": {
"enabledAdvancedServices": [{
"userSymbol": "Calendar",
"serviceId": "calendar",
"version": "v3"
}]
},
"exceptionLogging": "STACKDRIVER",
"oauthScopes": ["https://www.googleapis.com/auth/calendar.addons.execute",
"https://www.googleapis.com/auth/calendar",
"https://www.googleapis.com/auth/script.locale"
],
"runtimeVersion": "V8",
"addOns": {
"common": {
"name": "event creator",
"logoUrl": "https://www.gstatic.com/images/icons/material/system/1x/calendar_today_black_48dp.png",
"useLocaleFromApp": true,
"homepageTrigger": {
"runFunction": "onHomepage",
"enabled": true
}
},
"calendar": {
"eventOpenTrigger": {
"runFunction": "onCalendarEventOpen"
}
}
}
}
解决方案
问题
访问事件对象的formInput
/formInputs
属性。
事件处理
要了解formInputs
道具的位置,您需要了解附加组件如何处理事件:
- 每个可以交互的小部件类都可以分配一个
Action
实例; Action
有一个setFunctionName()
在触发动作时执行的回调(由 设置);- 当一个动作被触发时,一个事件对象被构造并作为它的第一个参数传递给分配给的函数
Action
。 - 此事件对象包含元数据、传递给回调的自定义参数(由 添加
setParameters()
)以及所需的formInput
和formInputs
字段。
应用于问题
如果我正确理解了您的代码的意图,您将可以在onCreateEvent(e)
按下按钮后调用时访问提交的数据。请注意,DateTimePicker
s 将它们的值作为嵌套对象返回。
参考
笔记
- 您可以链接回调并尽可能多地传递事件对象(但请确保在 30 秒内返回响应,否则您将超时),请参阅我对类似问题的旧答案之一。
- 在调用回调之前不会填充事件对象,因此您无法从编辑器或本地运行或调试它(除非您只是模拟事件对象 - 它有据可查)
推荐阅读
- angular - 根据状态更改多垫子进度条颜色?
- java - 将随机值分配给数组的问题
- python - 我不懂简单的二进制解码器代码。这段代码如何运作良好?
- r - R法线图中的阴影
- r - 带有 nginx/Ubuntu 20.04.1 和自定义域的闪亮应用程序/闪亮服务器
- python - 尝试在 Raspberry Pi 3 上使用旧版本的 Praw 时出错
- java - WebSphere 9 - com.ibm.websphere.management.exception.AdminException:
- android - Okhttp 总是返回错误 404,但在 windows 上的 chrome 中完美运行
- php - PHP 钠解密返回 False
- javascript - 无法使用 phantomjs 加载 Instagram 登录页面