我正在构建一个与 Google 表格一起使用的插件,它有一个根主页和 3 个子卡。
卡 1 根据具有相关订单号(整数列表)的工作表数据为订单生成文件夹、文件和文档。
卡片 2 包括一个下拉菜单,该菜单在卡片创建时从电子表格选项卡上的列中的值(订单号)填充,当生成任何文档/订单时(使用卡片 1),它本身通过函数调用进行更新。
我要做的是在使用卡 1 创建新文档时更新卡 2 上的下拉菜单中包含订单号的值。生成文档时,我已成功使用新订单号更新电子表格选项卡,但我无法使用新订单号更新插件下拉列表(正确 - 见下文)。
据我了解,卡片无法刷新,只能完全更换,这应该没问题,但我无法让它工作。我已经看到了这个问题,但它似乎并没有用新的下拉数据完全替换/刷新 Card 2。
我用这个构建插件:
function startAddon(e) {
return [createGenerateDocsCard(), createManageOrdersCard(), createResetSheetCard()];
}
包含下拉菜单的相关卡片:
function createManageOrdersCard() {
//Get list of Order Numbers from sheet
let orderList = ss.getRange("C2!A1:A1000").getDisplayValues().filter(String);
//Generate dropdown using order numbers from sheet
let orderDropdown = generateDropdown("Order", "CHOOSE EXISTING ORDER TO LOAD:", previousSelected, orderList);
let manageOrdersCard = CardService
.newCardBuilder()
.setHeader(
CardService.newCardHeader()
.setTitle(' MANAGE ORDERS')
.setSubtitle('Switch between existing Order sheets')
)
.addSection(
CardService.newCardSection()
.addWidget(
//Insert generated dropdown
orderDropdown
.setOnChangeAction(CardService.newAction().setFunctionName("handleOrderDropdown"))
)
.addWidget(CardService.newTextButton()
.setText("SYNC ORDER NUMBERS")
.setTextButtonStyle(CardService.TextButtonStyle.FILLED)
.setOnClickAction(CardService.newAction().setFunctionName('syncOrderNumbersButton'))
)
)
return manageOrdersCard.build();
}
生成下拉菜单的函数:
function generateDropdown(fieldName, fieldTitle, previousSelected, items) {
var selectionInput = CardService.newSelectionInput().setTitle(fieldTitle)
.setFieldName(fieldName)
.setType(CardService.SelectionInputType.DROPDOWN);
items.forEach((item, index) => {
selectionInput.addItem(item[0], item[0], item[0] == previousSelected);
Logger.log(previousSelected);
})
return selectionInput;
}
我用来尝试用新的卡片完全替换卡片的代码,包括更新的下拉条目:
function syncOrderNumbersButton(e) {
syncOrderNumbers();
//replace the current outdated card with the newly created card.
return CardService.newNavigation().updateCard(createManageOrdersCard());
}
目前,我正在使用一个按钮进行测试,开始使用syncOrderNumbers()
(有效)将更新的订单列表插入电子表格,然后(尝试)重新创建卡片 2,该卡片应该具有新的下拉条目。最终,此过程将在创建新订单文件时自动发生,无需单击按钮。
发生的事情是卡 2似乎已更新,并且新订单号确实显示在下拉列表中,但是当我导航(使用插件顶部的后退按钮)到根卡(插件主页)然后再次导航到卡 2 时,下拉菜单中不再有之前显示的订单号。
运行时createManageOrdersCard()
,该generateDropdown()
函数在其中,所以我不明白为什么没有创建/显示下拉列表的刷新列表,以及为什么它似乎恢复为从首次加载插件时使用列表?
是否可以对 Card 2 进行完全刷新,以便即使再次导航离开和返回,它包含的下拉列表将代表从电子表格中获取的完全更新的值列表?
非常感谢任何帮助解决这个问题。