郑胜龙 , 姚 铮 , 陈从华
(1.清华大学 电子工程系,北京 100084;2.厦门雅迅网络股份有限公司 福建 厦门 361008)
近年来,我国信息技术的迅猛发展和信息化水平的不断提高,给传统管理方式向信息化、系统化、集成化的转变创造了良好的条件,CRM(Customer Relationship Management,客户关系管理)系统应运而生[1]。但仅仅引进CRM系统并不意味着公司直接步入了制度化、自动化的业务流程。只有对业务流程进行持续改进,才能确保CRM技术能融入到变革流程中。由于市场数据异常庞大,定性确定业务逻辑也较为复杂,往往需要重复的使用与更改才能确定系统的根本大纲。这直接导致了软件开发周期的极大延长[2-3]。为了避免多次开发所造成的研发时间延长和市场响应速度降低,本文建立了业务流程处理元模型,提出了一种基于Android系统的CRM软件自定义界面的设计方法,解决了传统CRM系统开发过程周期长、成本高、复用率低等问题。帮助企业管理人员通过该系统快速了解、掌握和传递市场信息,确保市场信息的时效性、实用性和价值性。
Android是美国谷歌开发的适用于便携产品使用的软件平台。本文在研究过程中考虑到CRM系统的实时性、高效性、高可拓展性等特点,充分利用Android操作系统扩展性、可移植性、易维护和开源等,将两者结合起来可使系统具有兼容性强、稳定性高、跨平台、低成本、易于维护和升级等优点[4-5]。
该系统主要由浏览器客户端、服务器端和手持终端(Android操作系统)三部分组成。浏览器客户端主要对业务流程及管理逻辑进行定义,将定义模板存入服务器端数据库,而手持端向数据库请求模板并进行解析和显示。系统的总体框架图如图1所示。
企业管理者通过统筹本企业的业务方向并结合具体市场运营状况,定制业务员的业务访问流程和规范,如:信息管理、门店拜访流程。开发人员了解到具体的操作规范,整理为操作模板,通过浏览器客户端进行模板配置,模板数据以Jason对象组帧存入到服务器数据库中。
业务员通过手持终端的CRM软件向服务器数据库请求具体的操作模板,并由模板解析器将具体模板按照需求解析并显示,业务员即可通过手持端软件进行客户信息管理、门店拜访等相关操作。
图1 总体框架图Fig.1 General framework
系统网站前端采用了当前互联网上比较流行的富客户端MVC设计模式,即前端页面的功能比较强大,采用目前在企业ERP Web程序中比较流行的 EXT JS框架进行开发,该框架具有丰富的界面组件与接口,通过它能开发出接近于桌面应用程序用户界面的网页页面,可以给用户以良好的用户体验[6]。同时前端页面全部通过 AJAX的模式向后台服务器发送请求,可以不影响用户操作的方式异步请求响应,从而有效地减低了响应时间与服务的负担[7]。
具体的设计上,系统平台前端又采用了插件式的模块加载方式,各个具体功能模块对应的JS文件通过动态创建Script元素的方式加载,采用的是LAZY LOAD的方式,即主页面加载时并不下载各具体模块的JS文件,只有在点击具体功能时才动态加载,这样可以有效地提高系统启动速度,给用户以良好的体验。
系统网站后端的控制层设计的非常简单,它的主要功能就是接受前端发送来的AJAX请求,并从中提取出请求的参数内容,并将这些参数传入对应的存储过程进行处理,然后将存储过程返回的结果组成Jason格式的数据返回给前端[8]。
后端的功能非常简单,几乎不涉及任何具体的业务逻辑,也不负责改变前端显示,它唯一的作用是联系显示层与数据库持久层。这种设计的目的就是减低网站重新部署的工作量(后端代码改变后需要重新编译部署,重启网站服务器,而前端的JS文件和数据库的存储过程修改后可以立即使用)。
本系统对业务逻辑的处理基本上集中于数据库的存储过程,这样做的优点是:首先大量减少了网站服务器与数据库服务器之间的数据通讯量;其次,由于存储过程都经过了预编译,缓存了执行计划,所以执行起来速度比直接执行SQL语句快得多;最后,可以向网站应用服务器屏蔽底层的数据结构,底层表变化时可以减少前端与后端代码的修改。减少部署的工作量,加快对客户的响应速度;存储过程修改后应用程序服务器不需要重启。通过了解具体的操作规范,进行拜访模板定义,主要的拜访模版表定义如下:
表1 模板表Tab.1 Template
表2 步骤表Tab.2 Step
表3 控件表Tab.3 Controls
该软件客户端采用Android平台。在总体设计上采用软件分层的方法,分为框架层和应用层。软件架构如图2。
1)应用层
图2 软件框架图Fig.2 Software frame
该软件的UI设计严格按照交互设计原型进行开发,并对关键公共部分视图做抽象处理。完整继承Activity的生命周期Activity与Activity之间杜绝采用藕合的接口调用数据方式,所有数据交互必须采用Intent进行传递,保证各Activity数据的独立性。为了使类变量不被外部引用,所有Activity 中的基本类型 (int, long,short, byte, boolean, char等)的类变量、实例变量都定义为私有变量,尽量少用或不用类变量,非基本类型的变量视情况而定。另外这些基本类型变量都必须用onSaveInstanceState和onRestoreInstanceState进行备份和恢复。当界面被内存回收后能够重绘界面控件并加载控件值,提升用户体验。其他所有界面都继承该公共类,使得软件界面风格一致,便于统一管理与修改。
软件的逻辑层封装主要体现在Task与Service的设计。在业务员使用软件进行相关业务操作时,将会不时地请求、查询服务器后台数据,所以业务请求和中心下发数据的解析处理,是业务逻辑的重要一环。对Task进行重新设计和封装,采用公共的句柄Handle用以处理Task所需要发送对象,返回类,回调方法,重传次数,超时时间等关键变量。另外,Android中提供了Service组件可进行后台运行和跨进程访问。通过启动一个服务,可以在不显示界面的前提下在后台运行指定的任务,这样不会对当前客户操作行为产生影响。抽象出基础服务类并定义基本的创建、启动、销毁等事件方法,由各个指定业务的服务继承该基础类用以管理特定业务对象的数据后台管理。
数据存储作为软件执行流程的必备功能模块,系统主要采用了Preference和Android自带的SQLite轻量级数据库两张方式用于数据存储管理。其中,Preference用以存储系统公共参数;SQLite数据库用以存储用户的基础数据和拜访数据等。数据层中不包含任何的业务逻辑结构和界面显示特性的需求,仅仅提供各数据库表中存储的基本数据信息。即,该层不能调用逻辑层与UI层代码,充分隔离数据管理与界面和逻辑层。支持上层调用下层,而下层不允许访问上层。有效降低各功能模块耦合度,细化软件模块的划分,提高可拓展性。
2)框架层
框架层的设计主要是对于与服务器后台数据交互的完善。包含有通讯设计、协议解析设计。通讯设计主要采用了Android中提供的HttpURLConnection和HttpClient接口。系统在继承HttpUrlConnection的基础上,继续完善通用的接口功能模块,支持根据业务模式自动切换网关等,支持重传机制和超时控制,完善网络错误提示和出错处理;协议解析主要采用JSON格式和二进制流两种格式。每条协议单独一个文件,同所在业务模块放在同一个包下。协议文件以协议号进行命名,分上行和下行两种。协议的组帧和解析必须用对象进行处理。所有协议的设计必须符合协议要求,尽量设计成一个对象。支持采用FastJason技术进行自动解析,达到减少工作量的目的。并且可以快速响应协议的修改,而修改工作量不大。
以上的设计方案为实现自定软件配置数据、业务数据的传送解析提供了框架基础,能够满足数据传送的时效性,保证管理者对终端软件的实时掌控,具有较强的系统变更能力。余下的关键问题在于终端软件如何对接收到的模板数据进行视图展示并建立控件联系,因为表单中控件数量繁多,其复杂属性根本无法通过语言描述和类型划分来实现,为解决这一难点,我们将其复杂的业务逻辑控制使用JavaScript语言实现。在JavaScript解析引擎的基本框架上构建实现销售子系统业务流和自定义表单的界面解析引擎和逻辑处理引擎。
1)视图解析引擎
中心下发数据通过JSON解析后,存储数据在本地数据库中,建立与中心相对应的模板表:Table_Scheme、Table_Step、Table_Ctrl。界面解析引擎采用流式布局的方法,依次对各级组件进行解析展示。在获取组件属性信息后,根据其相关类别,建立模板、步骤、控件视图,各组件的继承关系通过主键值进行关联。为了简化其创建流程机制,该视图解析引擎先剥离了所有的逻辑属性需要,仅仅实现组件的页面效果展示,而将复杂的逻辑处理让逻辑处理引擎在后台执行。这种设计方案能够功能界面的实现快速展示,而无需考虑各种复杂逻辑的交叉影响,大大缩减了视图展示的启动时间,具有良好的用户体验效果。
2)逻辑处理引擎
逻辑处理引擎主要解决各组件的内在联系。因为在组件的逻辑控制需要在Android环境下对JavaScript语言的动态编译,在开发和运行基于GUI的应用程序时尤其有效。在此基础上,逻辑处理引擎构建Android平台下几乎所有简单控件的监听事件ListenerType,根据组件的配置需要来判断是否执行相关脚本,其脚本内容CtrlListener以文本形式存放在属性字段中,通过Rhino实现Android平台对JavaScript代码的执行,同样,在JavaScript执行代码中往往也存在对Android平台信息的调用执行,平台层提供了CallContext提供了视图控件值获取、写入,数据库访问等各项操作接口给JavaScript,同时也支持其定义的Event事件进行操作。
根据元模型定义,可以定制一个“实时汇报”的功能模块。通过浏览器客户端的规范操作和输入,可生成模板配置数据源存储于服务器端,当手持端通过HTTP发起模板下发请求时,服务器端即可下发Jason组帧的源数据,用以配置手持段软件的具体执行规范模板。元模型和数据源示例如下:
图3 表单视图解析结构图Fig.3 The parses of view form structure
表4 “实时汇报”元模型表Tab.4 “Real Time Report” template
图4 表单逻辑解析结构图Fig.4 The parses of logic form structure
通过配置数据源可以看出“实时汇报”功能含有一个“工作日志”步骤,步骤中的界面展示两个控件,其中:“汇报时间”为文本框,定义了单击事件用以获取系统的当前时间方法;“汇报内容”控件为编辑框并且其最大输入长度为200个字节。另外,还可以给选择时间文本框加上时间选择限制,如不能大于当前时间。只需为其属性的数据源CTRL_FUN_NAME、CTRL_FUN_BODY分别添加如下定义:
上述是一个非常简单的功能模块,各企业根据具体业务场景的需要,可以添加诸如:“考勤管理”、“门店管理”、“门店拜访”等各种功能。在添加功能或更改业务流程的过程中,只需从浏览器客户端进行模板定义的修改,服务器可根据重新配置的元模型更新数据源,通过无线网络下发至手持端软件即可实现业务流程的更新和改善,且各基础功能的模板定义具有较强的通用性,可以相互借鉴引用。在业务逻辑复杂的情况下,企业管理者可以根据业务员使用过程中反馈的具体情况,不断调整各模板流程的控制规则和流动关系,通过服务器后台进行灵活的维护管理,以达到最佳的使用效果,且在此过程中完全不涉及软件的二次开发,也无须支付高昂的二次开发或升级维护费用,其市场响应速度也大大提高。
本文设计的自定制CRM软件结合了Android操作系统的优秀特性,可以在Android手机、平板等终端设备上良好地使用。通过浏览器客户端的简单地配置即可生成一个相对成熟的CRM软件原型,该软件可以满足绝大部分的业务需求的操作流程模板,当有特定控件展示,只需添加具体业务逻辑控件及即可迅速客户需求的改动,大大减少了系统营运的维护成本与二次开发成本。能够在短时间内快速响应市场变化并做出改进,为企业实现高效、精准的客户关系管理。
[1]李晴,朱艳阳.基于核心价值的软件企业客户关系管理研究[J].科技管理研究,2013,33(14):211-215.
[2]刘继萍.中小企业客户关系管理现状与问题研究[J].内蒙古财经学院学报(综合版),2011,9(4):139-142.
[3]刘惠传 .我国零售业客户关系管理应用研究[D].山东:山东大学,2013:7-30.
[4]马越.Android的架构与应用[D].北京:中国地质大学,2008:9-22.
[5]姚昱旻,刘卫国.Android的架构与应用开发研究[J].计算机系统应用,2008(11):110-112.
[6]仰燕兰,金晓雪,叶桦.ASP.NET AJAX框架研究及其在Web开发中的应用[J].计算机应用与软件,2011,28(6):195-198.
[7]杨智勇.基于AJAX的自定义表单及报表生成工具的研究与开发[D].重庆:重庆大学,2008:27-44.
[8]殷旭,廖斌,张志华,等.基于AJAX工作流表单的研究与应用[J].计算机应用与软件,2010,27(3):76-77.