每个组织都有其既定的项目执行方式。对于任务的流转、项目的进展时间以及哪些操作需要验证,都有明确的预期。当这些规则得到始终如一的遵循时,项目就能保持结构化和可预测性。
 

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

谢谢大家!

Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐