问: 在项目管理中会有项目进度计划,通常有两种形式: 1.带日期的工作任务分配表。这是在WBS(工作分解结构)的给定级别上,一些活动的带有部分或全部时间日期的列表。它能够给出综合性的清单,但不够直观。 2.甘特图 使用甘特图,可使进度计划更为直观,又称横道图、条形图。
最近装了Visio 2002中文版,其中对甘特图的处理,做得非常好。假如这是一道菜,那么做为厨子的微软大可以声称:既然是“乾坤烧鹅”,当然是内有乾坤了,其实是吃里面的荷花雀。这个荷花雀不仅吸收了烧鹅的香味,而且保温,这个时候吃,刚刚好。每个细节我都考虑到了!哼哼,食神,我想你没话可说了吧。
言归正传:准备用个JS文件来实现一个对象--甘特图对象。使用的时候只要在网页中初始化甘特图所需数据,就能够返回显示甘特图的所有代码。数据结构和显示都参考MS Visio 2002实现。
实现思路: 数据结构:就是一张表,包括字段:任务编号,任务名称,负责人,起止时间,依赖关系..... (会有几个没有定义内容的字段,由用户自定义数据类型和含义) 图形显示:使用表格。其中时间轴也采用主要时间和次要时间画表格。通过设置<td>的背景色显示任务。对于任务之间的链接线,取得任务首尾坐标,用javascript来画。
附录:从MS Visio 2002甘特图中导出的文本数据: 任务号,任务名称,持续时间,开始日期,完成日期,依赖关系,资源,大纲级别,% 完成,任务注释,实际开始时间,实际完成时间,实际持续时间,用户定义的数字,用户定义的时间,用户定义的文本 1,用户定义的文本 2,用户定义的文本 3,用户定义的文本 4,用户定义的文本 5,用户定义的小数,用户定义的持续时间 1,可行性分析报告,5天,2002-5-24 8:00:00,,,,1,0,,2002-5-24 8:00:00,,,0,2002-5-24 10:40:00,张三,,,,,0,0天 2,需求分析,6天,2002-5-31 8:00:00,,1,,1,0,,2002-5-31 8:00:00,,,0,2002-5-24 10:40:00,李四,,,,,0,0天 3,概念模型,10天,2002-6-7 8:00:00,,,,1,0,,2002-6-7 8:00:00,,,0,2002-5-24 10:40:00,王五,,,,,0,0天 4,物理模型,7天,2002-6-18 8:00:00,,,,1,0,,2002-6-18 8:00:00,,,0,2002-5-24 10:40:00,赵六,,,,,0,0天 5,总体设计,8天,2002-7-1 8:00:00,,,,1,0,,2002-7-1 8:00:00,,,0,2002-5-24 10:40:00,刘七,,,,,0,0天
______________________________________________________________________________________________ 答1: 不错的主意,难度不小.而且要用到fso,只能在本机运行了?要吗就运行在服务器端 ______________________________________________________________________________________________ 答2: Data Binding ______________________________________________________________________________________________ 答3: 可是Data Binding数据源可以使用.txt吗? ______________________________________________________________________________________________ 答4: 行吧,数据源为什么不能用.txt
______________________________________________________________________________________________ 答5: 可以,例子: <OBJECT id="tdc" CLASSID="clsid:333C7BC4-460F-11D0-BC04-0080C7055A83"> <PARAM NAME="DataURL" VALUE="tdc.txt"> <PARAM NAME="UseHeader" VALUE="True"> </OBJECT> <TABLE datasrc="#tdc" border> <THEAD><TR><TD>文本</TD><TD>图片</TD></TR></THEAD> <TBODY> <TR><TD><DIV datafld="text"></DIV></TD><TD><img datafld="img"/></TD></TR> </TBODY> </TABLE>
tdc.txt text,img 1aaaaa,c:\\user2.gif 2bbbb,user3.gif 3ccc,user1.gif 4dd,4.gif ______________________________________________________________________________________________ 答6: 用了tdc再用dhtml时会给活活气死!tdc把会tbody(而不是tr)拷贝n份!天晓得是哪个弱智做的,我宁可用xmlhttp,自己传数据来生成表格。 ______________________________________________________________________________________________ 答7: 看的我头晕... ______________________________________________________________________________________________ 答8: 多谢各位参与,有些问题再描述一下: 1.不涉及fso的问题。附录中的文本文件只是说明一下数据结构,画出甘特图的数据可以从数据库取出来 2.准备用个JS文件来实现一个对象--甘特图对象。也就是说我要写出一个单独的gante.js文件,来定义一个类。在HTMl文件中,初始化类为一个对象,用js代码初始化数据结构--应该是数组。然后用表格,图形的形式描述出来。 3.听大家的意见似乎有现成的东西?qiushuiwuhen(秋水无恨) ,Databinding?用什么控件来绑定数据那?有现成的控件可以用?我是准备自己写的;seabell(百合心) ,你那个是什么控件?显示图片不等于画出了甘特图呀?虽然图片比较漂亮,但是改变一下<td>的背景色也是可以的,也就是说不一定使用图片,但是要画出有参考价值的甘特图。 4.真正有兴趣的可以看看Visio 2002中是如何制作甘特图!!!它可以设置主要时间,次要时间来画横轴坐标系;可以设置开始形状、结束形状,里程碑形状,可以定制左标签、右标签。我想要全部实现。 5.重复一遍,弄懂这个问题的要求,请大家仔细观摩一下MS Visio 2002,甘特图,请大家注意菜单中的--“甘特图”一项。 ______________________________________________________________________________________________ 答9: To linhaibo(美洲豹) 下载了你整理的VML,多谢。本来是想用VML来画的,后来看了MS Visio 2002中的甘特图。我发现直接使用表格就很好。任务之间的依赖关系,可能会用到VML画图的部分。 强烈呼吁您的参与。 ______________________________________________________________________________________________ 答10: To linhaibo(美洲豹) 下载了你整理的VML。本来打算用VML来实现。后来看到MS Visio 2002中甘特图的例子,觉得直接用表格来实现就很好。对于任务之间的依赖则可以使用VML画出来。 强烈呼吁您的参与! ______________________________________________________________________________________________ 答11: 本人弱智,看不懂?:( 高手就是高手,讲的内容就是不一般。 ______________________________________________________________________________________________ 答12: 本人弱智,看不懂?:( 高手就是高手,讲的内容就是不一般。 ______________________________________________________________________________________________ 答13: Visio 2002我是有,不过甘特图看不懂~软件工程方面的知识比较欠缺啊-_- ______________________________________________________________________________________________ 答14: 我用在项目管理,并行项目时间切面图显示,为的是心中有数 ______________________________________________________________________________________________ 答15: To qiushuiwuhen(秋水无恨) 我是想用JS实现,便于网上浏览,有没有半成品之类的东西? ______________________________________________________________________________________________ 答16: 我曾经也想过做这样的js文件,是关于个性化页面内容的,但对我来说难度太大,放弃了,你做好之后能不能给我jekingfu@163.com一份,谢谢 ______________________________________________________________________________________________ 答17: 我提供的那个就是Data Binding的例子啊,改变一下<td>的背景色是可以的,要实现得完整还得再考虑一下 你的数据是不是一定要从Visio2002甘特图中导出? ______________________________________________________________________________________________ 答18: To: seabell(百合心) 不,我的数据是从数据库读取出来的。或者由用户直接输入。整个实现过程和Visio没有任何关系。只是想实现visio中划甘特图的功能。
visio中可以直接拖动任务的起点终点,我这个就不用了,我只是根据数据来画图。 ______________________________________________________________________________________________ 答19: 哦,知道了,先过完周末再来细细考虑 :) ______________________________________________________________________________________________ 答20: 咦,你是怎么过周末的? ______________________________________________________________________________________________ 答21: to: weidegong(weidegong) 你又怎么过呢 ______________________________________________________________________________________________ 答22: 我发现自己没有周末和上班的区别。并不是说自己工作太繁重以至于天天加班。而是即使平时我也很闲,反倒是周末为了感进度而变得有些忙碌。也不是周末,而是星期天的晚上是我最紧张的时刻---我正在试图改变这一点--我正在学习《人人都能成功》 ______________________________________________________________________________________________ 答23: 上述方式都不是最好的解决方案,下面给你解决的方式: 1。使用XML作为数据交换文件,他可以方便进行与数据库的数据转换; 2。使用VML作为绘图方法,他绘制的图像是完全矢量图形; 3。使用XSLT作为数据与图像的转换机制; 4。使用HTC作为元素的封装形式,可以反复的调用。 我现在正在使用这些技术编写类似与VISIO的WEB页面,和你需要的非常的相似。
______________________________________________________________________________________________ 答24: 下个版本我会考虑使用这些技术。 没办法,我对于XML、XSLT、HTC都不是很熟:( ______________________________________________________________________________________________ 答25: 呵呵,我也提供一个思路: 使用htc(封装)和xml(数据)实现.
应使用1*1像素的透明图片,做为项目条,任务条,连线等的实体,可以很容易的控制高和宽以及颜色。 时间轴可以用表格生成,每格代表着若干时间(天,星期,月...); 图片和表格的相对位置,则是甘特图的主要部分。 至于连线,是height=1 width=x; 或 height=x width=1,经过定位的三个图片的组合; ______________________________________________________________________________________________ 答26: 你这样进入编程的误区,我问你几个问题,如果你能很好的处理,你就可以开始写你的对象了: 如何处理不同颜色的甘特图显示,使用图像和table都有很大的限制,如何处理不同颜色的条形,用户如何进行不同条形的定义? 如何处理数据与数据库字段的快速交换,我所说的交换是指:无需复杂的转换机制和快速的执行效能?
______________________________________________________________________________________________ 答27: 如何处理你所谓的对象的调用,如对对象的属性、事件、行为的调用和定义? 在做一个web对象时,你应该好好的考虑这些问题,不要把思路只局限在js上,一个好的程序员,首先应具备的是对技术的合理应用和整体的思考,一个简单的对象的编写需要考虑问题????一个甘特图的对象的编程不是简单的对象编程。 ______________________________________________________________________________________________ 答28: hongfeipb(宏飞)老兄,不是在说我吧。 这种程序的结构是很重要的,我说的是基本的实现方式。 其实我去年上半年就大致实现了这个东西,不过到现在还不是很完善。 我也在考虑使用VML,希望能讨论一下。
这是我技术文档的逻辑思路部分内容:
1、程序页面和程序布局 由甘特图的特点,页面分为时间标尺、项目条两个部分,且需要项目条可根据时间标尺的变化而变化,并反映出层次关系、前置任务联系,以及里程碑等的状态和关联等,和目录树相同每个结点都有唯一的标识和元素标识,除次以外,需要对每个结点的位置和长短做精确的定位,以及对数据有一定的容错(例如对于四个日期的关系进行判断等),程序采用了一个全局数组对项目、任务、里程碑进行了描诉,另一个数组对结点间的连接关系进行描诉,然后用一个显示函数对数组解释并显示在页面上。 2、 数据提取方式 模块有一个RootID的属性,用于首次打开页面时要显示的甘特图根结点,程序会load带有ParentID参数的jsp形成的XML文档,然后由HTC内的解析程序组成初始数组,再由显示函数把标尺和项目条等显示在页面上。 3、 关于时间标尺 时间标尺是在计算了所有当前项目条的时间差之后,再根据时间标尺的状态形成的,分为日标尺,月标尺,年标尺三种,实际上是一个表格,它根据计算后的显示项目条数量(控制标尺的总高度)和单位宽度(控制标尺的总宽度)形成。 4、 项目条/任务条/里程碑的显示 首先根据单条数据的类型,确定显示的内容。 当是项目或任务时,计算开始时间,结束时间,预计开始,预计结束这四个日期的最大和最小值,然后根据单位宽度(由标尺状态决定)得到应显示的长度,再根据标尺的起始日期得到应显示的x坐标,根据当前数据的条数和标尺初始y坐标决定y坐标,然后同时计算出预计条,实际条,进度位置等,并逐个显示出来。 当是里程碑时,根据标尺的起始日期计算得到应显示的x坐标,根据当前数据的条数得出y坐标,再根据当前结点的parent对象的子结点数量得出里程碑的竖线高度,然后显示出来。 5、 前置任务连线及里程碑关联 当项目条显示完成后,程序将检查对结点间的连接关系进行描诉的全局数组,然后根据项目条的在页面实际位置信息,在页面生成由几个图片组成的连线和箭头,完成划连接线的过程。 ______________________________________________________________________________________________ 答29: 对于一个透明的1px*1px图片style="background-color:#XXXXXX"就可以改变它的颜色,height和width可以改变它的大小,即(竖线,横线,条状),对图片的定位则可以构成连线和项目条等,z-index的设置则可以令项目条上呈现进度条,状态等图标. ______________________________________________________________________________________________ 答30: chenzengxi(懒猫): 你好!对于你的设计构思我非常的赞同,但是不要只局限在使用web的基本元素上面,甘特图的设计已经超出了web基本元素的设计范围,使用基于矢量化的VML或者是SVG是你绘制图像的最好方式。你需要注重的是XML的数据组织关系,它的数据组织关系与设计数据库如出一辙,甘特图的所有数据可以通过关联的数据库实现,需要较好的数据库设计思想,然后才是程序的基本架构,你需要详细的分析甘特图的需求,然后才是程序的编写。 希望我的这些对你的编写有一定的好处。 ______________________________________________________________________________________________ 答31: weidegong:我才来 :) 周末是难得的休闲时光,看碟子,看电视,听音乐,逛街,买书……有好多事情做哦,忙都忙不过来 前天我看了《重庆森林》和《苏州河》,觉得没有余杰推荐的那么好,只是台词的确比较经典。昨天去买了余杰战友摩罗的新作,而一本解读罗大佑音乐的书又害我多掏20块钱腰包,哎……结果玩得忘了时间,连法韩热身都没赶上 汇报完毕 ______________________________________________________________________________________________ 答32: To seabell(百合心) 呀,一句“汇报完毕”,直看得我心中发痒,听得我口吐白沫:)
《重庆森林》台词很经典,可惜演绎的...--也许深刻的人能看出深刻来,我看王家卫的片子,总是很郁闷--自个没品味。在大话西游中,“当时那把剑。。。”类似的台词被周星驰演出来,才叫经典中的经典。
我周末敲啊敲啊,一直敲到今天早上5点才回去睡觉,这个甘特图还没来得及写那
To hongfeipb(宏飞)、chenzengxi(懒猫) 多谢两位帮助,正在进行中。 ______________________________________________________________________________________________ 答33: To hongfeipb(宏飞): 对于VML和SVG我还没有仔细弄过,不过要想更好的在WEB上实现甘特图的话,确实需要这些东西,谢谢你的意见。 ______________________________________________________________________________________________ 答34: 希望你们搞出来后,也让我这个门外汉见识见识一下, 不知行不? ______________________________________________________________________________________________ 答35: 心里痒痒,是一种高兴而又说不出来的感受;口吐白沫则是幸福得不知所以。。幸福得一塌糊涂。。。
我表达上有无不妥?夸张了一点而已:)总之是褒义的了
(编辑:网站学习网)
|