项目管理调度插件 - 开发教程 - 项目管理

项目管理调度插件

项目管理调度插件是一个实现项目日历、任务相关性、任务日期和工期的联动计算,以及关键路径等项目管理功能逻辑的业务逻辑插件。

使用场景

有如下场景,需要项目管理调度算法:

  • 调整任务开始日期后,会自动将任务完成日期按工期重新计算。
  • 调整任务工期后,会自动将任务完成日期按开始日期和工期重新计算。
  • 调整任务完成日期后,会自动将任务工期重新计算。
  • 调整一个任务后,会自动将其相关的后置任务,按任务相关性联动计算。
  • 调整任务到一个非工作日,会自动定位到工作日。
  • 调整项目日历设置后,会自动将所有任务重新排程定位到适合的工作日。

等等。当对任务进行任意调节设置的时候,任务自身,和跟此任务相关的任务,会自动被调整到一个合适的日期。

基本原理

有两个要素:

  1. 监听DataProject的所有任务操作事件。
  2. 对不同的操作事件,做出相应的业务处理。

ProjectSchedule.js中,我们在ProjectSchedule类的init函数中,做了如下事件监听:

init: function(dataProject){
    this.dataProject = dataProject;
         
    dataProject.on('taskadd', this.onTaskAdd, this);                       //新增
    dataProject.on('taskremove', this.onTaskRemove, this);                 //删除
    dataProject.on('taskedit', this.onTaskEdit, this);                     //修改
    
    dataProject.on('taskchange', this.onTaskChange, this);                 //任务属性改变(处理数据逻辑)
    
    dataProject.on('taskgradechange', this.onTaskGradeChange, this);       //升级/降级任务
    dataProject.on('taskmove', this.onTaskMove, this);                     //任务移动调整
    
}

在这里,我们记录下了DataProject对象,并监听了所有跟任务操作相关的业务事件。
这样,无论任务的操作事件是怎么激发的,最后都会被这里的事件监听函数处理。
比如:onTaskAdd函数,其内部的逻辑,决定了任务是如何被新增,是新增到后一个,还是前一个,或者是新增到子任务。

使用插件

我们创建EdoProject时,默认是没有应用标准的ProjectSchedule插件的。
我们需要显示引用ProjectSchedule.js,并将ProjectSchedule插件设置给DataProject。

首先,引用ProjectSchedule.js

<script src="js/ProjectSchedule.js" type="text/javascript"></script>

然后,在创建DataProject后,将ProjectSchedule插件创建,并作为创建设置给DataProject

//创建DataProject
var dataProject = new Edo.data.DataProject(data);
//设置调度算法插件
dataProject.set('plugins', [
    new ProjectSchedule()
]);
//将DataProject设置给EdoProject
project.set('data', dataProject);  

完成这两步周,我们就给DataProject对象装配上了ProjectSchedule插件。
当有任何任务操作时,ProjectSchedule的onTaskAdd、onTaskRemove等函数会得到通知并执行,实现定义好的业务逻辑处理。