甘特图使用(只读,不可编辑)
金蝶云社区-lindsey
lindsey
12人赞赏了该文章 2,646次浏览 未经作者许可,禁止转载编辑于2018年12月16日 11:50:55
summary-icon摘要由AI智能服务提供

文本描述了甘特图插件在K/3系统中的实现细节,包括其字段支持自定义扩展、服务端处理兼容性、时间刻度尺组合策略、甘特图属性设置以及甘特图任务进度显示和颜色设置的方法。服务端除特定接口外,与普通单据体兼容。时间刻度尺目前支持月+日、周+日组合,未来可按需完善。客户端需重写编辑模式,工作量大。甘特图设置包括时间参数配置和颜色设置,参数需匹配时间范围,任务进度可通过设置小数或中间值实现,颜色可通过API设置。

字段支持完全自定义扩展,服务端的处理除了特定接口参数外,其他和普通单据体完全兼容。
时间刻度尺的组合策略几十个,目前只支持常用的两个:月+日周+日;其他的如 年,月,日,小时,分钟,秒,周,自定义时间段等任意两两组合策略得用到的时候一步一步完善,后续可在抽成独立模型的框架下实现。
(不过客户端就比较悲惨了,Dlh和Dev完全不兼容,服务端数据模型又要兼容,真掉坑里了。另外,编辑模式得全部重写,这部分不放开,工作量非常巨大,相当于又做一个编辑表格单据体,估计最近几个版本都不会支持到)

甘特图1

2016-06-07 上传

下载附件 (93.18 KB)
甘特图1



数据库部分和普通单据体完全兼容:

甘特图2

2016-06-07 上传

下载附件 (110.77 KB)
甘特图2




插件封装得比较简单了

  1. using System;

  2. using System.Collections.Generic;

  3. using System.Linq;

  4. using System.Text;

  5. using Kingdee.BOS.Util;

  6. using Kingdee.BOS.DataEntity;

  7. using Kingdee.BOS.Orm.DataEntity;

  8. using Kingdee.BOS.Core.Metadata.EntityElement;

  9. using Kingdee.BOS.Core.Bill.PlugIn;

  10. using Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel;


  11. namespace Kingdee.K3.DevMgt.Business.PlugIn

  12. {

  13.     public class ProjectGttPlugIn : AbstractBillPlugIn

  14.     {

  15.         public override void AfterBindData(EventArgs e)

  16.         {

  17.             base.AfterBindData(e);


  18.             var gantt = this.View.GetControl<EntryGanttGrid>("FGanttChart");

  19.             //整体图开始时间(为了好看,往前推一天)

  20.             var startDt =  DateTime.Parse(this.View.Model.GetValue("FStartDate").ToString()).AddDays(-1);

  21.             //整体图结束时间(为了好看,往后推7天)

  22.             var endDt = DateTime.Parse(this.View.Model.GetValue("FPlanDate").ToString()).AddDays(7);

  23.             //当前可见图页面的日期数量,整体前推后继了8天

  24.             var durationDays = new TimeSpan(startDt.Ticks).Subtract(new TimeSpan(endDt.Ticks)).Duration().Days + 8;

  25.             var param = new KDGanttChartParameter()

  26.             {

  27.                 //整体图开始时间(为了好看,往前推一天)

  28.                 StartTime = startDt,

  29.                 // 每日开始工作时间:上班时间上午9点

  30.                 WorkingDayStart = startDt.AddDays(1).AddHours(9),

  31.                 // 每日结束工作时间:下班时间下午6点,也就是18点

  32.                 WorkingDayEnd = startDt.AddDays(1).AddHours(18),

  33.                 //整体图结束时间(为了好看,往后推7天)

  34.                 EndTime = endDt,

  35.                 //当前可见图页面的日期数量,整体前推后继了8天

  36.                 NumPerPage = durationDays

  37.             };


  38.             gantt.SetParameter(param);


  39.         }


  40.         public override void AfterCreateNewData(EventArgs e)

  41.         {

  42.             base.AfterCreateNewData(e);



  43.         }

  44.     }

  45. }

复制代码





KDGanttChartParameter参数如下:(注意,参数中的所有时间必须为相匹配的时间,也就是必须在StartTime和EndTime时间范围内,否则图表无法显示。)

  1. public class KDGanttChartParameter

  2.     {

  3.         // Summary:

  4.         //     任务图结束时间

  5.         public DateTime EndTime;

  6.         //

  7.         // Summary:

  8.         //     第一时间单位

  9.         public KDScaleType FirstScaleType;

  10.         //

  11.         // Summary:

  12.         //     非工作时间列表

  13.         public List<KDTimeInterval> Intervals;

  14.         //

  15.         // Summary:

  16.         //     是否显示当前时间线

  17.         public bool IsCurrentTimeLineVisible;

  18.         //

  19.         // Summary:

  20.         //     是否非工作时间高亮显示

  21.         public bool IsNonworkingTimeHighlighted;

  22.         //

  23.         // Summary:

  24.         //     非工作时间背景颜se

  25.         public string NonworkingTimeBackground;

  26.         //

  27.         // Summary:

  28.         //     依据SecondScaleType属性的设置,确定该NumPerPage值的单位。50以内,避免性能太慢。 单位为:Day,Hour,Minute,Second,其他的Scale都归结到Day

  29.         public int NumPerPage;

  30.         //

  31.         // Summary:

  32.         //     第二时间单位

  33.         public KDScaleType SecondScaleType;

  34.         //

  35.         // Summary:

  36.         //     任务图开始时间

  37.         public DateTime StartTime;

  38.         //

  39.         // Summary:

  40.         //     每日结束工作时间

  41.         public DateTime WorkingDayEnd;

  42.         //

  43.         // Summary:

  44.         //     每日开始工作时间

  45.         public DateTime WorkingDayStart;

  46.         //

  47.         // Summary:

  48.         //     每周结束工作时间

  49.         public DayOfWeek WorkingWeekEnd;

  50.         //

  51.         // Summary:

  52.         //     每周开始工作时间

  53.         public DayOfWeek WorkingWeekStart;


  54.     }

复制代码






甘特图属性设置,注意主键属性必须定义一个有唯一键约束的字段(用于前驱后继任务设置)。

4.png

2017-08-01 上传

下载附件 (14.45 KB)



内置字段列的内置属性名称(绑定实体属性):将和控件实际属性名称绑定,固定名称不要修改,其他属性都可自定义修改,也可增加自定义字段。
甘特图5

2016-06-07 上传

下载附件 (11.83 KB)
甘特图5



两种方法实现任务的进度显示(需要研发6.x的2017-08月底补丁);
1、设置Complete为大于0小于1的小数,即可实现进度;
2、设置CompleteFinish为Start和Finish中间的一个值,同时必须Complete的设置0;也就是优先处理Complete不为0的进度,如果Complete为0,才考虑CompleteFinish的值;


其他
1、KDGanttChartParameter参数如下:(注意,参数中的所有时间必须为相匹配的时间,也就是必须在StartTime和EndTime时间范围内,否则图表无法显示。);
甘特图3

2017-08-04 上传

下载附件 (39.46 KB)
甘特图3




2、设置某一个任务条的颜se:

语法:this.View.GetControl<EntryGrid>(Key).SetTaskBarItemColor(行主键, 填充颜seRGB,边框颜seRGB);
例如:this.View.GetControl<EntryGrid>(Key).SetTaskBarItemColor("00505694-5278-aab4-11e8-e3cb3c42e408","253,254,233","253,254,2");

 

图标赞 12
12人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!

您的鼓励与嘉奖将成为创作者们前进的动力,如果觉得本文还不错,可以给予作者创作打赏哦!

请选择打赏金币数 *

10金币20金币30金币40金币50金币60金币
可用金币: 0