ILOG Views for .NET技术介绍

   一、 Gantt for .NET介绍

  甘特图(Gantt)是作业排序中最常用的一种工具,最早由Henry L. Gantt于1917年提出。这种方法基于作业排序的目的,是将任务与时间联系起来的表现形式之一。有两种基本形式的甘特图:任务进度图和资源调度图。通常工业应用,如制造厂、运输业以及工程管理,均可以依靠甘特图的直观显示,进行组织运营来提高工作效率。

  对于作业排序类似的问题,ILOG Gantt for .NET与同类产品相比,是一个非常理想的解决工具。它为几乎所有的显示元素提供了个性化的图形显示,全面的用户交互界面,实现了对底层大型数据对象的连接和管理,可以让.NET开发人员迅速地创建直观的、交互式的甘特图表。

  1.ILOG Gantt for .NET提供的众多的功能:

  · 面向任务的图表(任务进度图Gantt Chart)

  任务进度图表示项目中的各阶段工作的开始时间、计划完成时间以及现在的进度。可以用来了解任务安排的情况以及任务之间的约束关系,这种类型的图表通常可用于项目的计划管理中。

  · 面向资源的图表(资源调度图Schedule Chart)

  资源调度图表示项目中各阶段使用资源的情况,显示给定资源的任务和操作时间的安排情况。

  · 甘特树形表(Gantt Table)

  以列表方式表示任务或者资源,列表中的项目可包含子任务和子资源。

  · 资源负载度(Load Chart)

  用于显示一系列资源随着时间使用的状况,体现某一段时间内的资源负载度。

  · 日历显示(CalendarView)

  在日历中显示各个任务,是Gantt for .NET 2.0新增的功能,方便直观地看到各个工作日下的任务。

  2.ILOG Gantt for .NET主要有以下特征:

  具有各种构件,如任务进度图(Gantt Chart)、资源调度图(Schedule Chart)等。任务进度图通常用在工程的管理项目中,每个任务与甘特图中的一行关联,显示该任务的时间段;资源调度图通常用在制造和运输项目中,资源调度图显示工作流中实施资源状况。

  各大主要控件又是由小的控件组成,使用起来灵活方便,又易于扩展其功能。

  在VS.NET2003设计模式下的快速开发,每个构件都提供了控件形式。安装完ILOG Gantt for .NET2.0后,进入VS.NET,就能在工具栏中看到Gantt所提供的部分控件(Win Form和Web Form两栏,后者用在ASP.NET中),如果默认不够,还可以继续添加Gantt所提供的其他控件。

  Gantt for .NET是基于MVC结构的,它包含了一个抽象的数据模型和一些用于显示数据模型中数据的组件。当修改数据模型中的数据源时,显示数据的组件就会体现出来;更改显示数据的组件的内容,也能容易地更改数据模型中相应的数据。

  Gantt for .NET是基于MVC模型的,但是和以前介绍过的JViews Gantt不同的是,Gantt for .NET将MVC进行了变形,将View和Control捆绑起来,使得Gantt使用起来更加容易。另外,其数据模型是开放的、可扩展的。

  支持多种数据连接,使用XML或ADO.NET。

  在设计模式下,简单设定属性和样式,就可以做大幅度的变化,满足多种用户需求。方便的样式设置:在设计模式中选择预定义好的AutoFormat,能够选择多种不同的样式,也可以重新定制并生成自己的样式。

  已定义好的整套的事件,如放大缩小、水平时间翻卷和垂直翻卷、点选移动等,可以满足大部分使用需求,而不需要再写任何代码。

  由于在一个数据集中操作大量的数据,再同时显示出来,会产生较大的延迟,因此对处理大数据集性能优化,Gantt提供了“按需导入”的机制。Gantt只把当前需要的部分数据加载到内存中并显示,这样只处理数据的相关部分,执行起来就不会受影响,数据加载的时间也不会拖延。

  预先定义好的打印对话框与打印预览对话框,使得打印也变得轻松快捷。

  二、 Gantt for .NET基本概念

  Gantt for .NET提供了一个抽象的数据模型,能够用来适合许多情况的数据,只要这些是和时间进度有关的数据(通过XML或ADO.NET);同时,也可以对于特定的数据,自己进行扩展。以下介绍一些概念,主要是Gantt for .NET数据模型中的四个数据体,以及Gantt for .NET提供的其它一些功能术语。

  1.IGanttModel是Gantt for .NET中的数据模型,它包含了以下四个数据体:

  · Activities(任务)

  表示某一持续时间的任务,其持续时间(duration)由开始时间(start time),和结束时间(end time)来定义。如果起始和结束时间相同,它的持续期就为零。零持续期的任务称为里程碑(milestone)。任务又可分等级,这意味着有一个父任务,它能够被分成许多子任务。一个子任务又可以是下一级任务的父任务,或它就是最底层的叶任务。

  · Resource(资源)

  是完成一个任务所用的方式。它可以是人力、设备、厂房等等。如同任务一样,资源也是可以分等级的,如果子资源是人,那么父资源可能就是部门了,子资源是其中独立的雇员。

  · Reservation(预留)

  当一个资源被分配给一个任务时,这个分配就称为预留(Reservation),表示在某个时间段为完成一个任务而需要的资源。一个任务可以有多个预留的资源,一个资源也可以被多个任务预留。

  · Constraint(约束)

  表示两个任务之间的一种条件,由带箭头的多点连线表示的。有以下四种约束情况:start to start, start to end,end to start, end to end。这很容易理解,就比如是一个行为必须要另一个行为的结束才能开始。

  2.The services(其它功能服务):

  Gantt for .NET 还为了提高开发效率,预定义了许多服务供设计开发时使用。

  · Styling (样式):

  不论是在设计还是运行时,仅仅只要通过改变对话框进行设置,就能够满足最终用户显示时所需的风格,在JViews中,样式是通过CSS来定义的,这在.NET中是不同的。

  · Print(打印):

  Gantt for .NET是基于.NET

  Framework的,因此,可以调用.NET框架的打印功能,同时也可以使用Gantt for .NET中定义好的打印预览和打印对话框。便捷的设置,包含了打印所需的几乎所有功能。

  · 可直接调用的修改任务与约束的对话框:

  使用预先定义好的用来修改任务与约束的对话框,并不需要很多的代码,就能做到快速地修改显示视图中的数据,又由于Gantt for .NET中显示与控制的捆绑,也就能马上做到在预先定义好的对话框中所修改的数据保存到数据模型中,提高了开发效率:

  · Clipboard and GanttModel UndoManager(剪贴板与撤销重做):

  Gantt for .NET带来的剪贴板与撤销重做,可以在开发时对Gantt图中的各种数据直接进行剪贴和撤消重做操作。

  (未完,下期将继续介绍Gantt for .NET的一般框架和如何使用它进行设计开发。)郭健





  图1 不同的风格样式


  图2 可直接调用的修改样式的对话框


  图3 可直接调用的修改任务的对话框

三、Gantt for .NET

  的一般框架

  ILOG Gantt for .NET是基于ILOG Views for .NET框架之上的这样一个类库:它对于显示与时间相关的信息,对于资源和任务的进程调度处理提供了强大支持的类库。

  1. 基于MVC模式的变形,V-C的捆绑,与M的分离:

  上篇中已经介绍过, Gantt for .NET是基于MVC模式的一种变形,称为Model-View Separation。在这种设计方式中,Model管理图表组件的数据,是底层的数据模型;View与Control结合在一起,管理着Model中数据的图形表示,在Gantt中这种设计模式可以清楚地区分数据模型和数据表示。

  Gantt for .NET最顶层的组件有三大类:任务进度图——Gantt Chart(也即甘特图)、资源调度图——Schedule Chart、甘特数据模型(Gantt Data Model),它们之间的关系如图1所示。

  前两大类负责控制与显示,其大致的功能已经在上篇中阐述过,此处不再重复。

  2. 甘特数据模型(Gantt Data Model):

  · IGanttModel :数据模型里最主要的接口。它表现为其它代表时间调度型数据的抽象接口的一个容器。该接口包括了创建各种数据实体的方法:activities, resources, constraints和reservations。当数据模型中的某部分被修改时,该接口就负责触发相应的事件。

  · IActivity :代表了在时间进度上要执行的某个任务。分级显示,任务可以包含子任务。至少有一个孩子的任务称为父任务。相反的,只有父任务的任务称为叶任务。每个任务都必须是能够惟一识别的。

  · IActivityCollection:Activities的集合。

  · IResource :表示能够被分配给一个任务使之完成的资源。同 IActivity 一样,也是分级显示,有父、子、叶资源之分,每个资源都必须能够惟一识别。

  · IResourceCollection:Resources的集合。

  · IConstraint :表示任务之间的约束。

  · IConstraintCollection:Constraints的集合。

  · IReservation :表示资源到任务的分配关系,为任务而预留的资源。

  · IReservationCollection:Reservations的集合。

  图2表示了Gantt Data Model的各个接口及接口之间的对应关系。

   任务进度图——Gantt Chart(也即甘特图)、资源调度图——Schedule Chart及其他的控件所显示的图表都是由接口IGanttModel定义的,这个接口定义了全部的数据模型。而IGanttModel中的各接口,又可以独立于整个数据模型的其它部分单独使用。例如,可以直接使用IGanttModel中的Activity,作为底层数据提供给界面上的GanttTable。这种方式提高了开发效率,同时又使得Gantt for .NET有了更大的使用空间。

  3. 数据源的读取

  数据模型IGanttModel对数据源的读取,有两种方式:XML和ADO.NET。

  在Gantt for .NET中,并非直接读取XML数据,而是通过另外的一种格式:SDXL。SDXL 是XML的一个应用,因此,可以很容易与其它基于XML的程序交互。与时间调度有关的数据被存入SDXL文件,并且也可从中读出保存至Gantt Data Model。

  如果要使用的数据与时间调度有关,而且是和数据库相连的,那么程序总是要很依赖于系统资源。SDXL 能很好地帮助区分这种数据,不需要与数据库相连,就能在SDXL文件中很轻易地使用与时间调度有关的数据。同时,当你使用ILOG Gantt for.NET时,你能够更加高效地操作与时间调度有关的数据, 并且通过Gantt for .NET很快地将这些数据显示出来。

  ADO.NET为分布式数据共享型应用程序提供了大量优秀的组件,Gantt for .NET又提供了一部分的类与ADO.NET整合起来,使得对于与时间调度有关的数据的访问变得更加便捷。

  Gantt for .NET提供了甘特数据模型适配器(Gantt Model Adapter),与ADO.NET中的DataAdapter所起到的桥梁的功能类似,Gantt Model Adapter用来将DataSet中的数据装载到Gantt Data Model中或将Gantt Data Model中的数据放入DataSet中。典型的Gantt Data Model与数据库的操作如下:

  · 从数据库读出数据:

  用ADO.NET Data Adapter将数据库中的内容读入内存中的DataSet,再使用Gantt Model Adapter将DataSet中的数据装载到Gantt Data Model中。

  · 修改Gantt data model:

  使用Gantt data model 所提供的API, 或者直接使用Gantt for .NET 所提供的数据控制功能,来修改Gantt data model。

  · 写回数据库:

  使用Gantt model adapter将Gantt data model中的数据装入内存中的DataSet,再使用ADO.NET data adapter将DataSet中的数据更新相应的数据库。(见图3)

  四、使用Gantt for .NET开发

  1.运用Gantt Chart组件的实例:

  通过Gantt for .NET中Control与View的捆绑,就可以快速得到一个最简单的应用程序。主要分以下三个步骤:

  (1)创建任务进度图——Gantt Chart显示控制数据,选择SimpleGanttModel控件作为应用程序的数据模型,选择GanttModel XmlSerializer控件作为SDXL文件读出数据的装载器。

  (2)将提供甘特图表显示数据的模型设置为甘特数据模型(SimpleGanttModel)。

  (3)通过GanttModelXml Serializer将XML数据装入甘特数据模型。

  在这个简单的应用程序里,使用了GanttDataModel连接数据源,并通过IActivities接口提供给Gantt Chart显示。由于Gantt Chart的面向任务的特性,只需要导入部分数据,体现了“按需导入”的机制,提高了运行效率。

  2. 运用Schedule Chart组件的实例:

  实例运用Schedule Chart(资源调度图)查看资源利用的情况,同时,利用LoadChart同步显示资源的负载度情况。主要分为以下五个步骤:

  (1)创建资源调度图——Schedule Chart和甘特数据模型(SimpleGanttModel)。

  (2)将提供资源调度图表显示数据的模型设置为甘特数据模型(SimpleGantt Model)。

  (3)通过GanttModelXml Serializer将XML数据装入甘特数据模型。

  (4)创建一个资源负载度表(Load Chart)。

  (5)将资源负载度表的位置、显示时间段、显示资源与Schedule Chart同步起来。

  上面的两个例子虽然简单,但是已经可以从中看到ILOG Gantt for .NET所具有的强大功能。通过简单而高速的开发,就能完成形式规范、执行高效的应用程序,这就是ILOG Gantt for .NET。


  
posted @ 2006-01-14 15:42  行进中开火  阅读(1901)  评论(1编辑  收藏  举报