1

我正在尝试创建一个 Google Workspace 插件,但在尝试访问我的第一张卡的输入值时不断收到此错误:

TypeError: Cannot read property 'stringInputs' of undefined

我不确定我做错了什么。这是我第一次尝试 GWAO,而且我不是编码员,所以我认为这很愚蠢。

该应用程序应该做什么的背景:

获取文本输入并将其应用于公司电子邮件地址。获取选定的下拉输入并获取关联的日历 ID。获取日期输入并将电子邮件添加到所选日历上日期范围内的所有事件。

这是代码 - 一些细节被占位符替换:

function cardHomepage() {
    let cardHeader1 = CardService.newCardHeader()
        .setTitle('Welcome to the training scheduler!')
        .setSubtitle('Select what you\'d like to do')
        .setImageUrl(
            '<IMAGE_URL>'
        )
        .setImageStyle(CardService.ImageStyle.CIRCLE);

    let cardSection1ButtonList1Button1Action1 = CardService.newAction()
        .setFunctionName('addAllCard');

    let cardSection1ButtonList1Button1 = CardService.newTextButton()
        .setText('Add someone to all trainings')
        .setTextButtonStyle(CardService.TextButtonStyle.TEXT)
        .setOnClickAction(cardSection1ButtonList1Button1Action1);

    let cardSection1ButtonList1Button2Action1 = CardService.newAction()
        .setFunctionName('TODO');

    let cardSection1ButtonList1Button2 = CardService.newTextButton()
        .setText('Add someone to one training')
        .setTextButtonStyle(CardService.TextButtonStyle.TEXT)
        .setOnClickAction(cardSection1ButtonList1Button2Action1);

    let cardSection1ButtonList1Button3Action1 = CardService.newAction()
        .setFunctionName('TODO');

    let cardSection1ButtonList1Button3 = CardService.newTextButton()
        .setText('Remove someone from all trainings')
        .setTextButtonStyle(CardService.TextButtonStyle.TEXT)
        .setOnClickAction(cardSection1ButtonList1Button3Action1);

    let cardSection1ButtonList1Button4Action1 = CardService.newAction()
        .setFunctionName('TODO');

    let cardSection1ButtonList1Button4 = CardService.newTextButton()
        .setText('Remove someone from one training')
        .setTextButtonStyle(CardService.TextButtonStyle.TEXT)
        .setOnClickAction(cardSection1ButtonList1Button4Action1);

    let cardSection1ButtonList1 = CardService.newButtonSet()
        .addButton(cardSection1ButtonList1Button1)
        .addButton(cardSection1ButtonList1Button2)
        .addButton(cardSection1ButtonList1Button3)
        .addButton(cardSection1ButtonList1Button4);

    let cardSection1 = CardService.newCardSection()
        .addWidget(cardSection1ButtonList1);

    let card = CardService.newCardBuilder()
        .setHeader(cardHeader1)
        .addSection(cardSection1)
        .build();
    return card;
}



// Add to all card
function addAllCard() {

    let cardHeader1 = CardService.newCardHeader()
        .setTitle('Add to all')
        .setSubtitle('Add someone to all trainings')
        .setImageUrl(
            '<IMAGE_URL>'
        )
        .setImageStyle(CardService.ImageStyle.SQUARE);

    let cardSection1TextInput1 = CardService.newTextInput()
        .setFieldName('text')
        .setTitle('LDAP')
        .setMultiline(false);

    let cardSection1SelectionInput1 = CardService.newSelectionInput()
        .setFieldName('trainCal')
        .setTitle('Training calendar to use')
        .setType(CardService.SelectionInputType.DROPDOWN)
        .addItem('CS Trainings', '<CALENDAR_ID>', false)
        .addItem('PL Trainings', '<CALENDAR_ID>', false)
        .addItem('Test Cal', '<CALENDAR_ID>', false);

    let cardSection1Divider1 = CardService.newDivider();

    let cardSection1DecoratedText1 = CardService.newDecoratedText()
        .setTopLabel('Date range')
        .setText(
            'Select the date range for which to add the person to trainings.')
        .setWrapText(true);

    let cardSection1DatePicker1 = CardService.newDatePicker()
        .setFieldName('startDate')
        .setTitle('Range start date');

    let cardSection1DatePicker2 = CardService.newDatePicker()
        .setFieldName('endDate')
        .setTitle('Range end date');

    let cardSection1ButtonList1Button1Action1 = CardService.newAction()
        .setFunctionName('addToAllCS');

    let cardSection1ButtonList1Button1 = CardService.newTextButton()
        .setText('Schedule')
        .setBackgroundColor('#1967d2ff')
        .setDisabled(false)
        .setTextButtonStyle(CardService.TextButtonStyle.FILLED)
        .setOnClickAction(cardSection1ButtonList1Button1Action1);

    let cardSection1ButtonList1 = CardService.newButtonSet()
        .addButton(cardSection1ButtonList1Button1)

    let cardSection1 = CardService.newCardSection()
        .addWidget(cardSection1TextInput1)
        .addWidget(cardSection1SelectionInput1)
        .addWidget(cardSection1Divider1)
        .addWidget(cardSection1DecoratedText1)
        .addWidget(cardSection1DatePicker1)
        .addWidget(cardSection1DatePicker2)
        .addWidget(cardSection1ButtonList1);

    let card = CardService.newCardBuilder()
        .setHeader(cardHeader1)
        .addSection(cardSection1)
        .build();
    return card;
}


// Adds a user to all events on the chosen calendar within a specific timeframe.
function addToAllCS(e){ 

let ldap = e.commonEventObject.formInputs.text[""].stringInputs.value[0];
let calendar = e.commonEventObject.formInputs.trainCal[""].stringInputs.value;
let startD = e.commonEventObject.formInputs.startD[""].dateInput;
let endD = e.commonEventObject.formInputs.endD[""].dateInput;

let guestEmail = ldap + "@<COMPANY_DOMAIN>"; // Email address of the person to add.
let cal = CalendarApp.getCalendarById(calendar); // Calendar to use.
let calEvents = cal.getEvents(new Date(startD), new Date(endD)); // Gets all of the events within the timeframe.
console.log(calEvents.length); // Checks how many events it found.
for (var i = 0; i < calEvents.length; i++) { // Loops through all events and adds the person to each of them.
  let event = calEvents[i];
  event.addGuest(guestEmail);
}
}
4

1 回答 1

1

与一位发现 [""] 不再需要的同事交谈。这是可行的:

    let ldap = e.commonEventObject.formInputs.text.stringInputs.value[0];
    let calendar = e.commonEventObject.formInputs.trainCal.stringInputs.value;
    let startD = e.commonEventObject.formInputs.startD.dateInput;
    let endD = e.commonEventObject.formInputs.endD.dateInput;
于 2021-08-19T22:17:23.113 回答