向日葵甘特实战一:实现零件加工任务的显示

 

最近要完成一个机械加工厂生产管理系统的项目,正好用上向日葵甘特图组件,我将实战过程公布如下。

我的第一个任务是显示零件任务加工过程的甘特图,并允许用户调整工序的计划时间。

我的技术路线如下图所示:

 

 

首先我要建立Web Service, 用于从数据库中提取数据生成甘特图组件所需要的xml数据。Xml数据格式要求可参见

http://www.51diaodu.cn/sfgantt/docs/index.html

 

采用.net发布Web Service很简单,这里不再赘述。但有几点要特别注意:

1、控制任务链接对象的序列化

     由于任务与前置任务属于一对多的关系,所以Task对象中存在PredecessorLinkS数组,这样在.net 生成的web服务WSDL中会多出一个节点PredecessorLinkS,与向日葵甘特图要求的XML格式不一致。程序中我们必须采用如下标记来控制Xml的序列化    <System.Xml.Serialization.XmlElement(elementName:="PredecessorLink", IsNullable:=False)> _    Public PredLinkS() As PredecessorLink

 

2、大纲级别

      任务属性中的大纲级别OutlineNumber对甘特图组件

极为重要,它控制了任务之间的父子关系,必须按照11.1,1.1.1 这种方式进行进行定义。

 

3xml数据中的根任务

 

      向日葵甘特图中必须有一个根任务,它的OutlineNumber=0,计划开始属性Start最好为所有任务的最早计划时间,这样便于Gantt图初始化时间的显示。

 

4、任务链接类型的显示

LinkType=0 表示完成-完成FF

LinkType=1 表示完成-开始 FS

LinkType=2 表示开始-完成 FS

LinkType=3 表示开始-开始 SS

 

 

Web服务建立完之后,我们就获取了甘特图组件显示所需要的数据。但这样还不行,因为web service进行了SOAP协议封装,所得到的Dom对象无法直接为向日葵甘特图所用,必须采用如下语句进行转化:

var doc=SFAjax.createDocument();

doc.appendChild(loader.xmlDoc.documentElement.firstChild.firstChild.firstChild);//firstChild的级数随需而变

 

获取到向日葵甘特所需要的Dom对象,我们就可以进行Gantt图的初始化了。

因为我们要做生产管理软件,所需要的属性当然与向日葵甘特图缺省提供的属性全然不同了。我们先扩展任务对象,向日葵甘特图会自动从XML中获取相应节点,例如扩展“计划数”属性:

adapter.addTaskProperty("PlanQty","PlanQty",SFDataRender.types.Float);

 

任务属性扩展后,我们还需将其定义到Gantt任务域中

SFGanttField.addTaskField("PlanQty",50,'计划数',SFGanttField.NormalHead,SFGanttField.NormalBody,SFGanttField.NormalInput,"PlanQty","PlanQty");

 

这样,一个零件任务的甘特图界面就形成了,如下图所示

 

 

      哈哈,第一步工作顺利完成了。不过我知道路还远着呢?生产管理系统毕竟太复杂了……

posted on 2008-09-02 01:01  运筹帷幄  阅读(2341)  评论(0编辑  收藏  举报