如何任务列表关闭时自动更新项目状态?
在日常项目管理中,重复的任务和操作耗费大量时间,而且出错的可能性很高。作为项目负责人,很难跟踪项目中的所有任务并满足项目的所有要求。自动化帮助我们降低了出错的可能性,并轻松地实现了重复任务的自动化。自定义函数是用户编写的一组代码,用于实现特定需求。使用工作流规则(任务/项目)设置触发条件,并将自定义函数与其关联。
自动化的意义和价值
提高效率
自动化可以将重复性、规则性强的工作交给机器或系统执行,大幅减少人工操作时间,加快流程运转速度。
降低人为错误
自动化系统按照预设流程执行任务,减少因人为疏忽、疲劳或经验不足带来的错误。
标准化流程
自动化能将流程规则化、模块化,使企业运作更加可控、可追溯、便于优化和扩展。
提高项目进度跟踪
项目里面的任务决定项目的进度。一个项目中可能有一百多个任务。在任务猎豹完成时自动更新项目状态可以帮助项目所有者很容易地跟踪项目进度。
支撑数字化转型
自动化是企业数字化转型的重要基础,有助于实现数据驱动的管理与运营。
需求:
我们的一位客户构建了他们的项目结构,使用代表不同项目阶段(例如启动、执行和结束)的任务列表名称。
这些名称已在项目布局中配置为自定义状态。
当特定任务列表(例如启动)下的所有任务都标记为已结束时,项目状态应自动更新以反映该阶段(即启动)。
此过程应在每个任务列表完成后重复,以确保项目状态始终反映最新完成的阶段。该功能是通过结合使用任务自定义函数和工作流规则实现的。
自定义函数代码:
以下 Deluge 脚本示例实现上述逻辑,请在 Zoho Projects 自定义函数中创建连接并替换连接名称及必要参数后使用。
taskParam = Map();
taskParam.put("status","notcompleted");
taskParam.put("tasklist_id",tasklistId);
taskResponse = zoho.projects.getRecords(portalId,projectId,"tasks",taskParam,1,"'xxxxxxxxx'");
// info "taskResponse:" + taskResponse;
// info "------------------------------------";
projectsAPIEndPoint = "https://projectsapi.zoho.in/restapi";
if(!tasklistId.isNull() && taskResponse.isEmpty())
{
updateStatusName = tasklistName;
projectDetails = invokeurl
[
url :projectsAPIEndPoint + "/portal/" + portalId + "/projects/" + projectId + "/"
type :GET
connection:"'xxxxxxxxx'"
];
info projectDetails;
info "-------------------------------------";
statusMap = Map();
if(projectDetails != null && projectDetails.get("projects") != null)
{
projectDetail = projectDetails.get("projects").get(0);
layoutDetails = projectDetail.get("layout_details");
projectLayoutId = layoutDetails.get("project").get("id");
info "projectLayoutId: " + projectLayoutId;
projectLayoutDetail = invokeurl
[
url :projectsAPIEndPoint + "/portal/" + portalId + "/module/projects/layouts/" + projectLayoutId + "/"
type :GET
connection:"'xxxxxxxxx'"
];
if(projectLayoutDetail != null && projectLayoutDetail.get("customstatus") != null)
{
projectStatus = projectLayoutDetail.get("customstatus");
for each status in projectStatus
{
statusMap.put(status.get("status_name"),status.get("status_id"));
}
}
info "statusMap : " + statusMap;
info "------------------------";
if(statusMap.containKey(updateStatusName))
{
updateProjectParamMap = Map();
updateProjectParamMap.put("custom_status",statusMap.get(updateStatusName));
projectDetail = invokeurl
[
url :projectsAPIEndPoint + "/portal/" + portalId + "/projects/" + projectId + "/"
type :POST
parameters:updateProjectParamMap
connection:"'xxxxxxxxx'"
];
info projectDetail;
info "-------------------------------------";
}
}
}
return "success";


请务必将 xxxxxxxxx 替换为 Zoho Projects 连接链接名称及其范围:ZohoProjects.portals.READ、ZohoProjects.projects.ALL、ZohoProjects.tasks.READ。

浙公网安备 33010602011771号