我的工作表上的另一个用户触发的Google Apps脚本未打开表单

时间:2019-05-03 21:05:11

标签: javascript google-apps-script google-apps

我有一个Google表格来跟踪我想与公司中其他人共享的项目。我已经使用html表单开发了一个UI,该UI可以引导用户解决问题,以获得用于项目成本核算的必要数据。

可通过自定义菜单打开表单-这对我和其他用户(在本例中实际上是我使用其他Google帐户)都非常有用。

function onOpen() {
 SpreadsheetApp.getUi()
    .createMenu('PROJECT COSTING TOOL')
    .addItem('Create a New Proposal', 'newProposal')
    .addItem('Create a New Version of this Proposal', 'copyProposal')
    .addSubMenu(SpreadsheetApp.getUi().createMenu('Edit This Proposal')
          .addItem('Edit Project Background', 'editBackground')
          .addItem('Edit Project Complexity', 'editProject')
          .addItem('Edit Category Complexity', 'editCategory'))
    .addToUi();
}

例如,选择“编辑项目复杂性”将触发Apps脚本中的editProject功能。 “编辑类别复杂度”触发editCategory函数。两者都适合任何用户。

这些功能使用openForm打开html表单:

function editProject(curProp) {
  console.log('Opening editProject for Project #' + curProp);
  curProp = curProp || SpreadsheetApp.getActiveSpreadsheet().getRangeByName('CurrentProposal').getValue();
  console.info('curProp is now ' + curProp);
  var projRange = SpreadsheetApp.getActiveSpreadsheet().getRangeByName('Data_Projects');
  openForm('frmProject', 'Edit Project Complexity',700,800,rowToJson(projRange,findRow(projRange,curProp)));
}

您可以看到代码检查是否通过e传递了项目编号,如果没有,则在Sheet本身中查找它。每个html表单中都有一些按钮,用于将更改保存到工作表,关闭表单并打开另一个表单(“下一个”或“上一个”)。这是我遇到麻烦的地方。对于本人和非所有者用户,保存和关闭功能都运行良好。当我触发editProject函数时,它也可以正常工作。但是它永远不会进入openForm。

function saveCategoryPrev(e) {
  console.log('SaveCategoryPrev has been run: ' + e);
  var projID = saveCategory(e);
  console.info('saveCat is done. Back to sCP with Project #' + projID)
  editProject(projID);
}

以我自己(所有者)的身份运行,效果很好。以另一个用户身份运行,直到openForm为止一切都正常,并且退出时没有错误。这是该情况下的日志:

D  SaveCategoryPrev has been run: [[7,<other data>]]  for proj [undefined 
D  SaveCategory has been run: [[7,<other data>]] 
D  project is 7 
D  Data Array = <some data>
D  saveCategory: 537ms 
I  saveCat is done. Back to sCP with Project #7 
D  Opening editProject for Project #undefined 
I  curProp is now 7 

当我以自己的身份运行它时,您会看到触发了下一步:

D  SaveCategoryPrev has been run: [[7,<other data>]] for proj [undefined]
D  SaveCategory has been run: [[7,<other data>]] 
D  project is 7 
D  Data Array = <some data>
D  saveCategory: 370ms 
I  saveCat is done. Back to sCP with Project #7 
D  Opening editProject for Project #7 
I  curProp is now 7 
D  onLoad = {"Proposal ID":7,"Opportunity ID":"","Ver #":1,"Project Start":"2019-05-01T04:00:00.000Z","Duration (mo)":2,"Sales Engineer":"...} 

openForm:

function openForm(formName, formTitle, fmHeight, fmWidth, paramData) {
  fmHeight = fmHeight || "450";
  fmWidth = fmWidth || "800";
  var html = HtmlService.createHtmlOutputFromFile(formName).setHeight(parseInt(fmHeight)).setWidth(parseInt(fmWidth));
  if (paramData) {html.append("<div id='gsParam' style='display:none;'>" + paramData + "</div>");}
  SpreadsheetApp.getUi().showModalDialog(html, formTitle);
}

我想念什么?我自己和另一个接受授权的用户之间有什么区别?使用菜单打开表单和通过代码打开表单有什么区别?

0 个答案:

没有答案