夫妇交换性3中文字幕A片_欧美喷潮久久久XXXXx_精品人妻大屁股白浆无码_国产特级毛片AAAAAA_无码无套少妇毛多18P_嗯啊开小嫩苞好深啊H服务员_日韩精品人妻系列无码AV东京_手机久草视频分类在线观看_中国videos18高清hd_

PlusProject 二次開發(fā)指南 V5.0

上海普加軟件有限公司

目錄

  1. 安裝部署
  2. 項(xiàng)目文件目錄介紹
  3. 二次開發(fā)工作
    1. 加載數(shù)據(jù)
    2. 保存數(shù)據(jù)(全部)
    3. 保存數(shù)據(jù)(局部)
    4. 擴(kuò)展任務(wù)屬性
    5. 自定義標(biāo)準(zhǔn)列
    6. 自定義列
    7. 自定義表格:行樣式、單元格樣式、單元格內(nèi)容
    8. 自定義條形圖顯示
    9. 控制單元格可編輯
    10. 自定義右鍵菜單
    11. 集成到第三方JS框架(jQuery、Ext等)
    12. 語言本地化
  4. 項(xiàng)目數(shù)據(jù)結(jié)構(gòu)
    1. JSON數(shù)據(jù)結(jié)構(gòu)
    2. 數(shù)據(jù)庫表結(jié)構(gòu)
  5. PlusProject API參考
  6. 常見問題
  7. 歷史更新
  8. 獲得支持

安裝部署

下載開發(fā)包

訪問 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)入打開。

數(shù)據(jù)庫安裝

在下載解壓縮后的文件夾內(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ù)庫連接配置信息。

導(dǎo)入項(xiàng)目

運(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ù)。

新建項(xiàng)目

運(yùn)行"demo/NewProject.aspx"文件。此文件使用服務(wù)端Project對(duì)象,創(chuàng)建一個(gè)空項(xiàng)目,并保存到項(xiàng)目中。

查看項(xiàng)目

運(yùn)行"demo/Projects.aspx"文件,打開一個(gè)當(dāng)前項(xiàng)目列表,可以選擇“打開”項(xiàng)目,跳轉(zhuǎn)到Project.html,查看項(xiàng)目。

2.項(xiàng)目文件目錄介紹

.Net開發(fā)包目錄

.Net開發(fā)包目錄文件一一如下:

二次開發(fā)工作

以下詳細(xì)介紹PlusProject是如何從數(shù)據(jù)庫加載數(shù)據(jù),以及如何保存到數(shù)據(jù)庫內(nèi)的。

projectapi.aspx

projectapi.aspx是用來處理從數(shù)據(jù)庫加載和保存項(xiàng)目的。里面有兩個(gè)重要方法:LoadProjectSaveProject。

開發(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ù)庫操作方式,靈活性和可控性非常高。

加載數(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)換工作。

保存數(shù)據(jù)(全部)

參考SaveProject,DoSaveProject方法。

擴(kuò)展任務(wù)屬性

對(duì)任務(wù)屬性的擴(kuò)展,主要處理如下幾個(gè)地方:

  1. 增加plus_task表的一個(gè)字段
  2. 修改DBProject的SelectTasks方法,將新字段增加到任務(wù)對(duì)象上。
  3. 修改DBProject的InsertTask方法,將新字段在"insert"語句中增加,保存到任務(wù)表。
  4. 在Javascript內(nèi)擴(kuò)展一個(gè)表格列,根據(jù)不同數(shù)據(jù)類型進(jìn)行擴(kuò)展。具體參考:自定義表格列

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)參考:自定義表格列示例。

標(biāo)準(zhǔn)列

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)參考"自定義列示例"。

自定義單元格內(nèi)容

通過監(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)參考"自定義右鍵菜單"

集成到第三方JS框架(jQuery、Ext等)

首先,對(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)查看這里。

項(xiàng)目數(shù)據(jù)結(jié)構(gòu)

1.JSON數(shù)據(jù)結(jié)構(gòu)

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},
		......
	]
}

數(shù)據(jù)庫表結(jié)構(gòu)

plus_project表

字段類型描述
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

plus_task表

字段類型描述
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ù)即可。

PlusProject API參考

屬性

屬性可以從對(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,     //拖拽操作:
move, start, finish, percentcomplete cancel: Boolean //是否取消操作 }
條形圖開始拖拽時(shí)發(fā)生。
itemdragcomplete
{
    source: Object,     //甘特圖對(duì)象    
    item: Object,       //任務(wù)對(duì)象
    action: String,     //拖拽操作:
move, start, finish, percentcomplete value: Object //拖拽調(diào)節(jié)的值。日期Date或者數(shù)字Number類型。 }
條形圖完成拖拽時(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);
});

常見問題

  1. 安裝部署項(xiàng)目時(shí),如果報(bào)"PlusProject未定義",請(qǐng)檢查"scripts/boot.js",將"PATH"變量修改成當(dāng)前WEB項(xiàng)目名稱。
  2. 任務(wù)的唯一標(biāo)識(shí)符,是UID,而不是ID。ID只是一個(gè)序號(hào),UID可以是數(shù)字,也可以是字符串。
  3. 任務(wù)的開始日期必須從"00:00:00"開始;完成日期必須以"23:59:59"截止。
  4. 任務(wù)只能分配給一個(gè)部門,但是可以分配給多個(gè)負(fù)責(zé)人。
  5. 如果要給項(xiàng)目或任務(wù)增加屬性,直接在Hashtable/HashMap上增加即可。
  6. 增加的任務(wù)屬性僅僅反映到數(shù)據(jù)上,如果要在界面顯示,請(qǐng)擴(kuò)展表格列。
  7. 任務(wù)的FixedDate僅對(duì)摘要任務(wù)起作用,它可以固定摘要任務(wù),限制其子任務(wù)的日期范圍不超過它。