文本描述了甘特图插件在K/3系统中的实现细节,包括其字段支持自定义扩展、服务端处理兼容性、时间刻度尺组合策略、甘特图属性设置以及甘特图任务进度显示和颜色设置的方法。服务端除特定接口外,与普通单据体兼容。时间刻度尺目前支持月+日、周+日组合,未来可按需完善。客户端需重写编辑模式,工作量大。甘特图设置包括时间参数配置和颜色设置,参数需匹配时间范围,任务进度可通过设置小数或中间值实现,颜色可通过API设置。
字段支持完全自定义扩展,服务端的处理除了特定接口参数外,其他和普通单据体完全兼容。
时间刻度尺的组合策略几十个,目前只支持常用的两个:月+日,周+日;其他的如 年,月,日,小时,分钟,秒,周,自定义时间段等任意两两组合策略得用到的时候一步一步完善,后续可在抽成独立模型的框架下实现。
(不过客户端就比较悲惨了,Dlh和Dev完全不兼容,服务端数据模型又要兼容,真掉坑里了。另外,编辑模式得全部重写,这部分不放开,工作量非常巨大,相当于又做一个编辑表格单据体,估计最近几个版本都不会支持到)
2016-06-07 上传
下载附件 (93.18 KB)
甘特图1
数据库部分和普通单据体完全兼容:
2016-06-07 上传
下载附件 (110.77 KB)
甘特图2
插件封装得比较简单了
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<EntryGanttGrid>("FGanttChart");
//整体图开始时间(为了好看,往前推一天)
var startDt = DateTime.Parse(this.View.Model.GetValue("FStartDate").ToString()).AddDays(-1);
//整体图结束时间(为了好看,往后推7天)
var endDt = DateTime.Parse(this.View.Model.GetValue("FPlanDate").ToString()).AddDays(7);
//当前可见图页面的日期数量,整体前推后继了8天
var durationDays = new TimeSpan(startDt.Ticks).Subtract(new TimeSpan(endDt.Ticks)).Duration().Days + 8;
var param = new KDGanttChartParameter()
{
//整体图开始时间(为了好看,往前推一天)
StartTime = startDt,
// 每日开始工作时间:上班时间上午9点
WorkingDayStart = startDt.AddDays(1).AddHours(9),
// 每日结束工作时间:下班时间下午6点,也就是18点
WorkingDayEnd = startDt.AddDays(1).AddHours(18),
//整体图结束时间(为了好看,往后推7天)
EndTime = endDt,
//当前可见图页面的日期数量,整体前推后继了8天
NumPerPage = durationDays
};
gantt.SetParameter(param);
}
public override void AfterCreateNewData(EventArgs e)
{
base.AfterCreateNewData(e);
}
}
}
复制代码
KDGanttChartParameter参数如下:(注意,参数中的所有时间必须为相匹配的时间,也就是必须在StartTime和EndTime时间范围内,否则图表无法显示。)
public class KDGanttChartParameter
{
// Summary:
// 任务图结束时间
public DateTime EndTime;
//
// Summary:
// 第一时间单位
public KDScaleType FirstScaleType;
//
// Summary:
// 非工作时间列表
public List<KDTimeInterval> Intervals;
//
// Summary:
// 是否显示当前时间线
public bool IsCurrentTimeLineVisible;
//
// Summary:
// 是否非工作时间高亮显示
public bool IsNonworkingTimeHighlighted;
//
// Summary:
// 非工作时间背景颜se
public string NonworkingTimeBackground;
//
// Summary:
// 依据SecondScaleType属性的设置,确定该NumPerPage值的单位。50以内,避免性能太慢。 单位为:Day,Hour,Minute,Second,其他的Scale都归结到Day
public int NumPerPage;
//
// Summary:
// 第二时间单位
public KDScaleType SecondScaleType;
//
// Summary:
// 任务图开始时间
public DateTime StartTime;
//
// Summary:
// 每日结束工作时间
public DateTime WorkingDayEnd;
//
// Summary:
// 每日开始工作时间
public DateTime WorkingDayStart;
//
// Summary:
// 每周结束工作时间
public DayOfWeek WorkingWeekEnd;
//
// Summary:
// 每周开始工作时间
public DayOfWeek WorkingWeekStart;
}
复制代码
甘特图属性设置,注意主键属性必须定义一个有唯一键约束的字段(用于前驱后继任务设置)。
2017-08-01 上传
内置字段列的内置属性名称(绑定实体属性):将和控件实际属性名称绑定,固定名称不要修改,其他属性都可自定义修改,也可增加自定义字段。
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时间范围内,否则图表无法显示。);
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");
推荐阅读
您的鼓励与嘉奖将成为创作者们前进的动力,如果觉得本文还不错,可以给予作者创作打赏哦!
请选择打赏金币数 *