0

我正在构建一个与 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 进行完全刷新,以便即使再次导航离开和返回,它包含的下拉列表将代表从电子表格中获取的完全更新的值列表?

非常感谢任何帮助解决这个问题。

4

0 回答 0