1 function onLoad()
//
在页面初始化的时候执行本函数
2
{
3
//
通过servlet获取甘特图所需要的xml数据
4
SFAjax.loadXml("servlet/dataProvider?uid=" +projectUid+"&action=getRootTask&t="+
new Date().valueOf(),onGanttLoaded);
5 }
6 function onGanttLoaded(doc)
//
doc参数是一个XML文件DOM对象
7
{
8 var gtConfig=
new SFConfig();
//
初始化一个页面上的配置对象
9
gtConfig.setConfig( "SFGantt/container","Div_Gantt" );
//
设置用来显示甘特图的层的ID
10
11 var adapter=
new SFDataXml(doc);
12
13
//
自定扩展一个责任人域,设置一个负责人维护域 Dutier
14
//
设置责任人字段,通知适配器adapter从 xml中读取这个属性,这样Task对象会扩展出 Dutier属性,
15
//
注意第二个参数的大小写与 xml标签相同
16
adapter.addTaskProperty( "Dutier","DUTIER" ,SFDataRender.types.String);
17
//
第二步:用setTaskField函数来设置责任人甘特属性域,域显示方式 headstyle,bodystyle ,inputstyle可使用样式表,支持更灵活的显示方式
18
var field1=
new SFGanttField({width:100,bodyData:'Dutier' ,inputData:'Dutier',headText: '负责人',headStyle:{textAlign:'left' },bodyStyle: {textAlign:'right'}})
19 SFGanttField.setTaskField( "Dutier",field1);
20
21
//
修改已有甘特域的显示属性和输入属性
22
SFGanttField.getTaskField( "OutlineNumber").setHeadText("WBS" );
//
设置显示方式
23
SFGanttField.getTaskField( "Start").setInputHandle(InputHandle_DateTime);
//
设置开始日期输入方式
24
SFGanttField.getTaskField( "Finish").setInputHandle(InputHandle_DateTime);
//
设置结束日期输入方式
25
//
设置甘特图显示字段属性
26
gtConfig.setConfig( "SFGantt/taskFieldNames","StatusIcon,Name,Start,Finish,Duration,Dutier,OutlineNumber" );
//
设置甘特图显示的字段列表
27
28
//
初始化甘特图数据对象
29
gtData=
new SFData(adapter);
30
//
初始化甘特图日志对象,初始化日志对象后,系统才会记录修改日志,用于向后台发送修改内容。设置记录日志内容
31
gtLog=
new SFDataLogging(gtData);
32 gtLog.setTaskFields( "Name,Start,Finish,Summary,PercentComplete,Dutier,Notes" )
33
34
35
//
添加插件
36
//
添加大纲级别插件
37
gtData.addComponent(
new SFDataOutlineComponent());
//
使用向日葵甘特SFDataOutlineComponent数据插件
38
39
//
根据配置和数据产生甘特数据
40
gtMap=
new SFGantt(gtConfig,gtData);
41
42
//
设置甘特图的事件
43
//
增加甘特图事件SFEvent.addListener
44
//
第一个参数为 gantt数据 gtData
45
//
第二个参数为事件名称
46
//
第三个参数为事件激发时的调用函数
47
SFEvent.addListener(gtData, "aftertaskadd",onAfterTaskAdd);
//
添加任务之后调用事件产生唯一顺序号 guid
48
SFEvent.addListener(gtData, "afterlinkadd",onAfterLinkAdd);
//
添加链接之后调用事件产生唯一顺序号 guid
49
SFEvent.addListener(gtData, "aftertaskchange",onAfterTaskChange);
//
任务属性赋值事件
50
SFEvent.addListener(gtMap, "linkclick",onLinkdblClick);
//
链接线点击事件任务属性赋值事件
51
//
计算所有任务的工期,任务都按照固定工期进行运算。
52
initDuration();
53
/*
gtMap.addControl(aaa=new SFGanttProgressLine("2009-12-02 18:00:00",{
54
vertexImg:'
http://www.51diaodu.cn/sfgantt/img/task_head_20.gif
',
55
vertexSize:[10,10],
56
vertexStyle:{border:'solid 1px green'},
57
lineColor:'black',
58
lineWeight:1
59
}));
*/
60
61
//
增加项目进度线
62
pgl=
new SFGanttProgressLine("2004-12-02 18:00:00" );
63 gtMap.addControl(pgl);
64
65
//
甘特图显示,第一个参数用于甘特图初始化显示时的 左边界,第二个参数用于显示比例
66
gtMap.showMap(SFGlobal.getDate( "2009-11-18 00:00:00"),4);
67
68
69 }
70
71
72 function save()
73 {
74
75 var xmlDom=gtLog.getXml();
//
获得更新记录的XML文件
76
var strLog=SFAjax.getXmlString(xmlDom);
77 alert( "发送到后台的更改记录为:\n" +strLog);
78 var params=[];
79
//
在这里计算出此任务的顺序
80
params.push( "action=save");
81 params.push( "t="+
new Date().valueOf());
82 params.push( "uid="+projectUid);
83
84 SFAjax.loadXml("servlet/dataResolver?" +params.join("&"), function(doc)
85 {
86
if(doc.documentElement.getAttribute("errorCode" )=="0")
87 {
88 gtLog.clear();
//
如果存盘成功,就重置所有变更信息
89
alert( "数据保存成功!" );
90 }
91
else
92 {
93 alert( "?"+params.join("&" ));
94 alert(doc.documentElement.firstChild?doc.documentElement.firstChild.nodeValue:"未知错误");
95 }
96
97
98 },
false,strLog);
99
100 }