当项目排期页面做好以后,即便上面的任务条都能正常显示出来,也还不能说这张甘特图就已经具备了计划管理的能力;因为只要前置任务、后续任务和时间延迟这些关系没有配置到位,用户在页面上拖拽一个任务条时,它后面的节点根本就不会跟着发生预想中的变动,关键路径的判断也会变得十分困难。DevExpress提供的甘特图控件能够把任务的层级结构、开始与结束时间、当前的进度,还有相互间的依赖关系都展示出来,下面就以WinForms版本作为示例来说明,WPF版本的设置思路大致类似,只是绑定属性时的位置会稍微有些区别。
一、DevExpress Gantt怎么设置任务依赖
要把任务依赖正确地设好,这份依赖关系必须先写进数据源里面,然后再映射到甘特图控件上。项目里如果只有一些简单的先后顺序,可以直接在任务表里存下前置任务;可一旦关系类型比较多,就最好单独建出一张依赖表来。
1、先给每条任务准备独立编号
任务表里至少需要包含任务ID、父任务ID、任务名称、开始时间和结束时间这几个字段,其中任务ID必须保持唯一,父任务ID则是用来搭起整棵任务树的。依赖关系在后台引用的,是任务ID而不是页面上显示出来的任务名称,因此就算名称重复了,也不会把关联搅乱;然而ID只要一出现重复,那些连线就会马上乱成一团。
2、简单依赖使用前置任务字段
倘若项目里仅仅用到一种最简单的关系,那就是后一项任务必须等前一项完成后才能开始,也就是FinishToStart这种类型,便可以在任务表里增加一个专门存放前置任务的字段,接着再通过图表映射设置里跟前置任务字段名称对应的那个属性,把它和控件关联起来。当一个任务前面有好几个前置任务时,这个字段里就可以把多个ID都存进去。按照DevExpress官方文档的说明,这种方式只适合用来处理仅仅存在FinishToStart关系的场景。
3、复杂依赖单独建立依赖数据源
但如果项目里还需要用到其他类型的关系,比如开始即开始、完成即完成、开始即完成,或者需要带上延迟时间,那就应当专门建立一张独立的依赖表,并把它绑定为依赖数据源。这张表里需要保存下前置任务、后续任务、依赖的类型,还有延后时间的长度,之后再利用依赖映射的配置,把这些字段一一对应好。需要留心的是,一旦启用了独立的数据源,任务表里原先那些前置任务字段就不会再继续生效了。
4、允许用户在页面调整连线
要是想让用户也可以在页面上,用鼠标拖动任务边缘来直接建立依赖线,就把允许修改依赖的功能开启。开启后,用户便可以拖住任务条两端的小连接点来创建依赖,或者把鼠标悬停在那些连线上,去修改甚至删掉已经建立的关系。同时,每当新添了一条依赖,控件还会按照设定的关系类型,自动去调整后续任务的日期。
二、DevExpress Gantt关键路径怎么显示
要想让关键路径顺利显示出来,完整的任务关系和时间数据是缺一不可的;假如只把任务的开始时间、结束时间绑定上去,却没有把依赖连线配好,控件根本就没法判断,到底哪些任务才是真正会影响项目最终节点的。
1、启用关键路径高亮模式
在WinForms版本里,可以到选项视图的配置中,找到一个专门用来设置关键路径高亮模式的属性,当把它设成单个模式时,控件就会以高亮的方式,标出那条会对项目开始或结束日期产生影响的、相对较长的依赖链;而一旦选成了多个模式,它便会把所有符合条件的关键路径全都展示出来。WPF的甘特图控件同样提供了一个同名属性,只是它在设置界面上待的位置会略有不同。
2、确认依赖链完整
要是发觉关键路径压根没有被点亮,那就要先去检查一下,在前置任务和后续任务之间,是不是真的已经建立起了依赖关系。只要中间缺少了某一条连线,或者任务ID的映射写错了,整条路径就会被截断。此外,还得再去核对一下任务的开始和结束日期是不是合理,那些工期为零的节点,应当清楚地把它设成里程碑。
3、区分单路径和多路径
一个项目中,很有可能同时存在好几条都会对交付日期造成影响的任务链;如果只启用了单个模式,那么页面上就仅仅会展示出其中的一条。当我们在做计划,需要同时观察到多条并行的风险时,就应该把它切换到多个模式。另外,DevExpress还提供了一个用来判断某条任务是否处于关键路径当中的属性,利用它也可以辅助我们进行筛选。
三、DevExpress Gantt关键路径异常怎么排查
等到页面上能够正常看到关键路径以后,还要再去检查一下显示出来的结果,是不是真的跟真实项目的计划相符。因为控件完全是依据我们给的数据来进行计算和呈现的,一旦数据源本身就有问题,那高亮出来的结果也一定会跟着跑偏。
1、检查日期和延迟时间
重点要去核对任务的开始时间、结束时间,以及延后时间的取值。假如延迟时间的单位弄错了,或者任务日期之间出现了倒置,就会导致排在后面的任务整体都跟着发生偏移。
2、检查依赖类型
不少人在做项目时,常常会习惯性地把所有关系类型都写成完成到开始,可是在实际的业务当中,很可能存在着需要同时开始或是同时结束的情形。关系类型一旦选错了,虽然连线看起来还是存在的,但排期得到的结果却已经不准确了。
3、记录用户拖动后的数据变化
如果允许在页面上交互地调整任务和依赖关系,那就一定要把修改后的任务日期和依赖关系,及时回写到数据库里面去。要是只让这些变化停留在前端显示上,等下一次刷新页面后,所有数据又会恢复成原来的样子,用户就很容易误以为是关键路径这个功能自己出毛病了。
总结
概括下来,要配置DevExpress甘特图里的任务依赖,如果只是比较简单的场景,利用前置任务那个字段就能够应付;可一旦碰到了复杂的关系,就应当自己去建好独立的依赖数据源,并且把关系类型、延后时间这些信息一并映射进去。而想要让关键路径显示出来,核心就在于启用高亮模式,同时要确保整条依赖链是完整的,任务日期和ID的映射也都一一对得上。当关键路径图真正要被应用到项目管理中去时,还应当把页面上所做的那些调整同步保存进数据库里,避免让显示的结果和数据库中存放的计划彼此脱节。
