项目管理中如何用于强制执行自定义项目逻辑的 CodeX 脚本?

每个组织都有其既定的项目执行方式。对于任务的流转、项目的进展时间以及哪些操作需要验证,都有明确的预期。当这些规则得到始终如一的遵循时,项目就能保持结构化和可预测性。
Zoho Projects 中的 CodeX Scripts 可以将这种结构直接引入到您的项目中。
CodeX Scripts 允许用户定义自定义逻辑,这些逻辑会在任务或项目创建、更新或删除时自动运行。用户可以根据流程的设计来验证条件、阻止操作或触发逻辑。
让我们来看一个例子。
在制造质量控制流程中,每个生产批次报告都必须经过验证才能获得批准。质量控制项目中的关键任务之一是“验证批次记录和测试报告”。此任务充当正式的审批检查点。
目标很简单:
当批次报告被拒绝时,必须经过适当的验证,流程才能继续进行。
以下是 CodeX Scripts 如何通过其他 Zoho Projects 功能来强制执行此流程:
CodeX Scripts 允许用户定义自定义逻辑,这些逻辑会根据模块中的事件(例如项目或任务的创建、更新或删除)自动运行。这些脚本有助于强制执行验证、限制操作或应用符合业务需求的条件。
步骤 1:创建项目模板
创建项目模板,确保每个制造质量控制 (QC) 项目都从一致的任务结构开始。
步骤 2:创建自定义函数,以便在下一步的蓝图中关联
创建自定义函数,并将其与“已拒绝”状态的转换后关联,以确保每当任务被标记为“已拒绝”时,都会自动创建验证任务并将其链接为前置任务。
本案例中使用的 Deluge 代码如下所示。

步骤 3:创建审批蓝图
设计一个蓝图,其中包含用于 QC 验证任务的任务布局、项目名称以及“需要验证”标签作为条件。当任务被拒绝时,将触发一个自定义函数,该函数会创建一个名为“验证批次报告”的新任务,并将其链接为前置任务。
蓝图中使用的状态和转换如下:
-
起始状态 - 转换 - 结束状态
-
打开 - 处理批次报告 - 进行中
-
进行中 - 提交审批 - 审核中
-
审核中 - 已批准 - 已关闭
-
审核中 - 未批准 - 已拒绝
-
已拒绝 - 提交审批(返工) - 审核中

步骤 4:使用 CodeX 脚本强制执行规则
现在进入关键的强制执行层。
创建一个 CodeX 脚本,检查前置任务(“验证批次报告”)是否仍处于打开状态。如果是,系统将阻止对验证任务的任何更新。本案例中使用的 CodeX 脚本如下所示。

这确保了审批检查点无法被绕过。只有在验证任务标记为“已关闭”后,CodeX 脚本才允许继续更新。

这种结构化方法可以应用于任何审批驱动的检查点,例如财务审核、合规性签字、生产许可或发布验证。凡是需要等待另一项任务完成的情况,CodeX 脚本都会确保遵守该规则。
自定义函数中使用的代码:
1//Create connection with scopes: ZohoProjects.tasks.ALL and replace "xxxxxxx" with the the connection name.
2dependencyType = "FS";
3successorTaskId = taskId;
4// Format dates in MM-dd-yyyy
5startDate = zoho.currentdate.toString("MM-dd-yyyy");
6dueDate = zoho.currentdate.addDay(2).toString("MM-ddyyyy");
7projectsAPIEndPoint = "https://projectsapi.zoho.com/restapi";
8// ----------------------------
9// Step 1: Create Predecessor Task
10 // ----------------------------
11 values_map = Map();
12 values_map.put("name","Verify Batch Reports");
13 values_map.put("description","Must be completed before successor.");
14 values_map.put("status","Open");
15 values_map.put("start_date",startDate);
16 values_map.put("end_date",dueDate);
17 createTaskResponse = invokeurl
18 [
19 url :projectsAPIEndPoint + "/portal/" + portalId + "/projects/" + projectId + "/tasks/" 20 type :POST
21 parameters:values_map
22 connection:"createnewsubtaskforrework"
23 ];
24 info createTaskResponse;
25 if(createTaskResponse == null || createTaskResponse.get("tasks") == null)
26 {
CodeX脚本中使用的代码:
1// scopes: ZohoProjects.tasks.READ
2function main() {
3 const url = `https://projects.zoho.com/api/v3/portal/${current.org.zoho OrgId}/projects/${current.record.projectId}/tasks/${current .record.id}`
4 const request = new HttpRequest();
5 request.url(url);
6 request.method('get');
7 request.connection('restrictsuccessor');
8 const response = request.execute();
9 predecessors = response.asJson().statusMessage.responseText.dependency_inf o.predecessor;
10 for (let predecessor of predecessors) {
11 predecessorId = predecessor.id;
12 const url = `https://projects.zoho.com/api/v3/portal/${current.org.zoho OrgId}/projects/${current.record.projectId}/tasks/${predece ssorId}`
13 const request = new HttpRequest();
14 request.url(url);
15 request.method('get');
16 request.connection('restrictsuccessor');
17 const response = request.execute();
18 if(!response.asJson().statusMessage.responseText.status.is_ closed_type){
19 throw new ScriptError("You cannot edit the successor task unless the predecessor is closed");
20 }
21 }
22 }
23
谢谢大家!
更多推荐



所有评论(0)