by 魏琼东
2012.2.28 18:51
在说这个案例之前先向大家转发一个简单的招聘信息,我们团队目前需要招聘两名技术助理人员,跟随我们做一些产品开发和技术咨询工作,欢迎有志同道合的朋友与我们合作:http://job.cnblogs.com/offer/19632/。
一、案例业务流程说明
在前一篇文章AgileEAS.NET SOA 中间件平台工作流系统介绍之中我简单的向大家介绍了AgileEAS.NET SOA平台工作流系统的基本介绍,本文我将向大家以一个真实的案例向大家介绍AgileEAS.NET SOA平台工作流系统的应用。
今天我们的例子来自于医疗信息化之中的一个简单案例,关于医院药库/药房药品报损业务的处理过程,现实业务流程如以定义:
目前的业务流程是这么要求的,由药房管理人员发起一个报损申请,然后由药房负责人审批,早批不通过则由药房管理人员修改后再次提交,通过则由药剂科长审核,审核通过之后由药房管理人员确认报损,否则终止本次报损业务处理。
对于不同地域、不同规模、不同经营性质的医院来说,对于药品的报损处理流程都可能不一样,那么摆在医疗开发商面前的一个很麻烦问题就是业务流程的定制处理,对于此类问题使用传统方法一直是一个非常棘手的问题,可能不同医院的业务流程的变动必须会导致程序代码的变动,进行造成医疗软件开发商产品版本管理混乱、产品实施周期过长进而导致开发商的间接管理成本和项目总体成本急剧提高。
二、应用AgileEAS.NET SOA平台工作流重组流程
对于上述问题,我们可以使用AgileEAS.NET SOA平台所提供的工作流系统进行业务流程自定义,使用工作流平台驱动业务数据达到业务流程再造的目的。
我们来仔细看上述业务流程就会发现,这是一个及其经典的“申请-早批-确认”业务处理流程,对于“申请”和“确认”都是一个比较固定的操作,但是对于“申请-早批-确认”的处理过程,则是一个极不确定的过程,比如一个小型医疗机构可以就需要一个简单的审批即可,但是对于一个大型的医疗机构,其审批可以不止二级审批,可能会有三级或多级审批处理。
如果我们开发两个功能模块“药房报损申请/申批”、“药房报损确认”以及定义一个工作流“药房报损申批流程”,并让“药房报损申批流程”与“药房报损申请/申批”相结合,由工作流驱动“药房报损申请/申批”按照“药房报损申批流程”进行处理,并在处理完成之由“药房报损确认”完成药品报损,那么我们是否就可以实现这种高度灵活的流程自定义呢,回答当然是OK,那么接下来我们来看看怎么办到这样的效果吧。
三、如果做?一步一步来
我们来先开始模块“药房报损申请/申批”,其最终效果如下:
接下来模块“药房报损确”,其最终效果如下:
接下来我们来定义工作流“药房报损申批流程”:
流程权限设定:
流程权限设定中包含流程发起权限及各状态的处理权限,其设置方式都一样,同AgileEAS.NET SOA平台中的模块权限设置保持一致,我们在些为账号xyf设定流程发起权限和“审请状态”的处理权限,给帐号zhx设定“审请状态”的处理权限,给账号Administrator设置“审请状态”的处理权限。
接下来需要绑定工作流与其驱动的业务模块之间的关联关系:
同时也需要在模块代码之中完成与工作流的绑定:
在功能模块中需要做两个地方的绑定,第一个在模块的头部需要标记明确WorkflowAddIn属性,用于声明这是一个受工作流驱动的功能模块,另一个是需要在功能模块中的声音一个类型为Guid的属性,并且标记WorkflowInstanceId属性,用于工作流向功能模块写入当前工作流实例,至此为止,工作流定义及流程自定义工作完成,接下来我们看看运行效果吧。
四、如果做?一步一步来
首先,我们使用帐号xyf登录,我们会看到如下功能:
我们打开“发起流程”:
或者直接打开“药房报损申请”模块发起工作流:
提交完成之后打开“我的申请”会看到刚才我们所发起的实例:
接下来,我们切换到账号“zhx”登录,并且打开我的待办:
完成一级审批“药房报损申请”:
打开已办事宜:
接下来,我们切换到账号“888888”登录,并且打开我的待办:
完成二级审核“药房报损申请”:
打开已办事宜:
最后我们切换到账号“xyf”,并打开 “药房报损确认”模块:
至此,药房药品报损业务处理演示完成,若审批流程发生变更,则只需要项目实施人员根据客户的业务流程修改工作流定义,而不需要修改程序代码,实现流程的自定义。
五、AgileEAS.NET 4.0 下载
有关于平台最新版本的最新发布版本的程序集、类库手册、相关资料,请大家从AgileEAS.NET平台的官网http://www.smarteas.net/进行下载,官网设有独立的下载页面,从这里下载:官网下载页面。
六、如何联系我们
如果您在使用AgileEAS.NET开发平台中有什么问题,请使用如下几种联系方式或者沟通方式。
1、官方网站:
AgileEAS.NET平台:http://www.smarteas.net/
敏捷软件工程实验室:http://www.agilelab.cn/
63c51378-a139-4126-95e0-010b81266bcb|1|5.0
Tags: .NET, AgileEAS.NET, EAI, ESB, GOF23, MDA, ORM, 分布式, 工作流, 构件, 企业应用平台, 企业应用开发平台, 企业应用架构, 系统架构, 元数据
AgileEAS.NET平台介绍 | AgileEAS.NET应用场景 | 分布式 | 企业应用架构 | 设计模式
by 魏琼东
2011.11.5 14:02
AgileEAS.NET平台是一套应用系统快速开发平台,用于帮助中小软件开发商快速构建自己的企业信息管理类开发团队,以达到节省开发成本、缩短开发时间,快速适应市场变化的目的,AgileEAS.NET应用开发平台包含基础类库、资源管理平台、运行容器、开发辅助工具等四大部分,资源管理平台为敏捷并行开发提供了设计、实现、测试等开发过程的并行。
[More]
9f6a5f2f-d854-45eb-aa82-a84bcd6b50b0|0|.0
Tags: AgileEAS.NET, PAAS, SAAS, ORM, MDA, 插件, 表现层, 构件, Silverlight, SOA, ESB, EAI
AgileEAS.NET平台介绍 | SOA | 企业应用架构 | 设计模式 | 云计算
by 魏琼东
2011.5.11 15:09
前面的文章AgileEAS.NET 4.0重构裁剪,新的ORM、支持Linq,正式支持WPF,开放更多的接口简单的介绍了一下AgileEAS.NET平台在2011年初的一些重大改进措施,其他涉及到有关于Orm体系的改进以及对linq的支持,AgileEAS.NET 快速平台之ORM体系的改进与ORM的新成员一文中对Orm的改进做了介绍,本文将详细的给大家介绍这AgileEAS.NET平台中Orm对Linq技术的支持。
Linq介绍:
LINQ是Language Integrated Query的简称,它是集成在.NET编程语言中的一种特性。已成为编程语言的一个组成部分,在编写程序时可以得到很好的编译时语法检查,丰富的元数据,智能感知、静态类型等强类型语言的好处。并且它同时还使得查询可以方便地对内存中的信息进行查询而不仅仅只是外部数据源。
LINQ定义了一组标准查询操作符用于在所有基于.NET平台的编程语言中更加直接地声明跨越、过滤和投射操作的统一方式,标准查询操作符允许查询作用于所有基于IEnumerable<T>接口的源,并且它还允许适合于目标域或技术的第三方特定域操作符来扩大标准查询操作符集,更重要的是,第三方操作符可以用它们自己的提供附加服务的实现来自由地替换标准查询操作符,根据LINQ模式的习俗,这些查询喜欢采用与标准查询操作符相同的语言集成和工具支持。
我们来总体看看LINQ结构:
需要说明一点的是,Linq是从.NET3.5开始支持的,.NET3.5 Framework 中提供了 LINQ to Objects、LINQ to DataSets、LINQ to SQL、LINQ to Entities、LINQ to XML等默认支持。
以上内容是摘抄自互联网的相关内容,简单的说明了一下Linq及Linq的应用,如果说单纯的那么Linq是一种语言中的特性的话LINQ to Objects、Linq to SQL就是这种语言特性在对象查询、SQL查询中的具体应用。
Linq to EAS.NET:
Linq to EAS.NET 同LINQ to Objects、Linq to SQL 一样,是应用了Linq这种语言特殊在AgileEAS.NET平台的Orm体系的应用,类似于Linq to SQL、Linq to Entities,应用Linq语言特殊实现AgileEAS.NET平台Orm对象的查询,让使用AgileEAS.NET平台进行开发变得更加简单和方便。
下面我们来进行一个简单的Linq to EAS.NET 应用吧:
第一步:打开对象设计器,建设一个实体对象(Product),并生成代码:
第二步:打开AgileEAS.NET平台对象设计器生成的代码,增加一个Asp.NET Web应用程序LinqDemo.WebUI,并且在Default.aspx页面中拖放一个GridView并且设定绑定信息如下:
第三步:使用linq编写数据查询代码并绑定到GridView:
第四步:修改Web.Config文件,增加以下配置信息:
<EAS.Objects>
<!--访问器。-->
<object name="DataConnection" assembly="EAS.Data" type="EAS.Data.Access.SqlClientConnection" LifestyleType="Singleton">
<property name="ConnectionString" type="string" value="Data Source=.;Initial Catalog=demo;User ID=sa;Password=sa1234;"/>
</object>
<object name="DataAccessor" assembly="EAS.Data" type="EAS.Data.Access.SqlClientAccessor" LifestyleType="Singleton">
<property name="Connection" type="object" value="DataConnection"/>
</object>
<object name="OrmAccessor" assembly="EAS.Data" type="EAS.Data.ORM.OrmAccessor" LifestyleType="Singleton">
<property name="DataAccessor" type="object" value="DataAccessor"/>
<property name="PageProvider" type="object" value="PageProvider"/>
</object>
<object name="PageProvider" assembly="EAS.Data" type="EAS.Data.ORM.OraclePageProvider" LifestyleType="Thread"/>
<object name="ServiceBridger" assembly="EAS.MicroKernel" type=" EAS.Services.LocalServiceBridger" LifestyleType="Singleton"/>
<object name="Logger" assembly="EAS.MicroKernel" type="EAS.Services.TextLogger" LifestyleType="Singleton"/>
</EAS.Objects>
最后:编译运行,看看结果:
OK,通过以上简单的过程,基于Linq to EAS.NET实现了一个简单的like查询,相信大家已经看到了这个编程的便宜性,接下来我将会在把有关于Linq to EAS.NET所实现的表达式做一些简单的说明。
支持那些表达式:
Linq所支持的表达式非常的多,AgileEAS.NET平台只是实现了使用最频繁的那些表达式,对表没有实现的表达式在开发中或者要采用其他进行处理,下面我详细的向大家介绍AgileEAS.NET所实现的那些表达式:
条件表达式
Linq to EAS.NET中实现了“=”、“>”、“<”、“>=”、“<=”、“!=”、“like ”匹配、In 查询、Between 、以及And、Or组合。
排序表达式
Linq to EAS.NET中实现了Order by ,Order by Desc排序。
统计及分页
Linq to EAS.NET也实现了First、Last、FirstOrDefault、LastOrDefault表达式。
Select New {}
Linq to EAS.NET也实现了select new {}表达式,这将能大大提高编程的方便性和更高的查询性能,如下写法:
其他表达式
Linq to EAS.NET实现了 Count统计以及基于统计的分页支持Top、Take及Skip表达式。
下一步的计划:
在接下来的Linq to EAS.NET版本中我们将陆续支持更表的表达式,在近期将会支持Sum、Average、Max、Min表达式,在下一步Orm支持关系之后将进一步支持join 、left join、right join表达式。
对于Group by 、Having表达式暂时还没有考虑到支持。
如何实现Linq的:
Linq to EAS.NET的实现思想非常的简单,即解析Linq表达式并转换为AgileEAS.NET的查询表达式树并由AgileEAS.NET平台的Orm执行并返回结果。
在AgileEAS.NET平台的Orm技术中,我们实现了一个LINQ Provider,即EAS.Data.Linq.DataEntityQuery<T>,在执行任务linq任务之前,并且显式的定义EAS.Data.Linq.DataEntityQuery<T>实例,由他在解析并势力Linq语法,在此要感谢李会军的两篇文章:打造自己的LINQ Provider(上):Expression Tree揭秘和打造自己的LINQ Provider(中):IQueryable和IQueryProvider,遗憾的是,他并没有写出下篇,感兴趣的朋友去看看吧。 AgileEAS.NET平台ActiveXForm运行容器的客户端工作插件。
本文中的小例子及其相关的对象定义文件、建表及数据创建脚本、源代码文件,请大家从这里下载。
下载说明
有关于平台最新版本的最新发布版本的程序集、类库手册、相关资料,请大家从AgileEAS.NET平台的官网http://www.smarteas.net/进行下载,官网设有独立的下载页面,从这里下载:官网下载。
CallHot 写过一个系列的基于AgileEAS.NET平台的开发案例,请大家通过AgileEAS.NET平台开发Step By Step系列-药店系统-索引及AgileEAS.NET敏捷开发平台及案例下载(持续更新)-索引、AgileEAS.NET平台开发实例-药店系统-视频教程系列-索引一系列文章进行下载。
如何联系
如果您在使用AgileEAS.NET开发平台中有什么问题,请使用如下几种联系方式或者沟通方式。
1、官方网站:
AgileEAS.NET平台:http://www.smarteas.net/
敏捷软件工程实验室:http://www.agilelab.cn/
2、AgileEAS.NET平台交流群:
AgileEAS.NET平台交流群:120661978(超级群)[新建] AgileEAS.NET平台交流群:125643764(高级群)[新建] AgileEAS.NET平台交流群:147168308(高级群)[新建]
3、系统架构交流群:
系统架构交流群:9105332(高级群)(已满) 系统架构交流群1:124825459(高级群)(已满) 系统架构交流群2:49124441(高级群)(已满) 系统架构交流群3:47025564(高级群)(已满)
链接
AgileEAS.NET平台开发指南-文章索引
AgileEAS.NET应用开发平台介绍-文章索引
AgileEAS.NET平台应用开发教程-案例计划
690855fa-73c6-464a-8e96-11ed746f5de5|0|.0
Tags: AgileEAS.NET, .NET, DAL, ORM, 元数据, MDA, SAAS, 敏捷开发, 中间件, 系统架构, 设计模式, 平台开发, 平台, 企业应用平台, Linq
AgileEAS.NET平台介绍 | 分布式 | 设计模式 | 网站优化
by 魏琼东
2011.5.8 20:58
AgileEAS.NET是一套企业级的快速开发平台或者说是中间件,主要服务于中小软件企业,以提高软件企业的有效生产率为主要目标,结合软件工程、dotnet构件技术、快速工作为其提供一个适合中国特色的中小软件企业的软件生产解决方案。
AgileEAS.NET平台自2004年底出了第一版本并且应用于实际项目之中,广泛的应用于医疗、保险、互联网、铁路、房地产、农业等行业,在实际应用中,与项目相结合,并一直持续的完善和改进。
[More]
by AgileEAS.NET
2011.3.26 15:59
by AgileEAS.NET
2011.3.26 15:58
by hot
2011.3.26 15:57
系统架构技能之设计模式-抽象工厂模式
[More]
by AgileEAS.NET
2011.3.26 15:45
by AgileEAS.NET
2011.3.26 15:43
by AgileEAS.NET
2011.3.26 15:41