【问题标题】:How to refer to my tasklist in a standalone script that will be used by other user如何在其他用户将使用的独立脚本中引用我的任务列表
【发布时间】:2019-04-24 05:30:57
【问题描述】:

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

独立脚本中的代码是

function getTasks() {

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

}

绑定脚本中的代码是


function getTask(){

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

}

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

如何使代码在其他用户运行时返回具有指定 ID 的列表中的任务。

【问题讨论】:

  • 我有 2 个问题。 1. 可以问一下a spreadsheet linked to a standalone script that imports task from my tasklist.吗? 2、用户如何运行脚本?
  • @Tanaike 电子表格使用独立脚本作为库。为了得到我的问题的结果,我直接从工作表的有界脚本运行脚本。在现实生活中,用户将输入完成任务的人的姓名并单击完成。这会触发代码更新该任务 ID。然后运行导入今天未完成的任务并更新电子表格的代码。我的问题中显示的代码是此过程的第一步。
  • 感谢您的回复。关于user will enter the name of the person completing the task and click completed,用户将值放入单元格并单击放置在工作表中的按钮。通过单击按钮运行脚本。我的理解正确吗?
  • 感谢您的回复。从您的回复和问题中,我提出了一个确认点作为答案。你能确认一下吗?如果我误解了您的情况而这不起作用,我深表歉意。

标签: google-apps-script google-tasks-api google-tasks


【解决方案1】:
  • 您正在使用电子表格的容器绑定脚本,并且绑定脚本会安装一个库。
  • 电子表格由用户共享。您是电子表格的所有者。
  • 您想让用户使用您的任务 ID。
  • 您希望通过 OnEdit 事件触发器运行脚本。

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

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

测试流程示例:

  1. 创建新的电子表格。
  2. 打开脚本编辑器,安装TaskManagerScript的库。
  3. 在高级 Google 服务中启用 Tasks API。
  4. 将脚本放入脚本编辑器。脚本如下。

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

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

通过上述流程,当用户编辑工作表时,返回与您的任务列表ID一起检索的结果。

注意:

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

参考:

【讨论】:

  • 您好田池,感谢您的帮助。我按照您的步骤操作,当我在其他用户的帐户中运行它时,它会显示我的任务。所以错误必须在其他地方。当我尝试运行我的原始代码时,我收到此错误:-对 tasks.tasks.list 的 API 调用失败并出现错误:未找到。我试图运行的完整代码是var TaskDate=new Date() //Some code to get TaskDate var listoftasks = Tasks.Tasks.list(tasklistID) var filteredtask=listoftasks["items"].filter(function(item){return item["due"]== filterdate && item["completed"]==null}) /more code to insert data in spreadsheet
  • 受到您的启发,建议我重新审视我的代码并进行一些更改。代码移动了一点,但我还没有走出困境。修改和测试完成后将添加更多的 cmets。或者,如果您希望我可以关闭此问题,请注意这一点并发布单独的问题,指出您的建议已经让我走上了正确的道路
  • @Sheils 感谢您的回复。我带来的不便表示歉意。在我的环境中,我可以确认我的回答流程有效。所以我认为可能还有其他问题。所以我想确认一下。如果我找到了明确的原因,我想报告它。所以在目前阶段,我想删除一次我的答案,因为我不想让其他用户感到困惑。很抱歉我不能很快找到你的问题。
【解决方案2】:

将您的脚本作为始终以您身份运行的 Web 应用程序运行。据我所知,任务不允许共享或让您操纵其他人的任务。

【讨论】:

  • 我确实尝试将电子表格发布为 web 应用程序,但看起来它是以只读方式发布的。我想避免创建 html 表单和 javascript 来传输任务。如果可以发布电子表格读/写,那就太好了
  • 所以你的应用程序有一个更新任务的功能,如果你运行它就可以运行,但如果其他人运行它就不行?在这种情况下,“只读”应该只是意味着他们不能修改应用程序,但您不希望他们修改应用程序,您希望他们能够查看和修改任务
  • 您好 J.G,在 Tanaike 确认测试之后,我得出结论,当在另一个用户帐户中打开电子表格时,可以使用电子表格更新我的任务。经过一些清理后,由 onEdit(已安装)触发的所有功能都可以正常工作。我仍然遇到的唯一问题是在电子表格上单击按钮时获取代码以获取任务列表。该代码在由 onEdit 触发的独立脚本中的函数调用时工作正常,但在由按钮触发的有界工作表中的函数调用时则无法正常工作。代码本身是独立的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-20
  • 1970-01-01
  • 1970-01-01
  • 2011-07-15
  • 1970-01-01
  • 1970-01-01
  • 2013-08-29
相关资源
最近更新 更多