上海普加軟件有限公司
訪問 http://m.bjkrt.com/download/
獲得軟件開發(fā)包后解壓縮,并把解壓縮后的項(xiàng)目文件,放入到Web項(xiàng)目。
如果是.Net版本,可以直接用Visual Studio以"打開網(wǎng)站"的方式打開運(yùn)行。
如果是Java版本,請(qǐng)使用Eclipse以"導(dǎo)入項(xiàng)目"的方式導(dǎo)入打開。
在下載解壓縮后的文件夾內(nèi),有一個(gè)"dbsql"目錄,里面有mssql.sql、oracle.sql、mysql.sql數(shù)據(jù)庫表文件。
請(qǐng)使用這里的表結(jié)構(gòu)創(chuàng)建一個(gè)數(shù)據(jù)庫。
比如新建一個(gè)數(shù)據(jù)庫,名字為:testproject。然后把拷貝的SQL運(yùn)行一下,就生成了plus_project、plus_task、plus_resource表。
創(chuàng)建數(shù)據(jù)庫表完成后,.Net請(qǐng)?jiān)赪eb.config中修改數(shù)據(jù)庫連接配置信息。
Java請(qǐng)?jiān)趕rc\com\plusoft\util\SqlHelper.java中修改數(shù)據(jù)庫連接配置信息。
運(yùn)行"demo/ImportProject.aspx"文件。選擇本地MS PROJECT XML文件,上傳導(dǎo)入到數(shù)據(jù)庫中。
如果導(dǎo)入成功,會(huì)彈出提示信息,可以選擇跳轉(zhuǎn)到"Project.html"查看剛才導(dǎo)入的項(xiàng)目數(shù)據(jù)。
如果導(dǎo)入失敗,會(huì)彈出異常提示,定位解決錯(cuò)誤。
(注:通常導(dǎo)入錯(cuò)誤都是數(shù)據(jù)庫配置信息有誤;或文件選擇錯(cuò)誤。)
必須導(dǎo)入"Upload\軟件開發(fā)-100.xml"項(xiàng)目文件,它是作為DEMO示例的示例項(xiàng)目數(shù)據(jù)。
運(yùn)行"demo/NewProject.aspx"文件。此文件使用服務(wù)端Project對(duì)象,創(chuàng)建一個(gè)空項(xiàng)目,并保存到項(xiàng)目中。
運(yùn)行"demo/Projects.aspx"文件,打開一個(gè)當(dāng)前項(xiàng)目列表,可以選擇“打開”項(xiàng)目,跳轉(zhuǎn)到Project.html,查看項(xiàng)目。
.Net開發(fā)包目錄文件一一如下:
以下詳細(xì)介紹PlusProject是如何從數(shù)據(jù)庫加載數(shù)據(jù),以及如何保存到數(shù)據(jù)庫內(nèi)的。
projectapi.aspx是用來處理從數(shù)據(jù)庫加載和保存項(xiàng)目的。里面有兩個(gè)重要方法:LoadProject和SaveProject。
開發(fā)者往往需要改造這個(gè)類,修改項(xiàng)目加載和保存的實(shí)現(xiàn)方式,以滿足開發(fā)的需要。
PlusProject并不關(guān)心和限制開發(fā)者如何加載和保存項(xiàng)目數(shù)據(jù),只需要在創(chuàng)建和使用PlusProject時(shí),提供好符合數(shù)據(jù)格式的JSON數(shù)據(jù)即可。
所以開發(fā)者可以使用任意的數(shù)據(jù)庫,以及數(shù)據(jù)庫操作方式,靈活性和可控性非常高。
在DBProject的LoadProject方法中,根據(jù)項(xiàng)目UID,加載項(xiàng)目數(shù)據(jù)和任務(wù)數(shù)據(jù),并進(jìn)行數(shù)據(jù)格式轉(zhuǎn)換工作,最后得到一個(gè)Hashtable對(duì)象返回。
開發(fā)者可以參考LoadProject方法的代碼,使用自己熟悉的數(shù)據(jù)庫操作方式,比如IBatis、Hibernate等第三方類庫,查詢數(shù)據(jù)后,按項(xiàng)目數(shù)據(jù)結(jié)構(gòu)進(jìn)行格式轉(zhuǎn)換工作。
參考SaveProject,DoSaveProject方法。
對(duì)任務(wù)屬性的擴(kuò)展,主要處理如下幾個(gè)地方:
plus_task表的新字段,是用來存放新字段數(shù)據(jù)的;
在加載數(shù)據(jù)時(shí),確保任務(wù)對(duì)象上有新字段的屬性值。因?yàn)槿蝿?wù)對(duì)象是一個(gè)Hashtable,所以這一點(diǎn)極其簡(jiǎn)單。
在保存數(shù)據(jù)時(shí),修改任務(wù)的"insert"語句,把新字段的值寫入到數(shù)據(jù)庫,保存起來。
做好這幾點(diǎn),其實(shí)任務(wù)的屬性已經(jīng)擴(kuò)展了。
下面只是需要一個(gè)界面顯示和操作的載體,一般用表格列來完成。
關(guān)于表格列的擴(kuò)展,請(qǐng)參考:自定義表格列示例。
PlusProject針對(duì)任務(wù)的各種標(biāo)準(zhǔn)屬性,如"ID","Name","Start","Finish","PercentComplete","Department","Principal"等提供了相應(yīng)的標(biāo)準(zhǔn)列。
開發(fā)者在創(chuàng)建標(biāo)準(zhǔn)任務(wù)屬性范圍內(nèi)的列時(shí),直接使用這里例舉的標(biāo)準(zhǔn)列用來創(chuàng)建表格列集合。
使用標(biāo)準(zhǔn)列示例代碼如下:
var project = new PlusProject(); project.setColumns([ new PlusProject.IDColumn(), new PlusProject.StatusColumn(), new PlusProject.NameColumn(), new PlusProject.PredecessorLinkColumn(), new PlusProject.PercentCompleteColumn(), new PlusProject.DurationColumn(), new PlusProject.StartColumn(), new PlusProject.FinishColumn(), new PlusProject.WorkColumn(), new PlusProject.DepartmentColumn(), new PlusProject.PrincipalColumn(), new PlusProject.AssignmentsColumn() ]);
列名 | 任務(wù)屬性 | 描述 |
PlusProject.IDColumn | ID | 任務(wù)序號(hào)。 |
PlusProject.WBSColumn | WBS | WBS編碼。 |
PlusProject.NameColumn | Name | 任務(wù)名稱。 |
PlusProject.DurationColumn | Duration | 工期。 |
PlusProject.StartColumn | Start | 開始日期。 |
PlusProject.FinishColumn | Finish | 完成日期。 |
PlusProject.PercentCompleteColumn | PercentComplete | 完成百分比。 |
PlusProject.WorkColumn | Work | 工時(shí)。 |
PlusProject.WeightColumn | Weight | 權(quán)重。 |
PlusProject.PriorityColumn | Priority | 重要級(jí)別。 |
PlusProject.OutlineNumberColumn | OutlineNumber | 大綱字段。 |
PlusProject.OutlineLevelColumn | OutlineLevel | 任務(wù)層次。 |
PlusProject.ConstraintDateColumn | ConstraintDate | 限制日期。 |
PlusProject.ConstraintTypeColumn | ConstraintType | 限制類型。 |
PlusProject.PredecessorLinkColumn | PredecessorLink | 前置任務(wù)。 |
PlusProject.StatusColumn | 無 | 狀態(tài)列。它使用圖標(biāo)反映任務(wù)的一些狀態(tài),比如受限制、已完成、有注釋等。 |
PlusProject.DepartmentColumn | Department | 部門。 |
PlusProject.PrincipalColumn | Principal | 負(fù)責(zé)人。 |
PlusProject.AssignmentsColumn | Assignments | 資源名稱。 |
PlusProject.ActualStartColumn | ActualStart | 實(shí)際開始日期。 |
PlusProject.ActualFinishColumn | ActualFinish | 實(shí)際完成日期。 |
PlusProject.Critical2Column | Critical2 | 手動(dòng)設(shè)置關(guān)鍵任務(wù)。 |
PlusProject.ManualColumn | Manual | 任務(wù)模式。 |
開發(fā)者可以根據(jù)自己擴(kuò)展的任務(wù)屬性類型,來創(chuàng)建自己的列。
具體請(qǐng)參考"自定義列示例"。
通過監(jiān)聽處理"drawcell"事件,可以根據(jù)任務(wù)信息,設(shè)置行、單元格樣式,以及自定義單元格Html內(nèi)容。
project.on("drawcell", function (e) { var task = e.record, column = e.column, field = e.field; //單元格樣式 if (column.name == "Name") { e.cellCls = "mycellcls"; } //行樣式 if (task.Summary == 1) { e.rowCls = "myrowcls"; } ////自定義單元格Html。如果是工期列, 并且工期大與5天, 顯示紅色 if (field == "Name" && task.Duration > 5) { e.cellHtml = '<b style="color:red;">' + task.Name + '</b>'; } if (field == "Name" && task.Duration <= 2) { e.cellHtml = '<span style="color:blue;">' + task.Name + '</span>'; } if (task.Duration == 0) { e.rowCls = "deletetask"; } });
示例請(qǐng)參考"自定義顯示"
通過監(jiān)聽表格的"cellbeginedit"事件,可以控制每個(gè)行、每個(gè)單元格是否可編輯。
//控制單元格是否可編輯 project.on("cellbeginedit", function (e) { var task = e.record, column = e.column, field = e.field; if (task.Summary == 1) { e.cancel = true; } if (field == 'Duration') { e.cancel = true; } });
示例請(qǐng)參考"控制單元格可編輯"
開發(fā)者可以控制右側(cè)條形圖的HTML外觀,達(dá)到任意的條形圖效果:
//1)自定義條形圖外觀顯示 project.on("drawitem", function (e) { var item = e.item; var left = e.itemBox.left, top = e.itemBox.top, width = e.itemBox.width, height = e.itemBox.height; if (!item.Summary && !item.Milestone) { var percentWidth = width * (item.PercentComplete / 100); e.itemHtml = '<div id="' + item._id + '" class="myitem" style="left:' + left + 'px;top:' + top + 'px;width:' + width + 'px;height:' + (height) + 'px;">'; e.itemHtml += '<div style="width:' + (percentWidth) + 'px;" class="percentcomplete"></div>'; e.itemHtml += '</div>'; //e.ItemHtml = '<a style="left:'+left+'px;top:'+top+'px;width:'+width+'px;height:'+(height-2)+'px;" class="myitem">111</a>'; } }); //2)自定義條形圖提示信息 project.on('itemtooltipneeded', function (e) { var task = e.task; e.tooltip = "<div>任務(wù):" + task.Name + "</div>" // + "<div ><div style='float:left;'>進(jìn)度:<b>"+task.PercentComplete + "%</b></div>" // + "<div style='float:right;'>工期:"+task.Duration + "日</div></div>" + "<div style='clear:both;'>開始日期:" + mini.formatDate(task.Start, 'yyyy-MM-dd') + "</div>" + "<div>完成日期:" + mini.formatDate(task.Finish, 'yyyy-MM-dd') + "</div>"; });
示例請(qǐng)參考"自定義顯示條形圖"
彈出右鍵菜單時(shí),根據(jù)當(dāng)前選擇的行,顯示隱藏、啟用禁用菜單項(xiàng)。
示例請(qǐng)參考"自定義右鍵菜單"
首先,對(duì)于jQuery, YUI, Prototype.js等框架來說,它們對(duì)頁面的操作基于原始Dom元素的。
所以,你可以不用做任何額外的處理,按PlusProject正常的例子,把項(xiàng)目甘特圖對(duì)象加入到頁面元素就可以了。
其次,對(duì)于ExtJS這樣封裝度很高的框架,可以從Ext對(duì)象找到它的dom,然后render加入即可。使用代碼如下:
//獲取ext控件對(duì)象 var extControl = Ext.get(id); //設(shè)置尺寸為100%自適應(yīng) project.setStyle("width:100%;height:100%"); //把project加入到ext控件對(duì)象的dom屬性中 project.render(extControl.dom);
只需要這樣設(shè)置后,PlusProject就能在Ext的布局面板中自動(dòng)調(diào)整尺寸大小,看上去跟Ext原生的控件一樣了。
如果要顯示他語言界面,只需要引用locale文件夾下資源js文件即可,例如英文資源包使用如下:
<script src="../scripts/miniui/locale/en_US.js" type="text/javascript"></script>
語言本地化(英語)示例,請(qǐng)查看這里。
PlusProject項(xiàng)目數(shù)據(jù)包含如下信息:項(xiàng)目本身數(shù)據(jù)、日歷、任務(wù)列表、部門列表、負(fù)責(zé)人列表等。
其中,任務(wù)會(huì)跟部門、負(fù)責(zé)人有分配關(guān)系。
本節(jié)使用JSON格式描述項(xiàng)目數(shù)據(jù)結(jié)構(gòu),對(duì)應(yīng)到服務(wù)端數(shù)據(jù),轉(zhuǎn)換類型如下:
//普加項(xiàng)目管理中間件數(shù)據(jù)結(jié)構(gòu) { UID: 100, Name: 'ProjectName', StartDate: '2007-01-01T08:00:00', FinishDate: '2007-05-14T15:00:00', CalendarUID: 1, //日歷 Calendars: [ { UID: 1, Name: 'CalendarName', WeekDays: [ //工作周: DayType(1~7) { DayType: 1, DayWorking: 1 //工作日1, 非工作日0 } ], Exceptions: [ //例外日期: DayType = 0 { DayType: 0, DayWorking: 0, Name: '', TimePeriod: { //例外的日期范圍 FromDate: '2007-01-01T00:00:00', ToDate: '2007-01-02T23:59:59' } } ] } ], //任務(wù)集合 Tasks: [ { UID: 1, //必要任務(wù)UID(唯一性標(biāo)識(shí)符) Name: '', //任務(wù)名稱 Start: '2010-01-01T00:00:00',//必要DateTime。開始日期 Finish: '2010-01-01T23:59:59',//必要DateTime。完成日期 Duration: 24, //必要Number。工期 PercentComplete: 100, //必要Number。進(jìn)度 Manual: 0, //手動(dòng)模式。0是自動(dòng),1是手動(dòng)。 ConstraintType: 1, //限制類型:0越早越好;1越晚越好;2必須開始于;3必須完成于; //4不得早于...開始;5不得晚于...開始;6不得早于...完成;7不得晚于...完成 ConstraintDate: null, //DateTime。限制日期 FixedDate:1, //1或0。是否固定日期(僅限于摘要任務(wù)使用) ID: 1, //Number。序號(hào) OutlineNumber: '1.2.1', //體現(xiàn)樹形層次和順序 OutlineLevel: 1, //層次 Work: 8, //Number。工時(shí) Weight: 100, //Number。權(quán)重 Milestone: 1, //1或0。里程碑 Summary: 1, //1或0。摘要任務(wù) Critical: 1, //1或0。關(guān)鍵任務(wù) Priority: 200, //Number。重要級(jí)別 Notes: '', //任務(wù)備注 PredecessorLink: [ //前置任務(wù)(0FF,1FS,2SF,3SS) {PredecessorUID: 2,Type: 1,LinkLag: 0}, ...... ], Assignments: [ //資源分配關(guān)系 {ResourceUID: 2, Units: 1}, ...... ], Department: '1', //部門 Principal: '1,2' //負(fù)責(zé)人, children: [ //下一級(jí)子任務(wù), 體現(xiàn)樹形結(jié)構(gòu) ...... ] } ], //資源集合 Resources: [ {UID: 1, Name: '市場(chǎng)部', Type: 1, MaxUnits: 1}, ...... ], //部門集合 Departments: [ {UID: 1, Name: '市場(chǎng)部'}, ...... ], //負(fù)責(zé)人集合 Principals: [ {UID: 1, Name: '張三', Department: 1}, ...... ] }
字段 | 類型 | 描述 |
UID_ | varchar | 項(xiàng)目唯一標(biāo)識(shí)符 |
NAME_ | varchar | 項(xiàng)目名稱 |
STARTDATE_ | datetime | 項(xiàng)目開始日期 |
FINISHDATE_ | datetime | 項(xiàng)目完成日期 |
LASTSAVED_ | varchar | 最后保存日期 |
CALENDARS_ | varchar | 日歷數(shù)據(jù)(JSON字符串) |
CALENDARUID_ | varchar | 項(xiàng)目日歷UID |
字段 | 類型 | 描述 |
UID_ | varchar | 任務(wù)唯一標(biāo)識(shí)符 |
ID_ | int | 序號(hào)(是一個(gè)數(shù)字,體現(xiàn)任務(wù)的前后順序) |
PARENTTASKUID_ | varchar | 父任務(wù)UID(體現(xiàn)樹形結(jié)構(gòu)) |
NAME_ | varchar | 任務(wù)名稱 |
START_ | datetime | 開始日期 |
FINISH_ | datetime | 完成日期 |
DURATION_ | int | 工期 |
WORK_ | int | 工時(shí) |
PERCENTCOMPLETE_ | int | 完成百分比 |
WEIGHT_ | int | 權(quán)重 |
CONSTRAINTTYPE_ | int | 任務(wù)限制類型。 |
CONSTRAINTDATE_ | datetime | 任務(wù)限制日期 |
MILESTONE_ | int | 里程碑 |
SUMMARY_ | int | 摘要任務(wù) |
CRITICAL_ | int | 關(guān)鍵任務(wù) |
PRIORITY_ | int | 重要級(jí)別 |
NOTES_ | varchar | 備注 |
DEPARTMENT_ | varchar | 所屬部門。如"1"。 |
PRINCIPAL_ | varchar | 任務(wù)負(fù)責(zé)人。如"101,220,201"。 |
PREDECESSORLINK_ | varchar | 前置任務(wù)(JSON字符串)。如"[{PredecessorUID: 2,Type: 1,LinkLag: 0}, ...]" |
FIXEDDATE_ | int | 限制日期(摘要任務(wù)專用) |
PROJECTUID_ | varchar | 項(xiàng)目UID |
ACTUALSTART_ | datetime | 實(shí)際開始日期 |
ACTUALSTART_ | datetime | 實(shí)際完成日期 |
ACTUALDURATION_ | int | 實(shí)際工期 |
注意:這些表是普加軟件默認(rèn)提供的項(xiàng)目和任務(wù)表。
使用者可以完全脫離我們的表結(jié)構(gòu)設(shè)計(jì),實(shí)現(xiàn)自定義的表。
只需要在DBProject類的LoadProject方法中,提供符合普加項(xiàng)目數(shù)據(jù)結(jié)構(gòu)定義的數(shù)據(jù)即可。
屬性可以從對(duì)象直接讀取,但是不能進(jìn)行賦值操作。如果想對(duì)屬性進(jìn)行賦值,必須使用提供的方法。
var project = new PlusProject(); var visible= project.visible; //正確 project.visible= true; //錯(cuò)誤!!! project.setVisible(true); //正確
屬性 | 類型 | 描述 |
readOnly | Boolean | 是否只讀。 |
visible | Boolean | 是否顯示。 |
width | Number | 寬度。 |
height | Number | 高度。 |
showTableView | Boolean | 是否顯示任務(wù)表格。 |
showGanttView | Boolean | 是否顯示條形圖。 |
showLinkLines | Boolean | 是否顯示箭頭連線。 |
showGridLines | Boolean | 是否條形圖表格線。 |
timeLines | Array | 時(shí)間線數(shù)組。[ {date: new Date(2007, 0, 3), text: "時(shí)間線"}, {date: new Date(2007, 0, 5), text: "時(shí)間線2", style: "width:2px;background:red;"} ] |
rowHeight | Number | 行高。 |
allowDragDrop | Boolean | 是否允許任務(wù)行拖拽。 |
multiSelect | Boolean | 是否允許多選任務(wù)。 |
allowResize | Boolean | 是否允許拖拽調(diào)整甘特圖。 |
enableManualSchedule | Boolean | 是否啟用手動(dòng)模式。默認(rèn)false。 |
allowSummaryLink | Boolean | 是否允許摘要任務(wù)有前置關(guān)系。默認(rèn)true。 |
allowLinkBars | Boolean | 是否允許拖拽鏈接任務(wù)。默認(rèn)true。 |
viewModel | String | 甘特圖顯示模式。默認(rèn)'gantt'??蛇x項(xiàng)有:'gantt', 'track'。 |
editOnDblClick | Boolean | 是否雙擊編輯單元格。默認(rèn)false。 |
showDirty | Boolean | 是否顯示修改痕跡。默認(rèn)true。 |
allowProjectDateRange | Boolean | 是否使用項(xiàng)目任務(wù)的最早和最晚日期作為甘特圖的開始和完成日期。默認(rèn)true。 |
allowSyncComplete | Boolean | 是否同步計(jì)算百分比。默認(rèn)true。 |
enableManualSchedule | Boolean | 是否啟用手動(dòng)任務(wù)模式。默認(rèn)false。 |
showCriticalPath | Boolean | 是否顯示關(guān)鍵路徑。默認(rèn)false。 |
allowOrderProject | Boolean | 是否允許編輯時(shí)自動(dòng)排程計(jì)算。默認(rèn)true。 |
方法 | 參數(shù)類型 | 描述 |
setAllowLinkBars(Boolean) | 設(shè)置是否允許拖拽鏈接任務(wù)。 | |
setViewModel(String) | 設(shè)置甘特圖顯示模式。可選項(xiàng)有:'gantt', 'track'。 | |
setEditOnDblClick(Boolean) | 設(shè)置是否雙擊編輯單元格。 | |
setShowDirty(Boolean) | 設(shè)置是否顯示修改痕跡。 | |
setShowLabel(Boolean) | 設(shè)置是否顯示文本。 | |
refresh() | 刷新甘特圖。 | |
addTaskCls(task, cls) | 增加任務(wù)樣式。 | |
removeTaskCls(task, cls) | 刪除任務(wù)樣式。 | |
getDateByPageX(x) | 根據(jù)頁面坐標(biāo)x獲取日期。 | |
getXByDate(date) | 根據(jù)日期獲取偏移x。 | |
orderProject() | 手動(dòng)排程計(jì)算。 | |
setStartDate(date) | 修改項(xiàng)目開始日期(同步修改任務(wù)限制日期,達(dá)到項(xiàng)目日期移動(dòng)的效果)。 | |
setResources(data) | 設(shè)置項(xiàng)目資源數(shù)組。 | |
isChanged() | 是否修改過數(shù)據(jù) | |
setStyle(String) | 設(shè)置樣式,比如:gantt.setStyle("width:100%;height:400px")。 | |
loadData(Object) | Object:參考項(xiàng)目JSON數(shù)據(jù)。 | 加載項(xiàng)目JSON對(duì)象。 |
getData() | 返回項(xiàng)目JSON對(duì)象。 | |
getTaskList() | 獲得任務(wù)數(shù)組。 | |
getRemovedTasks() | 返回被刪除的任務(wù)集合。 | |
acceptChanges() | 恢復(fù)任務(wù)狀態(tài)(撤銷任務(wù)增加、刪除、修改標(biāo)記)。 | |
newProject() | 創(chuàng)建新項(xiàng)目。 | |
setColumns( Array ) | 設(shè)置表格列集合。 | |
getColumns( ) | 獲取表格列數(shù)組。 | |
updateColumn( column, options) | 更新列屬性。比如:project.updateColumn(column, {visible: false}); | |
getColumn( name) | 根據(jù)列名獲取列對(duì)象。 | |
getColumnAt( index ) | 根據(jù)列索引獲取列對(duì)象。 | |
setTreeColumn( String ) | 設(shè)置樹形節(jié)點(diǎn)列。 | |
frozenColumn( start, end ) | 鎖定列。 | |
unfrozenColumn( ) | 取消鎖定列。 | |
findTasks(field, value) | field:String。如"Duration"。 value:Object。屬性值。 |
返回符合條件的任務(wù)集合。 |
getTask(taskUID) | 根據(jù)任務(wù)UID,獲取任務(wù)。 | |
getTaskByID(taskID) | 根據(jù)任務(wù)ID,獲取任務(wù)。 | |
filter(fn) | 過濾任務(wù)。project.filter(function(task){ if(task.Duration == 2) return true; else return false; }); |
|
clearFilter() | 取消過濾任務(wù) | |
sort(fn) | 排序任務(wù) | |
clearSort() | 取消排序 | |
getSelected() | 獲取選中的任務(wù)。 | |
getSelecteds() | 獲取選中的任務(wù)集合。 | |
isSelected(task) | 判斷是否選中任務(wù)。 | |
select(task) | 選中任務(wù)。 | |
deselect(task) | 取消選中任務(wù)。 | |
selects(Array) | 選中多個(gè)任務(wù)。 | |
deselects(Array) | 取消選中多個(gè)任務(wù)。 | |
selectAll() | 選中所有任務(wù)。 | |
deselectAll() | 取消選中所有任務(wù)。 | |
getParentTask(task) | 獲取父任務(wù)對(duì)象。 | |
getChildTasks(task) //下一級(jí)任務(wù) | 獲取子任務(wù)數(shù)組。 | |
getAllChildTasks(task) | 獲取所有子任務(wù)數(shù)組。 | |
getAncestorTasks(task) | 獲取父級(jí)任務(wù)數(shù)組。 | |
isAncestor(parentTask, task) | 判斷兩任務(wù)之間是否有父子關(guān)系。 | |
eachChild(task, fn, scope) | 遍歷下一級(jí)子節(jié)點(diǎn)。 | |
cascadeChild(task, fn, scope) | 遍歷所有子節(jié)點(diǎn)。 | |
bubbleParent(task, fn, scope) | 遍歷父級(jí)子節(jié)點(diǎn)。 | |
newTask() | 新建任務(wù)。此時(shí)并沒有加入到項(xiàng)目中。 | |
addTask(task) addTask(task, index) addTask(task, action, parentTask) |
task:Object。新任務(wù)對(duì)象。 index:Number。加入的索引位置。 action:String。加入的方式,before/after/add。 parentTask:父任務(wù)。 |
新增任務(wù)。 |
removeTask(task) | 刪除任務(wù)。 | |
updateTask(task, property, value) updateTask(task, keyValues) |
property:String。任務(wù)屬性名,如"Start"。 value:Object。屬性值。 keyValues:Object。鍵值對(duì),如{Name:'測(cè)試完成', PercentComplete: 0} |
更新任務(wù)屬性。 |
moveTask(task, targetTask, action) | action:String。"before"/"after"/"add" targetTask:目標(biāo)任務(wù) action:移動(dòng)方式 |
移動(dòng)任務(wù)。 |
moveUpTask(task) | 上移任務(wù)。 | |
moveDownTask(task) | 下移移任務(wù)。 | |
upgradeTask(task) | 升級(jí)任務(wù)。 | |
downgradeTask(task) | 降級(jí)任務(wù)。 | |
addTasks(tasks, index, parentTasks)
addTasks(tasks, action, parentTasks) |
tasks:Array。新任務(wù)數(shù)組。 index:Number/"before"/"after"/"add"。加入方式。 parentTasks:Array。父任務(wù)數(shù)組。 |
批量新增任務(wù)。 |
removeTasks(tasks) | 批量刪除任務(wù)。 | |
updateTasks(tasks, keyValues) |
tasks:Array。任務(wù)數(shù)組。 keyValues:Object。鍵值對(duì),如{Name:'測(cè)試完成', PercentComplete: 0} |
批量修改任務(wù)。 |
collapseAll ( ) | 折疊所有任務(wù)。 | |
expandAll ( ) | 展開所有任務(wù)。 | |
collapseLevel( Number ) | 折疊某層級(jí)任務(wù)。 | |
expandLevel( Number ) | 展開某層級(jí)任務(wù)。 | |
collapse(task) | 折疊任務(wù)。 | |
expand(task) | 展開任務(wù)。 | |
isExpanded(task) | 任務(wù)是否展開。 | |
setShowTableView( Boolean ) | 設(shè)置表格是否顯示。 | |
setShowGanttView( Boolean ) | 設(shè)置條形圖是否顯示。 | |
setTableViewExpanded( Boolean ) | 設(shè)置表格折疊。 | |
setGanttViewExpanded( Boolean ) | 設(shè)置條形圖折疊。 | |
setTableViewWidth( Number ) | 設(shè)置表格寬度。 | |
setGanttViewWidth( Number ) | 設(shè)置條形圖寬度。 | |
setShowLinkLines( Boolean ) | 設(shè)置是否顯示箭頭連線。 | |
setShowCritical( Boolean ) | 設(shè)置是否顯示關(guān)鍵路徑 | |
setShowGridLines( Boolean ) | 設(shè)置是否顯示條形圖背景表格線。 | |
setTimeLines( Array ) | 設(shè)置項(xiàng)目時(shí)間線。 | |
setRowHeight( Number ) | 設(shè)置行高。 | |
setMultiSelect( Boolean ) | 設(shè)置是否多選任務(wù)。 | |
setAllowDragDrop( Boolean ) | 設(shè)置是否允許任務(wù)行拖拽。 | |
setTopTimeScale( String ) | String:時(shí)間刻度。 "year/halfyear/quarter/month/week/day/hour" |
設(shè)置頂層時(shí)間刻度。 |
setBottomTimeScale( String ) | 同上 |
設(shè)置底層時(shí)間刻度。(底層必須比頂層要?。?/td> |
zoomIn( ) | 放大時(shí)間刻度 | |
zoomOut( ) | 縮小時(shí)間刻度 | |
scrollIntoView(task) | 定位顯示任務(wù)。 | |
getCalendars( ) | 獲取項(xiàng)目日歷集合。 | |
setCalendars( Array ) | 設(shè)置項(xiàng)目日歷集合。 | |
setCalendarUID( calendarUID ) | 切換項(xiàng)目日歷。 | |
setScrollTop( Number ) | 設(shè)置豎向滾動(dòng)條偏移。 |
通過如下方式監(jiān)聽事件:
functon onTaskDblClick(e){ var project = e.source; var task = e.task; //e是事件對(duì)象, 具體請(qǐng)看每個(gè)事件的"參數(shù)類型" } project.on('taskdblclick', onTaskDblClick);
事件名稱 | 事件對(duì)象 | 描述 |
drawcell |
{ source: Object, //甘特圖對(duì)象 record: Object, //任務(wù)對(duì)象 column: Object, //列對(duì)象 field: String, //屬性名 value: Object, //單元格值 cellHtml: Stirng//單元格內(nèi)容HTML } |
繪制單元格時(shí)發(fā)生。 |
drawitem |
{ source: Object, //甘特圖對(duì)象 item: Object, //條形圖,任務(wù)對(duì)象 itemBox: Object, //條形圖的坐標(biāo)尺寸 itemHtml: Stirng//單元格內(nèi)容HTML } |
繪制條形圖時(shí)發(fā)生。 |
taskclick |
{ source: Object, //甘特圖對(duì)象 task: Object //任務(wù)對(duì)象 } |
單擊任務(wù)時(shí)發(fā)生。 |
taskdblclick |
{ source: Object, //甘特圖對(duì)象 task: Object //任務(wù)對(duì)象 } |
雙擊任務(wù)時(shí)發(fā)生。 |
taskdragdrop |
{ source: Object, //甘特圖對(duì)象 tasks: Array, //被拖拽的任務(wù)集合 targetTask: Object, //目標(biāo)任務(wù) action: String, //投放方式:before,after,append cancel: Boolean //是否取消操作 } |
拖拽行釋放時(shí)發(fā)生。 |
cellbeginedit |
{ source: Object, //甘特圖對(duì)象 record: Object, //任務(wù)對(duì)象 column: Object, //列對(duì)象 field: String, //屬性名 value: Object, //單元格值 cancel: Boolean //是否取消操作 } |
單元格開始編輯時(shí)發(fā)生 |
CellCommitEdit |
{ source: Object, //甘特圖對(duì)象 record: Object, //任務(wù)對(duì)象 column: Object, //列對(duì)象 field: String, //屬性名 value: Object, //單元格值 cancel: Boolean //是否取消操作 } |
單元格提交編輯值時(shí)發(fā)生 |
itemdragstart |
{ source: Object, //甘特圖對(duì)象 item: Object, //任務(wù)對(duì)象 action: String, //拖拽操作: |
條形圖開始拖拽時(shí)發(fā)生。 |
itemdragcomplete |
{ source: Object, //甘特圖對(duì)象 item: Object, //任務(wù)對(duì)象 action: String, //拖拽操作: |
條形圖完成拖拽時(shí)發(fā)生。 |
collapsetask |
{ source: Object, //甘特圖對(duì)象 task: Object //任務(wù)對(duì)象 } |
任務(wù)折疊時(shí)發(fā)生。 |
expandetask |
{ source: Object, //甘特圖對(duì)象 task: Object //任務(wù)對(duì)象 } |
任務(wù)展開時(shí)發(fā)生。 |
beforelinkcreate |
{ source: Object, //甘特圖對(duì)象 link: Object //鏈接對(duì)象 } |
鏈接在圖表區(qū)鼠標(biāo)拖拽創(chuàng)建前引發(fā),可取消本次操作。示例代碼:
project.on("beforelinkcreate", function (e) { var link = e.link; var task = project.getTask(link.TaskUID); var preTask = project.getTask(link.PredecessorUID); if (task.Name == "行為需求分析") { e.cancel = true; } }); |
linkcreate |
{ source: Object, //甘特圖對(duì)象 link: Object //鏈接對(duì)象 } |
鏈接在圖表區(qū)鼠標(biāo)拖拽創(chuàng)建時(shí)引發(fā)。示例代碼:
project.on("linkcreate", function (e) { var link = e.link; var task = project.getTask(link.TaskUID); var preTask = project.getTask(link.PredecessorUID); alert("-------------創(chuàng)建鏈接-------------\n任務(wù):" + task.Name + "\n前置任務(wù):" + preTask.Name + "\n鏈接類型:" + link.Type); }); |
linkremove |
{ source: Object, //甘特圖對(duì)象 link: Object //鏈接對(duì)象 } |
鏈接在圖表區(qū)域通過鼠標(biāo)雙擊刪除時(shí)引發(fā)。示例代碼:
project.on("linkremove", function (e) { var link = e.link; var task = project.getTask(link.TaskUID); var preTask = project.getTask(link.PredecessorUID); alert("-------------創(chuàng)建鏈接-------------\n任務(wù):" + task.Name + "\n前置任務(wù):" + preTask.Name + "\n鏈接類型:" + link.Type); }); |