天天看點

向日葵甘特實戰一:實作零件加工任務的顯示

向日葵甘特實戰一:實作零件加工任務的顯示

最近要完成一個機械加工廠生産管理系統的項目,正好用上向日葵甘特圖元件,我将實戰過程公布如下。

我的第一個任務是顯示零件任務加工過程的甘特圖,并允許使用者調整工序的計劃時間。

我的技術路線如下圖所示:

向日葵甘特實戰一:實作零件加工任務的顯示

首先我要建立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對甘特圖元件

極為重要,它控制了任務之間的父子關系,必須按照1,1.1,1.1.1 這種方式進行進行定義。

3、xml資料中的根任務

      向日葵甘特圖中必須有一個根任務,它的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");

這樣,一個零件任務的甘特圖界面就形成了,如下圖所示

向日葵甘特實戰一:實作零件加工任務的顯示

      哈哈,第一步工作順利完成了。不過我知道路還遠着呢?生産管理系統畢竟太複雜了……

轉載于:https://www.cnblogs.com/tidestone/archive/2008/09/02/1281672.html