如何在将由其他用户使用的独立脚本中引用我的任务列表

How to refer to my tasklist in a standalone script that will be used by other user

我有一个链接到独立脚本的电子表格,该脚本从我的任务列表中导入任务。当我是用户时它工作正常但在共享用户帐户中不起作用。

独立脚本中的代码是

function getTasks() {

  var tasklistID="mytasklistid";  
  var tasks=Tasks.Tasks.list(tasklistID);
  return tasks

}

绑定脚本中的代码是


function getTask(){

var tasks = TaskManagerScript.getTasks()
Browser.msgBox(tasks)

}

当我 运行 我帐户中的代码时,我按预期从具有指定 ID 的任务列表中获取任务。但是当我从不同的用户帐户 运行 它时,我得到了另一个用户的任务列表。

当其他用户 运行 时,如何使代码 return 成为具有指定 ID 的列表中的任务。

运行 你的脚本作为网络应用程序,总是 运行 和你一样。据我所知,任务不允许共享或让您操纵其他人的任务。

  • 您正在使用 Spreadsheet 的容器绑定脚本,并且绑定的脚本会安装一个库。
  • Spreadsheet 已被用户分享。您是 Spreadsheet.
  • 的所有者
  • 您想让用户使用您的任务 ID。
  • 您想 运行 脚本由 OnEdit 事件触发。

如果我的理解是正确的,这个答案怎么样?

OnEdit 事件触发器是 运行 作为 Spreadsheet 的所有者。所以当用户编辑 Spreadsheet 时,脚本是 运行 和你的任务列表 ID。但是从你的问题来看,是when I run it from a different user account I get the the tasklist of the other user.。我可以确认在我的环境中,当用户编辑到共享 Spreadsheet 时,脚本是 运行 作为所有者(我),并且可以使用我的任务列表 ID。不幸的是,我无法复制你的情况。那么,为了确认这种情况,可以测试一下下面的流程吗?

测试示例流程:

  1. 创建新的传播sheet.
  2. 打开脚本编辑器并安装TaskManagerScript的库。
  3. 在高级 Google 服务中启用任务 API。
  4. 将脚本放入脚本编辑器。脚本如下

    function getTask(e) {
      var tasks = TaskManagerScript.getTasks();
      e.source.appendRow([JSON.stringify(tasks)]);
    }
    
  5. 将 OnEdit 触发器安装到 getTasks()

  6. 要授权,请运行getTasks()脚本编辑器授权范围。
    • 在这种情况下,会发生错误。不过别担心。此操作仅用于授权。
    • 可能不需要此授权。但这是以防万一。
  7. 将点差sheet 分享给不是您帐户的用户。
  8. 用户编辑sheet。

通过上述流程,当用户编辑 sheet 时,将返回使用您的任务列表 ID 检索到的结果。

注:

  • 当 OnEdit 事件通过用户编辑单元格触发 运行 脚本时,脚本 运行 作为 Spreadsheet 的所有者。但是当脚本是 运行 通过单击 sheet 和自定义菜单上的按钮时,脚本是 运行 作为每个用户。请注意这一点。

参考: