
大家好,今天分享的是任务自动化,根据里程碑自动更新项目状态。在项目管理中,大型项目往往包含多个里程碑,而这些里程碑的完成时间直接影响着项目的整体进度。根据项目管理软件里程碑的完成情况实时更新项目状态,不仅降低成本,还优化了信息即时性。
一、自定义函数的概念
自定义函数是一种可用于自动化流程的软件代码,允许你在触发工作流规则后立即自动发送通知、调用webhook或执行逻辑。
自定义函数的功能作用
自定义函数有助于自动执行复杂的任务和计算。
二、根据里程碑自动更新项目状态
项目的状态应根据该项目中已完成的里程碑数量自动更新。以下应是根据已完成项目里程碑的数量确定的项目状态。
- 尚未启动 → 当没有里程碑完成时。
- 进行中 → 当至少一个里程碑完成时。
- 已完成 → 当所有里程碑都完成时。
下面我们已经使用自定义函数实现此目标:
为Zoho Projects服务创建连接,范围为“ZohoProjects.portals.READ、ZohoProjects.projects.ALL、ZohoProjects.milestones.READ”,将“projects”替换为连接名称。单击下面的链接了解如何创建连接。
可以通过将自定义函数与项目蓝图规则关联来自动执行此过程。附上任务工作流规则和参数的屏幕截图。
自定义函数代码:
projectsEndpoint = "https://projectsapi.zoho.com/restapi/portal/";
param = Map();
param.put("status","completed");
getMilestones = invokeurl
[
url :projectsEndpoint + portalId + "/projects/"+ projectId +"/milestones/"
type :GET
parameters:param
connection:"projects"
];
// info getMilestones;
statusName = "";
if(getMilestones == "") {
info "No milestones completed";
statusName = "Yet to Initiate";
}
else if (getMilestones.contains("milestones")) {
completedMilestones = getMilestones.get("milestones").size();
info "Completed Milestones : "+completedMilestones;
if(completedMilestones==1) {
statusName = "zp.projstatus.inprogress";
}
else {
param = Map();
param.put("status","notcompleted");
getNotCompletedMilestones = invokeurl
[
url :projectsEndpoint + portalId + "/projects/"+ projectId +"/milestones/"
type :GET
parameters:param
connection:"projects"
];
if(getNotCompletedMilestones=="") {
statusName = "zp.projstatus.completed";
} else {
notCompletedMilestones = getNotCompletedMilestones.get("milestones").size();
info "Not Completed Milestones : "+notCompletedMilestones;
}
}
}
info statusName;
/* Project status update */
if(statusName!="") {
projectDetails = invokeurl
[
url :projectsEndpoint + portalId + "/projects/" + projectId + "/"
type :GET
connection:"projects"
];
// 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 :projectsEndpoint + portalId + "/module/projects/layouts/" + projectLayoutId + "/"
type :GET
connection:"projects"
];
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(statusName))
{
updateProjectParamMap = Map();
updateProjectParamMap.put("custom_status",statusMap.get(statusName));
projectDetail = invokeurl
[
url :projectsEndpoint + portalId + "/projects/" + projectId + "/"
type :POST
parameters:updateProjectParamMap
connection:"projects"
];
// info projectDetail;
// info "-------------------------------------";
}
}
}
return "success";
注意事项
在 Zoho Projects中创建自定义函数很简单,而且有据可查。Zoho提供了一系列内置函数,基于这些默认函数设定新函数,也可以使用Zoho的脚本语言Deluge轻松定义自己的函数。
最后不妨试一下,看看它如何节省你的时间并提高工作效率!
Zoho Projects项目管理软件,深受国内外项目协作团队一致喜爱,Zoho是专业项目管理软件厂商。
欢迎咨询:400-660-8680转841。立即免费体验: https://www.zoho.com.cn/projects/
Zoho Projects项目管理系统是一款SaaS云端项目管理工具,多次荣获项目管理国际大奖。180多个国家的20万+企业在Zoho Projects的帮助下,管理项目进度、分配任务、制作甘特图、计算工时等,加强团队协作能力,保障项目成功交付。