e-works数字化企业网  »  文章频道  »  管理信息化  »  CRM

一种基于.NET平台的CRM框架研究

2007/8/8    来源:e-works    特约撰稿人:朱全敏      
关键字:CRM架构  .NET  XML  
本文在对CRM领域业务逻辑进行分析和总结基础上,以及对.NET平台中的丰富的对象上和模板模式进行了充分研究,建立了在.NET下的可复用的、易扩展的、异步交互的CRM软件框架。

    本文以CRM业务逻辑为指导,采用异步交互的设计思想,服务器端的代码以.NET下丰富的对象为优势(相对与其他开发平台)和以模板的设计模式为复用的基础,浏览器的代码也以XSLT与XML生成HTML为复用的基础。在工程应用的角度,用此框架设计的系统在系统的响应性能,系统的可复用性和易扩展性多有很高的价值。      

    1. 业务集成

    CRM对企业经营和生产过程中的业务流程进行彻底的重组,这种重组过程以理顺经营过程为中心,以适应市场变动的需求和提高客户的满意度为目标。基于以上述思想为依据,通过业务过程的集成,将生产管理系统与销售、营销、客户服务活动相结合,实现了企业生产、经营活动过程的集成,将对客户的管理渗透到企业的各个部门,使得生产和经营能够围绕市场和客户来进行,提高了企业及时响应市场的能力。一般CRM业务流程如图1所示,可以把CRM分为定单管理子系统、发货管理子系统、成品管理子系统、价格管理子系统、基础数据管理子系统、采购管理子系统、客户服务管理子系统。下面的基于.NET下的MVC的设计框架就是基于这些业务逻辑。


 图1 业务流程图

    2. .NET平台与模板模式

    2.1 服务器端利用ADO.NET从数据库中读取数据

    .NET平台下提供了类、接口、枚举和其他工具所组成的ADO.NET库,利用ADO.NET为数据访问提供了结构化的、功能强大的、高效的工具包。ADO.NET有2个核心的组件:DataSet和.NET数据提供者。可以利用这些.NET 数据提供者连接到各种类型的关系数据库, 并通过Command 对象执行数据库命令来获取数据, 然后通过DataReader 对象遍历记录。或通过DataAdapter 对象读取数据, 并将数据存放于数据集中。最后可将获得的数据以某种形式的XML文档保存起来。

    2.2 服务器端模板模式与浏览器端模板模式

    服务器端代码充分利用函数的覆盖(用函数的覆盖实现模板模式),特别是在框架的Servlet层(控制层),当控制层得到不同的浏览器端页面请求的时候,通过覆盖LoadPage来创建相应的WebPage对象。浏览器端代码充分利用XSLT 样式,通过XSLT中的模板规则元素描述了XLST 处理器如何转换XML 文档中满足某种条件的节点。声明模板规则时, 要创建一个顶级元素<template>, 指定哪些节点包含规则, 以在其match 特性中使用适当的XPath 表达式。这样在XSLT中可以根据相应的XML很容易布置可扩展的AJAX代码。   

    3. 基于CRM系统的软件框架

    3.1显示层(V层)

     显示层的作用是提供直观的,简便易用的界面在网络上与客户互动,是信息系统获取或输出信息的接口和前台,客户可以方便的提出要求,得到所需的信息。企业利用此平台调整和协调营销活动从而进行市场推广,把潜在客户变为现实客户,这不仅实现了企业面向客户的经营模式,还解决了与远程客户的交流的问题,提高了客户服务水平与工作效率。
 
    在编写浏览器端的HTML代码时,基于浏览器代码尽可能复用的原则下,采用XSLT模板解析XML生成HTML在浏览器显示的设计思想,在具体的实现的时候,应在ASPX页面中要指定这个ASPX页面的后台服务器的相应的Servlet,以登陆页面为例:首先在WebInitPage.aspx页面中写上<%@ Page language="c#" Codebehind="Servlets.cs"AutoEventWireup="false"Inherits="Ebanswers.Library2.Web.WebPageInitServlet"%>,这样在Codebehind=" Servlets.cs "和Inherits="Ebanswers.Library2.Web.WebPageInitServlet"中指定了这个WebInitPage.aspx提交的数据将在Servlets.cs文件中的Ebanswers.Library2.Web.WebPageInitServlet类处理,其中WebPageInitServlet是充当了控制器的功能,当URL请求的这个ASPX页面的时候,这个控制器会在后台调用相应的XSLT与XML代码生成登陆页面的HTML代码发给浏览器显示。对整个CRM业务逻辑的分析,总体上把整个业务的显示页面分为数据的插入页面、数据的详情页面、数据的更新页面,数据的查询页面。当为每个页面编写AJAX代码的时候,就是把那些相应的AJAX放在一个JS文件里,在服务器程序中根据要生成的具体的HTML页面把相应的JS文件指定到相应的XML文件里,这些XML文件再与相应的XSLT文件生成HTML。这样的话,那些AJAX集中的放在了一起,如果当以后有业务变动的时候,只要把这个JS文件中的AJAX代码变动了,而其他的像服务器代码与相应的这个页面的XSLT文件多不动。同样在这些XSLT文件方面,把大部分XSLT文件用到的公共的要显示的效果单独的组织成一个XSLT文件,比如像日历(Button.xslt)、按钮(CalendarTemplate.xslt),而其他的要用到日历和按钮的XSLT文件就是引用这些Button.xslt和CalendarTemplate.xslt。这样当要升级这个按钮的时候,只要变动这个Button.xslt文件就是可以了,其他的引用这个XSLT的所有文件多保持了不变。

    3.2 控制层(C层)

    在逻辑上在这个CRM框架中上一个控制类,这个控制类就是接受浏览器端的请求,并且根据浏览器端的请求生成相应的为这个浏览器页面的业务逻辑服务的WebBasePage对象,具体的UML图如图2所示。其中Servlet层在整个CRM中是这样设计: public abstract class WebBaseServlet : System.Web.UI.Page,各个浏览器页面的Servlet多是继承这个WebBaseServlet(如登陆页面WebInitPage.aspx,它的控制类public class WebPageInitServlet : WebBaseServlet),而每个控制类多是根据覆盖protected override WebBasePage LoadPage()方法来实现每个ASPX页面的不同请求服务的,写这个控制类的目的就是进行服务的转发,也就是当这个ASPX页面由于某种原因在处理这个页面的数据的业务逻辑变动的时候,就可以只是变动这个控制层中的LoadPage()方法。比如登陆页面WebInitPage.aspx的请求的protected override WebBasePage LoadPage()方法实现如下:
protected override WebBasePage LoadPage() {
 string pageName = Request.QueryString["Source"];  /// 根据Source,初始化相应的WebPage,并返回这个Page
            ApplicationGlobal appGbl = (ApplicationGlobal)Application[WebBasePage.ApplicationData];
            WebBasePage page = (WebBasePage)((StardardAttributesCollection)appGbl.AttrsCollection).WebPages.NewInstance(pageName, new object[] { this });///根据Source初始化的WebPage
            return page;
        }
    }

 图2浏览器端与Servlet的交互图


    3.3模型层(M)

    本CRM框架对模型层又进一步的划分成数据访问层与业务逻辑层。数据访问层的主要作用是提供提供一个性能良好、使用可靠、开放的和易于扩展的支撑环境,实现CRM系统与ERP系统之间的数据集成,同时保证数据的一致性和同步性,系统功能的易用性与统一性。数据访问层分为访问共享数据库和访问分析数据库,实现了对基础数据和分析数据的分散管理。共享数据库的数据来源于企业内部资源的数据信息和通过用户界面获得的客户信息。即存储提供动态实现整个集成系统所需的产品信息和客户信息的提取查询等信息交互功能的数据。分析数据库将相关的客户信息和产品信息进行数据处理,为上层决策提供依据。在组织数据层访问层的代码方面主要就是扩展ADO.NET中的类库,写抽象基类BaseDataSet的主要作用是对Data(数据访问层)的包装,具有自注册功能,数据库连接,连接字符串,应用程序组,应用程序名,和用户自定义属性。当有其他要对具体的页面的要访问数据库的时候,多是继承这个BaseDataSet来进一步的封装数据访问层的类。在本文的框架里提供了基本的数据访问层的类图如下:UpdateDataSet类继承BaseDataSet类,它具有实现数据的各种显示,生成对数据库更新的数据集,处理数据类型例外,表信息, 字段转换表, 字段事件列表, 约束集合, 应用程序组, 资源管理器, 资源文件名, 资源名,和禁用页面等功能。XmlBaseDataSet类也是继承BaseDataSet类,它提供只提供浏览数据功能,不提供数据提交功能的服务。最主要的是XmlDataSet类继承UpdateDataSet类,在前面已经提到了,要对上层的业务逻辑层提供统一简单的数据访问层的接口,定义了每个具体的ASPX页面对数据库的记录的操作的Insert、Update、Detail、List、Delete五种模式,故XmlDataSet类提供了FillUpdateTables(),FillListTables(),SetInsertXmlData(),SetUpdateXmlData(),SetDetailXmlData(),SetListXmlData() 这几个方法来支持这5种操作模式。这里提到的是DataSet工具类,根据AOP思想,数据在Internet上跑的是XML,故对从浏览器上接受AJAX传递过的XML数据的处理与对DataTable中的记录转化成Xml这一方面用DataSetUtil类来处理。这样当在数据转化格式有变动的时候就是只要改变DataSetUtil类就是可以了。

责任编辑:孙亚婷
本文为e-works原创投稿文章,未经e-works书面许可,任何人不得复制、转载、摘编等任何方式进行使用。如已是e-works授权合作伙伴,应在授权范围内使用。e-works内容合作伙伴申请热线:editor@e-works.net.cn tel:027-87592219/20/21。
e-works
官方微信
掌上
信息化
编辑推荐
新闻推荐
博客推荐
视频推荐