Search code examples
google-apps-scriptdropdowngoogle-workspace-add-ons

cardservice and additem for dropdown list: how to add an array?


I would like to add an array of elements in cardservice section "additem". I'm not familiar with cardservice.

   function myFunction() {
var action = CardService.newAction().setFunctionName('notificationCallback');
var pratiche =["ciaone","ciao","ciao2","ciao3"]


return CardService
     .newCardBuilder()
     .setHeader(
         CardService.newCardHeader()
             .setTitle('Elenco operazioni rapide')
             .setSubtitle('Inserisci rapidamente gli eventi con questi tasti'))

     .addSection(
          CardService.newCardSection()
              .addWidget(CardService.newSelectionInput().setType(CardService.SelectionInputType.DROPDOWN)
              .setTitle("A group of checkboxes. Multiple selections are allowed.")
                 .setFieldName("CLIENTI")
                 .addItem(pratiche, "checkbox_one_value", false)


                 .setOnChangeAction(CardService.newAction().setFunctionName('notificationCallback')))
                 .addWidget(CardService.newSelectionInput().setType(CardService.SelectionInputType.DROPDOWN)
              .setTitle("A group of checkboxes. Multiple selections are allowed.")
                 .setFieldName("PRATICHE")
                 .addItem("Elenco clienti2", "checkbox_two_value", false)
              .setOnChangeAction(CardService.newAction().setFunctionName('inseriscievento')))
              .addWidget(CardService.newTextButton().setText('Telefonata').setTextButtonStyle(CardService.TextButtonStyle.FILLED).setOnClickAction(action))
              .addWidget(CardService.newTextButton().setText('Incontro').setTextButtonStyle(CardService.TextButtonStyle.FILLED).setOnClickAction(action)))



     .build();
     }

Peraphs it is easy, but...not runs. I've tried also pratiche[]...not runs...I also thought to insert a for cycle for additem, but it's not run.


Solution

    • You need to add each dropdown option as a separate item
    • If you want to use checkboxes instead of a dropdown - please use CardService.SelectionInputType.CHECK_BOX

      instead of

      CardService.SelectionInputType.DROPDOWN

    Sample

    function myFunction() {
      var action = CardService.newAction().setFunctionName('notificationCallback');
      var pratiche =["ciaone","ciao","ciao2","ciao3"]
    
    
      return CardService
      .newCardBuilder()
      .setHeader(
        CardService.newCardHeader()
        .setTitle('Elenco operazioni rapide')
        .setSubtitle('Inserisci rapidamente gli eventi con questi tasti'))  
      .addSection(
        CardService.newCardSection()
        .addWidget(CardService.newSelectionInput().setType(CardService.SelectionInputType.CHECK_BOX)
                   .setTitle("A group of checkboxes. Multiple selections are allowed.")
                   .setFieldName("CLIENTI")
                   .addItem(pratiche[0], "checkbox_one_value", false)
                   .addItem(pratiche[1], "checkbox_one_value", false)
                   .addItem(pratiche[2], "checkbox_one_value", false)
                   .addItem(pratiche[3], "checkbox_one_value", false)               
                   .setOnChangeAction(CardService.newAction().setFunctionName('notificationCallback')))
        .addWidget(CardService.newSelectionInput().setType(CardService.SelectionInputType.DROPDOWN)
                   .setTitle("A group of checkboxes. Multiple selections are allowed.")
                   .setFieldName("PRATICHE")
                   .addItem("Elenco clienti2", "checkbox_two_value", false)
                   .setOnChangeAction(CardService.newAction().setFunctionName('inseriscievento')))
        .addWidget(CardService.newTextButton().setText('Telefonata').setTextButtonStyle(CardService.TextButtonStyle.FILLED).setOnClickAction(action))
        .addWidget(CardService.newTextButton().setText('Incontro').setTextButtonStyle(CardService.TextButtonStyle.FILLED).setOnClickAction(action)))  
      .build();
    }
    

    You can also do it with a loop:

      var widget = CardService.newSelectionInput()  
      widget.setType(CardService.SelectionInputType.CHECK_BOX)
      .setTitle("A group of checkboxes. Multiple selections are allowed.")
      .setFieldName("CLIENTI")
      .setOnChangeAction(CardService.newAction().setFunctionName('notificationCallback'))
      for(var i = 0; i < pratiche.length; i++){
        widget.addItem(pratiche[i], "checkbox_one_value", false)
      }             
    
      return CardService
      .newCardBuilder()
      .setHeader(
        CardService.newCardHeader()
        .setTitle('Elenco operazioni rapide')
        .setSubtitle('Inserisci rapidamente gli eventi con questi tasti'))  
      .addSection(
        CardService.newCardSection()
        .addWidget(widget)
         ...   
      ).build();