Zoho Projects自动化:状态变更时自动创建依赖任务

在 Zoho Projects 中,您可以设置当任务状态更新时自动创建并分配依赖任务。这有助于团队保持步调一致,确保审核按时完成,并减少人工操作。

本文将介绍如何使用 Deluge 脚本编写的自定义函数轻松完成设置。

用例

例如,当审计员安排一项需要合规性审核的任务时,一旦任务状态从"已安排"更新,系统将自动创建一个依赖任务并将其分配给合规团队。所有相关附件都会自动同步,确保审计员和审核员能够全面了解任务内容,无需手动协调即可继续进行。

要配置此流程,请执行以下操作:

  1. 导航至页面右上角,点击 → 开发者空间 → 连接 → 使用以下范围创建连接:
  • ZohoProjects.portals.READ

  • ZohoProjects.portals.ALL

  • ZohoProjects.projects.READ

  • ZohoProjects.tasks.CREATE

  • ZohoProjects.tasks.UPDATE

  • ZohoProjects.tasks.READ

  • WorkDrive.workspace.ALL

  • WorkDrive.files.ALL

  • ZohoProjects.documents.READ

  • ZohoProjects.documents.CREATE

  1. 导航至 → 开发者空间 → 自定义函数。在"任务"选项卡下,创建一个新的自定义函数,并添加以下 Deluge 脚本。

请确保门户 URL 与您的数据中心一致。否则,该功能可能无法按预期执行。此外,请确保指定的团队已关联到该项目;否则,任务分配将失败。

// TODO : Replace Dependency Type here with "FS, SS, SF, FF"

  1. // scopes: ZohoProjects.portals.READ, ZohoProjects.portals.CREATE, ZohoProjects.projects.READ, ZohoProjects.tasks.CREATE, ZohoProjects.tasks.UPDATE, ZohoProjects.tasks.READ, WorkDrive.workspace.ALL, WorkDrive.files.ALL, ZohoProjects.documents.READ, ZohoProjects.documents.CREATE.

  2. // get team id

  3. endPoint = "https://projects.zoho.in/restapi/portal/";

  4. endPointV3 = "https://projects.zoho.in/api/v3/portal/";

  5. getTaskStatusTimeline = invokeurl

  6. [

  7. url :endPointV3 + portalId + "/projects/" + projectId + "/tasks/" + taskId + "/status-timeline"

  8. type :GET

  9. connection:"connectionprojects"

  10. ];

  11. size = getTaskStatusTimeline.size() - 1;

  12. oldStatusName = getTaskStatusTimeline.get(size).get("previous_status").get("name");

  13. if(oldStatusName.containsIgnoreCase("Scheduled"))

  14. {

  15. teamName = "Compliance Team";

  16. userGroupsResponse = invokeurl

  17. [

  18. url :endPoint + portalId + "/projects/" + projectId + "/usergroups/"

  19. type :GET

  20. connection:"connectionprojects"

  21. ];

  22. teams = userGroupsResponse.get("userGroups");

  23. for each team in teams

  24. {

  25. if(team.get("groupObj").get("group_name").containsIgnoreCase(teamName))

  26. {

  27. teamId = team.get("groupObj").get("group_id");

  28. }

  29. }

  30. teamIds = List();

  31. teamIds.add(teamId);

  32. dependencyType = "FS";

  33. //Create Tasks parameters

  34. values_map = Map();

  35. values_map.put("name","Compliance Audit Verification");

  36. values_map.put("description"," Review task created for the Security and Compliance team to validate requirements, assess risks, and confirm adherence to defined standards. Attachments from the originating task are included for reference.");

  37. values_map.put("associated_teams",teamIds);

  38. //Invoke Create Task

  39. createTaskResponse = zoho.projects.create(portalId,projectId,"tasks",values_map,"connectionprojects");

  40. // Get TaskId From Task response

  41. if(createTaskResponse != null && createTaskResponse.get("tasks") != null)

  42. {

  43. taskInfo = createTaskResponse.get("tasks").get(0);

  44. newTaskId = taskInfo.get("id_string");

  45. // copy attachments to new task

  46. getAttachmentsResponse = invokeurl

  47. [

  48. url :endPointV3 + portalId + "/projects/" + projectId + "/attachments?entity_type=task&entity_id=" + taskId

  49. type :GET

  50. connection:"connectionprojects"

  51. ];

  52. if(getAttachmentsResponse.get("attachment").size() > 0)

  53. {

  54. taskAttachments = getAttachmentsResponse.get("attachment");

  55. for each attachment in taskAttachments

  56. {

  57. associateParam = Map();

  58. associateParam.put("entity_type","task");

  59. associateParam.put("entity_id",newTaskId);

  60. associateToTaskComment = invokeurl

  61. [

  62. url :endPointV3 + portalId + "/projects/" + projectId + "/attachments/" + attachment.get("attachment_id")

  63. type :POST

  64. parameters:associateParam

  65. connection:"connectionprojects"

  66. ];

  67. }

  68. }

  69. //Add Dependancy Between Tasks Parameter

  70. dependencyParam = Map();

  71. dependencyParam.put("taskid",newTaskId);

  72. dependencyParam.put("predids",taskId);

  73. dependencyParam.put("projId",projectId);

  74. dependencyParam.put("toupdate","dependencyset");

  75. dependencyParam.put("childprojId",projectId);

  76. dependencyParam.put("dependencytype",dependencyType);

  77. // invoke task dependency Api

  78. dependency = invokeurl

  79. [

  80. url :endPoint + portalId + "/projects/" + projectId + "/taskdependency/"

  81. type :POST

  82. parameters:dependencyParam

  83. connection:"connectionprojects"

  84. ];

  85. info dependency;

  86. info "-------------------------------------";

  87. }

  88. }

  89. return "success";

根据需要自定义第 36 行和第 37 行中的任务名称和描述,然后保存函数。

将 Deluge 文件中第 10、21、51 和 84 行中的"connectionprojects"替换为您的 Zoho Projects 连接名称。

  1. 配置时添加以下参数。

    完成参数映射后,保存函数并在提示时输入任务 ID。此自定义函数将在问题状态从"已安排"更改为其他状态时自动执行,并根据工作流规则创建依赖任务。

  2. 保存自定义函数后,导航至 → 自动化 → 工作流规则 → 项目选项卡 → 新建工作流规则,并使用以下设置。

  3. 配置工作流,使其在任务更新时根据用户操作触发,并将自定义函数关联起来,以便在状态更改时自动执行。

有了这种自动化机制,任务会自动触发,依赖关系会自动分配,支持附件也会自动传输,从而确保无需人工干预即可完成交接。

相关推荐
AlfredZhao1 天前
Docker 容器时区不对,`timedatectl` 不存在怎么办?
linux·timezone
倔强的石头_1 天前
KingbaseES 新版MySQL 兼容版体验:旧版迁移 + 功能实测
数据库
zzzzzz3102 天前
9K Star 炸裂开源!这个 C 语言写的代码知识图谱,把 Linux 内核索引压缩到了 3 分钟
linux·服务器·sql
XIAOHEZIcode2 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
A小辣椒4 天前
TShark:Wireshark CLI 功能
linux
倔强的石头_4 天前
《Kingbase护城河》——数据库存储空间全景探测与精细化瘦身实战
数据库
A小辣椒4 天前
TShark:基础知识
linux
AlfredZhao4 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
冬奇Lab5 天前
每日一个开源项目(第134篇):Zvec - 阿里开源的嵌入式向量数据库,向量搜索界的 SQLite
数据库·人工智能·llm
AlfredZhao5 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi