甘特图使用(只读,不可编辑)原创
金蝶云社区-yaojunsong
yaojunsong
9人赞赏了该文章 9,525次浏览 未经作者许可,禁止转载编辑于2023年01月10日 09:14:01
summary-icon摘要由AI智能服务提供

本文介绍了关于甘特图开发的一些技术细节,包括支持字段自定义扩展、时间刻度尺的组合策略、数据库兼容性、插件封装示例、甘特图参数设置、属性绑定、进度显示方式、动态功能如设置任务条颜色等。同时,解答了关于主键字段、子任务缩进、前趋连线等常见问题,并提供了实现示例和效果图片。

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



效果图片如下:

1.png

(图6)

2.png

(图7)

。。。