代码改变世界

Silverlight实现查询建模(十) 与Silverlight流程设计器集成

2009-09-22 21:37  Amar-Yao  阅读(2567)  评论(7编辑  收藏  举报
  这部分应该是目前XCenter中的最吸引人的地方。首先要感谢chegan的贡献。这里我算站在巨人的肩膀上了,
  先看一下效果图:

    
  开始阶段其实我根本没有想用什么流程设计器来实现。只是随着逐渐贴近核心业务逻辑,感觉作为编辑器和设计器,过于复杂的操作界面会使开发人员和用户都感觉到无所适从甚至抓狂。本着简化UI的目的我简单看了一下chegan的Silverlight流程设计器。这个设计器本身是个很通用的工具,可以用来实现XCenter中的查询模型设计器和格式模型设计器。而且其中的用XML序列化布局的逻辑很XCenter的核心存储逻辑很相似(XCenter把查询模型实例序列化为XML存储在数据库中的Blog字段)。
  由于流程设计器本身比较独立,我将核心代码放置到XCenter.Framework.Client的SmartEditor目录。目录结构和chegan的目录结构一致,只是修改了命名空间。由于chegan的流程设计器主要面对工作流,各个节点的图示都是根据代码画出来的。XCenter中的各个节点无需根据逻辑呈现不同内容,先对固定,所以用固定的图标显示节点更为美观实用。这就免不了要修改chegan的流程设计器。
  以下我只列出我的修改,关于chegan流程设计器的详细知识请见其Bloghttp://www.cnblogs.com/chegan/archive/2009/04/22/1440872.html。如果chegan有幸看到这边文章请指正我修改得不妥的地方。
  首先我要实现节点图标的现实就必须新建一种ActivityType,这里要修改IElement.cs中的ActivityType并添加一种自定义的类型,IMAGE_48X。
  由于Activity.xaml.cs中要根据ActivityType的不同进行不同情况的处理,例如位置、显示等。我们要修改所有涉及到ActivityType分支的部分,相应的添加对我们的自定义类型IMAGE_48X的支持。
  修改位置为:GetPointOfIntersection方法,RepeatDirection的Set访问器,Activity的构造器,Type的Set访问器。具体我就不说了,大家可以先了解chegan的流程设计器原理再根据代码一步步修改以实现自己的需求。
  最后由于chegan的流程设计器的Container部分逻辑比较复杂,而XCenter中的查询模型、格式模型设计部分目前没有那么复杂的逻辑,所以我基于chegan的Container实现自己重新写了适合XCenter的设计器容器,它位于XCenter.QueryEngine.Client项目的Designer目录。
  这样一来流程设计器好像是一个多功能的插座,我们现在只需把各个节点的编辑界面挂在不同类型的节点上就可以了,大大简化了交互界面。