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

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

相关推荐
键盘上的猫头鹰2 小时前
【MySQL 教程(八)】索引、事务、用户管理、导入导出与分页查询
数据库·python·mysql
Royzst2 小时前
数据库知识点
数据库
雪的季节3 小时前
企业级 Qt 全功能项目
开发语言·数据库·qt
宋浮檀s3 小时前
应急响应——Web漏洞:命令执行+SSRF+弱口令
运维·数据库·sql·网络安全·oracle·应急响应
日取其半万世不竭3 小时前
iftop、nethogs 和 nload:Linux 服务器网络流量实时监控工具介绍
linux·运维·服务器
mounter6253 小时前
Linux 内核资源管理:控制组(cgroup)的演进与“策略组”新提案
linux·运维·服务器·cgroup·kernel
bksczm3 小时前
文件在磁盘中的存储方式
linux·运维·服务器
L1624763 小时前
OpenSSH 半自动升级方案(独立编译 + 手动迁移 + 重建 systemd 服务)
linux·服务器·ssh
半旧夜夏4 小时前
【保姆级】微服务组件环境搭建(Docker Compose版)
java·linux·spring cloud·微服务·云原生·容器
Cheng小攸4 小时前
综合实验2
网络·windows