我正在为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值,但我得到的只是空值。我也检查了谷歌应用程序脚本,gmail addon获得了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"
}
}
}
}
更改Logger.log("Text input%s ",JSON.stringify(e.formInput.text_input_title));
为console.log("Text input%s ",JSON.stringify(e.formInput.text_input_title));
:
记录器未显示任何内容,因此将其更改为控制台日志是解决方案。要在创建事件后查看控制台日志,您必须转到脚本编辑器,然后转到视图 -> Stackdriver Logging- > Apps Script Dashboard,在那里您将看到最后执行的内容以及控制台日志的结果(日志可能需要几秒钟的时间出现):
如您所见,结果是一个类似JSON的结果:
{
"clientPlatform":"web",
"userLocale":"en",
"parameters":{
"text":"calendar"
},
"userTimezone":{
"offSet":"3600000",
"id":"Europe/Madrid"
},
"formInputs":{
"date_time_field_end":[
{
"hasDate":true,
"hasTime":true,
"msSinceEpoch":1581478200000
}
],
"date_time_field_start":[
{
"msSinceEpoch":1581516320343,
"hasDate":true,
"hasTime":true
}
],
"text_input_title":[
"This is a test title"
]
},
"formInput":{
"date_time_field_end":{
"hasTime":true,
"msSinceEpoch":1581478200000,
"hasDate":true
},
"date_time_field_start":{
"hasDate":true,
"hasTime":true,
"msSinceEpoch":1581516320343
},
"text_input_title":"This is a test title"
},
"hostApp":"calendar",
"userCountry":"",
"commonEventObject":{
"parameters":{
"text":"calendar"
},
"platform":"WEB",
"formInputs":{
"date_time_field_end":{
"dateTimeInput":{
"hasTime":true,
"msSinceEpoch":1581478200000,
"hasDate":true
}
},
"date_time_field_start":{
"dateTimeInput":{
"hasDate":true,
"hasTime":true,
"msSinceEpoch":1581516320343
}
},
"text_input_title":{
"stringInputs":{
"value":[
"This is a test title"
]
}
}
},
"hostApp":"CALENDAR",
"timeZone":{
"id":"Europe/Madrid",
"offset":3600000
},
"userLocale":"en"
},
"calendar":{
}
}
现在,如果我们控制台日志->,console.log("Text input",JSON.stringify(e.formInput.text_input_title));
我们可以看到:
非常感谢您展示这个!我一直在寻找很长一段时间,以便能够查看正在传递的事件对象。我以为Logger是Apps脚本中console.log的替代品。