.net快速开发平台

工作流+智能表单
帮助企业快速应对变化
使用silverlight构建一个图形化流程设计器(二)(附源代码下载及在线演示)
 

接着之前的内容,在开始之前有几点说明:

1、我无法使用博客圆的上传图片功能,因此许多图片就省略了。

2、代码下载:http://www.shareidea.net/opensource.htm

3、在线演示:http://www.shareidea.net/workflow.htm

 

技术支持QQ群:85444465

本文系列索引:

使用silverlight构建一个工作流设计器(一)

使用silverlight构建一个工作流设计器(二)

使用silverlight构建一个工作流设计器(三)

使用silverlight构建一个工作流设计器(四)

使用silverlight构建一个工作流设计器(五)

 使用silverlight构建一个工作流设计器(六)

使用silverlight构建一个工作流设计器(七)

使用silverlight构建一个工作流设计器(八)

 使用silverlight构建一个工作流设计器(九)

使用silverlight构建一个工作流设计器(十)  

使用silverlight构建一个工作流设计器(十一)  

三、类的设计

 

在进行类设计之前,先说一下silverlight中使用怎么表示上面描述的类。在silverlight可以使用 用户控件( silverlight user control)来描述各种具有用户界面的类,如上文所讲的活动类,规则类。操作很简单,在vs.net 2008中增加一个新的 silverlight user control 就可以了。其实是一个xaml文件。在xaml文件中布局用户界面,在对应的xaml.cs文件中编写后台方法即可。 

 

需要说一下的是,在进行鼠标拖动活动或者规则移动时,规则和活动的动态定位使用的是相对于容器来的相对位置,也就是使用Canvas.TopCanvas.Left属性进行定位。

  

还有一点需要说明的就是,对于活动和规则的关联有几点需要注意。

l         一个规则可以关联到两个不同的活动,一个为起始活动(起始端点关联)。一个为终结活动(终结端点关联)

l         规则的起始活动和终结活动不能为同一个活动。

l         任何两个规则,他们的起始活动和终结活动不能相同,也就是说在不同的两个活动之间,不能有重复的规则关联。

 

3.1 活动类的设计(Activity)

 

活动代表工作流中的一个活动节点,在流程图上表现为一个方框图,可以被拖拽,可以关联到一个规则的开始或者结束。

3.1.1 Xaml

下面的代码表示了活动类的外观

 

Code

 

从上面代码可以看出,活动类主要包含一个矩形的图形,还有一个删除按钮。图形显示如下:

 

3.12 后台代码

活动类主要实现主要动作(函数)

l         鼠标拖拽

l         删除

l         关联到规则(增加,删除)

l         输出活动xml描述

l         导入xml描述

还有一些主要属性:

l         活动标示(ID)

l         活动名称(Name)

l         所有关联的规则的集合

以及一些主要的事件:

l         移动

l         删除 

具体代码不再贴出,大家可以下载源代码运行。

3.2 规则类的设计

 

规则类的实现比较有意思,主要是它的拖拽方式和活动类的拖拽方式不一样。对于活动类,拖动方式为整个活动随着鼠标进行移动。而对于规则类却不是这样。下面的图形表示了一规则类的外观。

一个规则从图形上被分成三个部分,起始端点(白色),中间线段,终结端点(黑色)(在实际环境中,应该整体表现为一个带箭头的线段,为了便于描述,先这样表示,在后面的美化部分将作修改)。这三个部分都可以被鼠标拖动,当拖动起始端点时,起始端点随着鼠标变化而变化位置,终结端点不动,中间线段根据起始端点和终结端点计算位置。拖动终结端点类似于拖动起始端点。当拖动中间线段时,整个规则图形(包括起始端点,中间线段,终结端点)随着鼠标移动而移动。

 

另外一个需要仔细考虑的是,当拖动规则,并且将端点移动到活动上时,进行规则和活动关联的时机。有以下几个时机可以考虑:

l         拖动规则进入活动范围。(活动的MouseEnter事件)

l         拖动规则结束后,放开鼠标。

 

对于第一种情况,当拖动规则并且进入互动范围时,无法触发活动的MouseEnter事件。暂时无法解决。(但是在放开鼠标,并且在活动上移动时,此时触发MouseEnter事件。但是这样做会存在某些特定的bug)。因此使用第二种方法进行关联,也就是在规则的MouseLeftButtonUp事件中遍历当前所有的活动,检查规则是否处于活动的范围内,如果在,那么就进行关联。

3.2.1 xaml

下面的代码描述了规则类的xaml

 

Code

 

3.2.2 后台代码

规则类主要实现主要动作(函数)

l         鼠标拖拽

l         删除

l         关联到活动(增加,删除)

l         输出规则xml描述

l         导入xml描述

还有一些主要属性:

l         规则标示(ID)

l         规则名称(Name)

l         起始活动

l         结束活动

以及一些主要的事件:

l         移动

l         删除 

3.3 容器类的设计

 

容器类主要功能就是用来提供一个设计面板,可以增加,删除工作流元素(活动,规则),导入xml和导出xml。

3.3.1 xaml

下面的容器的xaml代码

Code

 

下图是容器的外观 

 

3.3.2 后台代码

规则类主要实现主要动作(函数)

l         增加活动

l         删除活动

l         增加规则

l         删除规则

l         导入xml

l         导出xml

还有一些主要属性:

l         活动集合

l         规则集合

l         流程标示(ID)

l         流程名称(Name) 

好了,其实也没有说什么,大家还是看代码吧,因为比较仓促,有些写得比较乱,有些也没有注释,以后会慢慢完善,既然是第一个版本,就叫做workflowDesigner.SL 0.1版吧。 

下面的章节进入导出xml及根据xml文件生成流程图,并且会讨论一些更有意思的话题。

 

posted on 2009-04-24 00:12  chegan  阅读(8558)  评论(6编辑  收藏  举报