代码之家  ›  专栏  ›  技术社区  ›  onit

在使用withSuccessHandler()-Google Apps脚本将数据写入电子表格后,如何调用另一个服务器端函数?

  •  0
  • onit  · 技术社区  · 2 年前

    流程基本如下:

    1. 作用 addTaskToDb() 将HTML表单数据写入电子表格(例如任务3);
    2. google.script.run.withSuccessHandler(_ => loadClientTasks(selectedClient)).newTask(task); 将更新的任务加载到活动HTML页面(例如任务:1、2和 3. );
    3. google.script.run.updateFilesWithTask('new', selectedAgency, selectedClient, task); 应该将最后一个任务添加到电子表格中,并将其复制到其他文件中(应该选择任务3,但它得到的是任务2)。它是从那里得到的,因为有编号被应用到那个任务中。
    function addTaskToDb() {
      var formElements = document.getElementById("form").elements;
      var postData = [];
      for (var i = 0; i < formElements.length; i++) {//Converts checkboxes' status to sheets
        if (formElements[i].type != "submit" && formElements[i].type != 'checkbox') {
          postData.push(formElements[i].value);
        } else if (formElements[i].type == 'checkbox' && formElements[i].checked == true) {
          postData.push(formElements[i].checked);
        } else if (formElements[i].type == 'checkbox' && !formElements[i].checked) {
          postData.push('false');
        }
      }
      let timeStamp = new Date();
      timeStamp = timeStamp.toString();
      const agencyPartner = document.getElementById('agencySelect');
      const selectedAgency = agencyPartner.options[agencyPartner.selectedIndex].text;
    
      const client = document.getElementById('clientSelect');
      const selectedClient = client.options[client.selectedIndex].text;
      
      let dateAssigned = postData[1].toString();
      const item = postData[0];
      const link = postData[2];
      const notes = postData[3];
      const requestApproval = postData[4];
    
      let task = [];
      task.push(timeStamp, selectedAgency, selectedClient, '', '', dateAssigned, item, link, notes, '', requestApproval, '', '', '')
      google.script.run.withSuccessHandler(_ => loadClientTasks(selectedClient)).newTask(task);
      google.script.run.updateFilesWithTask('new', selectedAgency, selectedClient, task);
      document.getElementById("form").reset();
    }
    

    我试过使用 Utilities.sleep(3000); 在内部 updateFilesWithTask() ,但没用。

    非常感谢。

    1 回复  |  直到 2 年前
        1
  •  1
  •   TheWizEd    2 年前

    您是否尝试过:

    google.script.run.withSuccessHandler(_ => { loadClientTasks(selectedClient);
        google.script.run.updateFilesWithTask('new', selectedAgency, selectedClient, task);  
      }
    ).newTask(task);