本文介绍了关于甘特图开发的一些技术细节,包括支持字段自定义扩展、时间刻度尺的组合策略、数据库兼容性、插件封装示例、甘特图参数设置、属性绑定、进度显示方式、动态功能如设置任务条颜色等。同时,解答了关于主键字段、子任务缩进、前趋连线等常见问题,并提供了实现示例和效果图片。
2013-09记录:
一、字段支持完全自定义扩展,服务端的处理除了特定接口参数外,其他和普通单据体完全兼容。
二、时间刻度尺的组合策略几十个,目前只支持常用的两个:月+日,周+日;其他的如 年,月,日,小时,分钟,秒,周,自定义时间段等任意两两组合策略得用到的时候一步一步完善,后续可在抽成独立模型的框架下实现。
(图1)
三、数据库部分和普通单据体完全兼容:
(图2)
四、插件封装得比较简单了
[code]using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Kingdee.BOS.Util;
using Kingdee.BOS.DataEntity;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.Core.Metadata.EntityElement;
using Kingdee.BOS.Core.Bill.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel;
namespace Kingdee.K3.DevMgt.Business.PlugIn
{
public class ProjectGttPlugIn : AbstractBillPlugIn
{
public override void AfterBindData(EventArgs e)
{
base.AfterBindData(e);
var gantt = this.View.GetControl
gantt.SetParameter(param);
}
public override void AfterCreateNewData(EventArgs e)
{
base.AfterCreateNewData(e);
}
}
}[/code]
KDGanttChartParameter参数如下:(注意,参数中的所有时间必须为相匹配的时间,也就是必须在StartTime和EndTime时间范围内,否则图表无法显示。)[code] public class KDGanttChartParameter
{
// Summary:
// 任务图结束时间
public DateTime EndTime;
//
// Summary:
// 第一时间单位
public KDScaleType FirstScaleType;
//
// Summary:
// 非工作时间列表
public List
}[/code]
五、甘特图属性设置,注意主键属性必须定义一个有唯一键约束的字段(用于前驱后继任务设置)。
(图3)
六、内置字段列的内置属性名称(绑定实体属性):将和控件实际属性名称绑定,固定名称不要修改,其他属性都可自定义修改,也可增加自定义字段。
(图4)
七、两种方法实现任务的进度显示:
1、设置Complete为大于0小于1的小数,即可实现进度;
2、设置CompleteFinish为Start和Finish中间的一个值,同时必须Complete的设置0;也就是优先处理Complete不为0的进度,如果Complete为0,才考虑CompleteFinish的值;
八、其他动态功能:
1、KDGanttChartParameter参数如下:(注意,参数中的所有时间必须为相匹配的时间,也就是必须在StartTime和EndTime时间范围内,否则图表无法显示。);
(图5)
2、设置某一个任务条的颜色:
语法: this.View.GetControl<EntryGrid>(Key). SetTaskBarItemColor(行主键, 填充颜色RGB,边框颜色RGB);
例如: this.View.GetControl<EntryGrid>(Key). SetTaskBarItemColor("00505694-5278-aab4-11e8-e3cb3c42e408","253,254,233","253,254,2");
九、答疑:
1、主键字段,父级内码字段,顶级内码字段分别有什么作用?
答:【主键字段】是标识每一个任务的唯一标识符号,主要和【前置任务FPredecessors】配合实现前趋连线。
【父级内码字段】【顶级内码字段】对于甘特图控件没有意义,主要功能为方便服务端业务插件实现任务分类排序功能。
2、如何实现子任务缩进?
答:由于任务分解不能是无序的,甘特图控件已经限定了任务数据需要排好顺序,一次相关任务和子任务数据要排好顺序,并按【层次FIndentation】实现缩进。对于单据体来说,默认是按FEntryId进行排序的,因此父任务后面一定要跟随子任务。
3、如何实现前趋连线?
答:【主键字段】是标识每一个任务的唯一标识符号,主要和【前置任务FPredecessors】配合实现前趋连线。
4、设置了完成时间Finish怎没有看到完成中间的线?
答:【完成时间Finish】是计划完成时间,实际完成时间是【CompleteFinish】,具体控制看文档中有详细描述【七、两种方法实现任务的进度显示】。
5、有没有例子?
答:例子可以参考下面文件,导入表单元数据,创建数据表,并插入数据,发布单据BOS_TESTGANTTE测试为列表,后打开列表,双击001即可看到效果(开始日期定为2019-11-26,如果后面日期可以自己修改Sql的日期),注意例子中由于是测试例子,数据表没有做主键和唯一键约束,实际业务要创建数据库表的主键和唯一键索引。
参考附件【甘特图例子.zip】
效果图片如下:
(图6)
(图7)
。。。
甘特图例子.zip(15.26KB)
推荐阅读