动态添加部分到卡片

Add sections dynamically to card

我是 Apps 脚本的新手,有点迷路,有没有办法在卡片上动态添加一个部分?我正在尝试这个:

  var card = CardService.newCardBuilder()
      .setHeader(peekHeader)
      .addSection(section).build();

  card.addSection(sectionTo);

我得到 TypeError: card.addSection is not a function

如果我尝试:

  var card = CardService.newCardBuilder()
      .setHeader(peekHeader)
      .addSection(section);

  card.addSection(sectionTo).build();

我收到另一个错误:

The value returned from Apps Script has a type that cannot be used by the add-ons platform. Also make sure to call build on any builder before returning it. Value: values {
  struct_value {
  }
}

更新:

部分定义如下:

  var section = CardService.newCardSection()
                  .addWidget(CardService.newTextParagraph().setText("The email is from: " + from));
  var sectionTo = CardService.newCardSection()
                  .addWidget(CardService.newTextParagraph().setText("To: " + to));

卡片一旦构建,很遗憾无法再对其进行修改。

如果例如在您想要更改卡片内容的活动中 - 您需要构建并 return 一张新卡片来替换旧卡片。

构建卡片的正确方法是

  var card = CardService.newCardBuilder() 
  .setHeader(peekHeader)
  .addSection(section)
  .addSection(sectionTo)//; // or using section card.addSection(sectionTo); // or using section 
  .build();

如果您尝试申请

card.addSection(sectionTo).build();

 var card = CardService.newCardBuilder()
      .setHeader(peekHeader)
      .addSection(section);

变量 card 将代表一个部分 - 将一个部分添加到一个部分将会出错。

正如@ziganotschka 所说,建卡后,此卡无法修改。当您执行 CardService.newCardBuilder() 时,您正在创建类型为 CardBuilder 的对象,但是当您执行 built() 时,return 对象的类型为 Card,因此您不能再对我的对象卡执行 .addSection(类型为 Card)。

在第二个代码中,addSection 已正确完成,但由于 .build() 中的 return 对象未保存在任何地方,之后我 returning 卡片对象(仍键入 CardBuilder),它导致了第二个错误。这就是为什么,现在我明白了:

The value returned from Apps Script has a type that cannot be used by the add-ons platform. Also make sure to call build on any builder before returning it.