普加项目管理中间件软件二次开发指南V3.0上海普加软件有限公司上海普加软件有限公司目录安装部署 (2)项目文件目录介绍 (4)二次开发工作 (4)加载数据 (5)保存数据(全部) (7)保存数据(局部) (8)扩展任务属性 (9)标准列 (10)自定义表格列 (14)自定义单元格内容 (14)自定义单元格可编辑 (16)自定义条形图外观 (17)自定义右键菜单 (19)集成到第三方JS框架(jQuery、Ext等) (19)语言本地化 (20)项目数据据 (20)JSON数据结构 (20)数据库表结构 (26)PlusProject API参考 (29)属性 (29)方法 (31)事件 (40)常见问题 (44)上海普加软件有限公司安装部署下载开发包访问/download/获得软件开发包后解压缩,并把解压缩后的项目文件,放入到Web 项目。
如果是.Net版本,可以直接用Visual Studio以"打开网站"的方式打开运行。
如果是Java版本,请使用Eclipse以"导入项目"的方式导入打开。
数据库安装在下载解压缩后的文件夹内,有一个"dbsql"目录,里面有mssql.sql、oracle.sql、mysql.sql数据库表文件。
请使用这里的表结构创建一个数据库。
比如新建一个数据库,名字为:testproject。
然后把拷贝的SQL 运行一下,就生成了plus_project、plus_task表。
创建数据库表完成后,请在"App_Code\Utils\DBUtil.cs"修改数据库连接配置信息以便正常运行。
Java的文件路径是"src\PluSoft\DBUtil.java"。
上海普加软件有限公司导入项目运行"demo/ImportProject.aspx"文件。
选择本地MS PROJECT XML文件,上传导入到数据库中。
如果导入成功,会弹出提示信息,可以选择跳转到"Load.html"查看刚才导入的项目数据。
如果导入失败,会弹出异常提示,定位解决错误。
(注:通常导入错误都是数据库配置信息有误;或文件选择错误。
)必须导入"Upload\软件开发-100.xml"项目文件,它是作为DEMO示例的示例项目数据。
新建项目运行"demo/NewProject.aspx"文件。
此文件使用服务端Project对象,创建一个空项目,并保存到项目中。
查看项目运行"demo/Projects.aspx"文件,打开一个当前项目列表,可以选择“打开”项目,跳转到Load.html,查看项目。
上海普加软件有限公司项目文件目录介绍.NET开发包目录.Net开发包目录文件一一如下:∙DBProject.cs文件:项目加载、保存的后台文件∙dbsql目录:数据库SQL文件∙demo目录:甘特图示例∙scripts/plusproject/js:甘特图javascript文件,有任务面板TaskWindow.js、日历面板CalendarWindow.js、右键菜单ProjectMenu.js、数据交互ProjectServices.js等。
∙doc.html文件:甘特图开发指南文档,包括API、二次开发要点等。
∙index.html文件:开发包资源索引页面。
二次开发工作以下详细介绍PlusProject是如何从数据库加载数据,以及如何保存到数据库内的。
DBProject类上海普加软件有限公司DBProject是用来处理从数据库加载和保存项目的。
里面有两个重要方法:LoadProject和SaveProject。
开发者往往会改造这个类,修改项目加载和保存的实现方式,以满足开发的需要。
PlusProject并不关心和限制开发者如何加载和保存项目数据,只需要在创建和使用PluSoft.Data.Project时,提供好符合数据格式的数据即可。
所以开发者可以使用任意的数据库,以及数据库操作方式,灵活性和可控性非常高。
加载数据在DBProject的LoadProject方法中,根据项目UID,加载项目数据和任务数据,并进行数据格式转换工作,最后得到一个Hashtable对象返回。
开发者可以参考LoadProject方法的代码,使用自己熟悉的数据库操作方式,比如IBatis、Hibernate等第三方类库,查询数据后,按项目数据结构进行格式转换工作。
需要注意的是,获取任务的方法SelectTasks。
从数据库查询出任务列表后,需要进行一个for循环遍历操作,一一将任务属性转换为标准任务字段。
上海普加软件有限公司另外,获得任务列表后,需要生成OutlineNumber和OutlineLevel字段信息。
这个可以使用TreeUtil的标准方法来实现:上海普加软件有限公司最后,需要获取项目的“部门”和“负责人”信息。
这两个方法开发者可以重写实现。
(示例是生成静态的数据)保存数据(全部)在DBProject有一个SaveAll方法。
首先,获得完整项目数据对象,是一个Hashtable。
然后,删除所有旧任务,新增所有新任务,达到更新任务的目的。
上海普加软件有限公司保存数据(局部)在DBProject有一个SavePart方法。
首先,获得完整"增/删/改"的任务列表。
然后,遍历任务,判断任务的状态,以便进行“增加、删除、修改”的SQL操作。
上海普加软件有限公司PlusProject提供了保存全部和保存局部两种方式的完整代码。
开发者可以参考,并使用自己的方式实现。
扩展任务属性对任务属性的扩展,主要处理如下几个地方:1.增加plus_task表的一个字段2.修改DBProject的SelectTasks方法,将新字段增加到任务对象上。
3.修改DBProject的InsertTask方法,将新字段在"insert"语句中增加,保存到任务表。
4.在Javascript内扩展一个表格列,根据不同数据类型进行扩展。
具体参考:自定义表格列plus_task表的新字段,是用来存放新字段数据的;在加载数据时,确保任务对象上有新字段的属性值。
因为任务对象是一个Hashtable,所以这一点极其简单。
在保存数据时,修改任务的"insert"语句,把新字段的值写入到数据库,保存起来。
做好这几点,其实任务的属性已经扩展了。
下面只是需要一个界面显示和操作的载体,一般用表格列来完成。
关于表格列的扩展,请参考:自定义表格列示例。
标准列PlusProject针对任务的各种标准属性,如"ID","Name","Start","Finish","PercentComplete","Departm ent","Principal"等提供了相应的标准列。
开发者在创建标准任务属性范围内的列时,直接使用这里例举的标准列用来创建表格列集合。
上海普加软件有限公司使用标准列示例代码如下:上海普加软件有限公司自定义表格列开发者可以根据自己扩展的任务属性类型,来创建自己的列。
具体请参考"自定义列示例"。
自定义单元格内容通过监听处理"drawcell"事件,可以根据任务信息,设置行、单元格样式,以及自定义单元格Html内容。
上海普加软件有限公司示例请参考"自定义显示"自定义单元格可编辑通过监听表格的"cellbeginedit"事件,可以控制每个行、每个单元格是否可编辑。
示例请参考"控制单元格可编辑"上海普加软件有限公司自定义条形图外观开发者可以控制右侧条形图的HTML外观,达到任意的条形图效果:示例请参考"自定义显示条形图"上海普加软件有限公司自定义右键菜单弹出右键菜单时,根据当前选择的行,显示隐藏、启用禁用菜单项。
示例请参考"自定义右键菜单"集成到第三方JS框架(jQuery、Ext等)首先,对于jQuery, YUI, Prototype.js等框架来说,它们对页面的操作基于原始Dom元素的。
所以,你可以不用做任何额外的处理,按PlusProject正常的例子,把项目甘特图对象加入到页面元素就可以了。
其次,对于ExtJS这样封装度很高的框架,可以从Ext对象找到它的dom,然后render加入即可。
使用代码如下:只需要这样设置后,PlusProject就能在Ext的布局面板中自动调整尺寸大小,看上去跟Ext原生的控件一样了。
语言本地化如果要显示他语言界面,只需要引用locale文件夹下资源js文件即可,例如英文资源包使用如下:语言本地化(英语)示例,请查看这里。
项目数据据JSON数据结构PlusProject项目数据包含如下信息:项目本身数据、日历、任务列表、部门列表、负责人列表等。
其中,任务会跟部门、负责人有分配关系。
上海普加软件有限公司本节使用JSON格式描述项目数据结构,对应到服务端数据,转换类型如下:∙.Net:Array => ArrayList; Object => Hashtable∙Java:Array => ArrayList; Object => HashMap上海普加软件有限公司上海普加软件有限公司数据库表结构plus_project表上海普加软件有限公司plus_task表上海普加软件有限公司注意:这些表是普加软件默认提供的项目和任务表。
使用者可以完全脱离我们的表结构设计,实现自定义的表。
只需要在DBProject类的LoadProject方法中,提供符合普加项目数据结构定义的数据即可。
PlusProject API参考属性属性可以从对象直接读取,但是不能进行赋值操作。
如果想对属性进行赋值,必须使用提供的方法。
上海普加软件有限公司方法上海普加软件有限公司上海普加软件有限公司上海普加软件有限公司上海普加软件有限公司事件通过如下方式监听事件:上海普加软件有限公司上海普加软件有限公司常见问题1.安装部署项目时,如果报"PlusProject未定义",请检查"scripts/boot.js",将"PATH"变量修改成当前WEB项目名称。
2.任务的唯一标识符,是UID,而不是ID。
ID只是一个序号,UID可以是数字,也可以是字符串。