论文范例

更新时间:2023-03-11 02:32:46 阅读: 评论:0

可爱小绵羊-元宵节是怎么来的

论文范例
2023年3月11日发(作者:小腿肌)

密级:保密期限:

硕士研究生学位论文

题目:基于Android平台的CRM系统客户端软件的

研究与实现

学号:xxxxxx

姓名:xxxxxx

专业:计算机科学与技术

导师:xxxxxx

学院:软件学院

2013年1月

独创性(或创新性)声明

本人声明所呈交的论文是本人在导师指导下进行的研究工作及取得的研究

成果。尽我所知,除了文中特别加以标注和致谢中所罗列的内容以外,论文中不

包含其他人已经发表或撰写过的研究成果,也不包含为获得北京邮电大学或其他

教育机构的学位或证书而使用过的材料。与我一同工作的对本研究所做的任

何贡献均已在论文中作了明确的说明并表示了谢意。

申请学位论文与资料若有不实之处,本人承担一切相关责任。

本人签名:日期:

关于论文使用授权的说明

本人完全了解北京邮电大学有关保留和使用学位论文的规定,即:研究生在

校攻读学位期间论文工作的知识产权单位属北京邮电大学。学校有权保留并向国

家有关部门或机构送交论文的复印件和磁盘,允许学位论文被查阅和借阅;学校

可以公布学位论文的全部或部分内容,可以允许采用影印、缩印或其它复制手段

保存、汇编学位论文。

本学位论文不属于保密范围,适用本授权书。

本人签名:日期:

导师签名:日期:

基于Android平台的CRM系统客户端软件的研究与实现

摘要

随着社会信息化进程的推进,信息在社会中的更新传播速度也越

来越快,客户的需求也在时刻的变化。这也就使得传统的客户关系管

理方式对信息的处理能力、响应速度相对滞后,影响企业的发展。针

对当前客户关系管理的不足,并结合移动互联网技术,本文设计并实

现了一款基于Android平台的CRM(CustomerRelationship

Management,客户关系管理)系统客户端软件,以满足快速高效为

企业客户提供服务的需求。

本文首先针对某企业CRM系统进行了需求分析,提出系统所支

持的九项业务:客户管理、联系人管理、销售机会管理、订单管理、

产品管理、线索管理、行动管理、知识库管理和日程管理等,并进行

了需求功能的分解。其次,本文采用了C/S模式和MVC相结合的模

式,对CRM系统进行了结构设计,将系统划分为表示层、业务逻辑

层、基础服务层和数据层四层体系结构;并进行了功能模块的划分,

研究了功能模块的业务处理流程,并对其进行了详细设计与实现。最

后,对CRM客户端软件进行了功能和性能测试,测试结果表明客户

端各个功能模块运行良好并且业务处理高效。

本文通过对当前诸多企业移动应用的分析,对共有界面元素以及

底层功能进行开发设计,为其他功能提供了规范性的开发模式,使应

用开发周期大大减少,减轻了开发工作量,同时也使软件质量得以保

证,方便后期维护。

综上所述,本文研究、设计并实现的CRM系统客户端软件,具

有高效性、移动性、便捷性等特点,在有效解决当前客户关系管理缺

陷的同时,帮助用户开展各项业务活动,提高业务处理效率,保证企

业经营管理的正常进行。

关键词:CRMAndroidMVC对象序列化

RESEARCHANDIMPLEMENTATIONOFANDROID

CLIENTSOFTWAREOFCRMSYSTEM

ABSTRACT

Withtheadvancementofsocialinformatization,thespeedofupdating

informationandinformationdisminationinsocietyisgettingfaster,sothedemand

sreasontraditionalcustomerrelationship

managementislaggingbehindrelativelyfortheinformationprocessingcapacityand

thespeedofrespon,ofthe

currentlackofcustomerrelationshipmanagement,andconnectingwiththemobile

Internettechnology,wedesignedandrealizedaCRM(CustomerRelationship

Management)ftwarecan

providetimelyrvicefortheenterpriscustomerrapidlyandefficiently.

Firstly,inviewofthedemandanalysisoftheCRMsystemofacertainenterpri,

weproposninervicesthatthesystemsupportingfor,theyarecustomers

management,contactsmanagement,salesopportunitymanagement,orders

management,productsmanagement,cluesmanagement,actionsmanagement,the

knowledgebamanagement,schedulemanagementandsoon,andatthesametime

ly,wedesignthestructurefortheCRM

system,usingthemodelthatcombiningC/temisdivided

intofour-layerstructure:theprentationlayer,businesslogiclayer,basicrvices

layeranddatalayer;andwealsodividesfunctionmodule,analyzeachmodule

businessprocessingprocedureofitsfivefunctionmodules,anddesignsand

y,badonthefunctionand

performancetestontheCRMsystemandtheclient,itverifiesthegoodoperationof

eachfunctionalmoduleandtheefficiencyofbusinessprocessing.

Badontheanalysisofthecurrententerprimobileapplication,wedesigned

UIinterfaceelementandbottomfunctionsdevelopment,whichprovidesthe

developmentmodeshortenstheapplicationdevelopmentcyclegreatly,andreduces

thedevelopmentworkload;meanwhilethequalityofthesoftwarecanbeensured

givingconveniencetothelatermaintenance.

Tosumup,theCRMsystemclientsoftwarethatwediscusd,designedand

implementedisofhighefficiency,otonlysolvethe

currentdefectsofthecustomerrelationshipmanagementeffectively,butalsohelpthe

urtocarryoutvariousbusinessactivities,improvetheprocessingefficiency,and

ensuretheenterprimanagementworkingregularly.

KEYWORDS:CRM,Android,MVC,ObjectSerialization

i

目录

第一章绪论..............................................................................................................1

1.1课题研究背景.....................................................................................................1

1.2课题研究目的和意义.........................................................................................2

1.3课题研究现状.....................................................................................................3

1.4课题研究内容及主要工作.................................................................................3

1.5论文结构.............................................................................................................4

第二章相关技术介绍..............................................................................................6

2.1客户关系管理相关概念.....................................................................................6

2.1.1客户关系管理...............................................................................................6

2.1.2客户关系管理移动应用系统解决的问题及思路.......................................6

2.2Android操作系统介绍........................................................................................7

2.2.1Android系统的特点.....................................................................................7

2.2.2Android的系统架构.....................................................................................8

2.2.3Android四大组件.......................................................................................10

2.3DES加解密技术................................................................................................11

2.4Java对象序列化技术........................................................................................12

2.5本章小结...........................................................................................................12

第三章系统需求分析............................................................................................13

3.1功能需求分析...................................................................................................13

3.1.1客户管理功能.............................................................................................13

3.1.2联系人管理功能.........................................................................................14

3.1.3线索管理功能.............................................................................................15

3.1.4销售订单管理功能.....................................................................................16

3.1.5行动管理功能.............................................................................................17

3.1.6其他功能.....................................................................................................19

3.2非功能性需求分析...........................................................................................19

3.2.1端到端业务处理响应时间.........................................................................19

3.2.2安全性.........................................................................................................20

3.2.3易用性需求.................................................................................................20

3.3本章小结...........................................................................................................20

ii

第四章系统设计....................................................................................................21

4.1系统架构设计...................................................................................................21

4.1.1物理结构.....................................................................................................21

4.1.2逻辑结构.....................................................................................................21

4.2系统主要模块设计...........................................................................................24

4.2.1客户模块.....................................................................................................24

4.2.2联系人模块.................................................................................................25

4.2.3线索模块.....................................................................................................26

4.2.4销售订单模块.............................................................................................27

4.2.5行动模块.....................................................................................................29

4.3客户端结构设计...............................................................................................30

4.5本章小结...........................................................................................................33

第五章CRM系统客户端的实现..........................................................................34

5.1客户端界面元素以及底层功能的实现............................................................34

5.1.1共用组件的实现.........................................................................................34

5.1.2通用父类——BaActivity的实现...........................................................37

5.1.3模块创建和初始化.....................................................................................40

5.1.4数据封装的实现.........................................................................................42

5.1.5通信模块的实现.........................................................................................49

5.2客户端主要模块的实现...................................................................................51

5.2.1客户功能模块的实现.................................................................................51

5.2.2联系人模块的实现.....................................................................................54

5.2.3线索模块的实现.........................................................................................56

5.2.4销售订单模块的实现.................................................................................58

5.2.5行动模块的实现.........................................................................................63

5.3本章小结...........................................................................................................65

第六章系统测试....................................................................................................66

6.1测试环境...........................................................................................................66

6.2系统功能测试...................................................................................................66

6.3系统非功能测试...............................................................................................68

6.4结果分析...........................................................................................................70

6.5本章小结...........................................................................................................70

第七章结束语........................................................................................................71

iii

7.1论文工作总结...................................................................................................71

7.2问题与展望.......................................................................................................71

参考文献......................................................................................................................73

致谢..........................................................................................................................74

攻读学位期间发表的学术论文..................................................................................75

北京邮电大学硕士研究生学位论文

1

第一章绪论

随着信息技术的飞速发展,企业之间的竞争越来越激烈,同时,企业客户的

需求每时每刻也都发生着变化,而传统的企业管理系统越来越难以适应信息和需

求的瞬息万变。如何及时准确地获取及处理客户信息已成为当今企业急需解决的

重要问题。

近几年,移动智能终端的出现,使得传统互联网产生了重大的变革,移动互

联网的流行已成为一大趋势。而随着智能终端的不断发展,人们也不再仅仅满足

于人与人之间简单的沟通交流,如打电话、发短信,而开始关注强大的移动终端

带来的丰富多彩的个性化服务。当前,智能终端已成为这个时代每个人不可或缺

的生活物件。

与传统手机相比,智能终端具有便携性、智能性、应用丰富等优势,这些优

势使得智能终端在社交、娱乐、商务等应用上能够为用户带来更加个性化、多样

化的体验。因此,将移动互联网与客户关系管理相结合,即在移动智能终端上开

发一款企业客户关系管理系统的客户端,能够将移动终端的优势最大化的发挥,

为企业带来更大的效益和价值。

1.1课题研究背景

CRM(CustomerRelationshipManagement)即客户关系管理,CRM是以“客

户”为中心,以信息技术为手段,以企业业务活动为对象,以客户信息为指导,

与客户进行高效地沟通,及时更新并反馈客户信息,从而帮助企业实现对客户信

息的管理,在维系并稳定企业客户的同时又扩大客户群,最终实现企业经济效益

的提升[1]。CRM强调企业应该与客户保持持久不间断的沟通,企业能够基于此来

了解客户不断变化的需求,并在此基础上指导企业的各项业务活动,改善管理方

式,提高产品或服务的质量,提高客户的满意度,从而实现客户的稳定化和持续

增长。

对于企业信息化飞速发展的今天,客户以及客户的需求也在时刻的变化当中,

如何更有效地维系老客户的关系、挖掘新客户,这些问题依然成为众多企业关注

的目标。而传统的CRM系统却也存在一定的缺陷:

1)实时性差。当今社会上,消费者或客户的消费行为会因为一些因素(如

媒体)的影响而瞬息万变,传统的CRM其基于的是所收集的历史数据以

及一些传统的通信方式,无法适应这种信息的快速变更。

北京邮电大学硕士研究生学位论文

2

2)获取信息的不及时。虽然随着企业信息化的发展,CRM也与计算机、互

联网进行了一定程度上的融合,但是,由于企业中业务人员必须坐在办

公桌电脑前才能进行相应的业务处理和操作,缺少机动性,客户信息的

获取及处理无法随着业务人员的工作随时随地地进行,这就大大限制了

信息的获取速度和范围,降低客户管理的效率。

3)耗时长。对于基于数据仓库和分析的CRM方式,所花费的时间较长,这

种方式也无法适应当今社会信息飞速增长变化的需求,也大大影响了企

业客户管理的效率。

目前越来越多的中国网民选择使用移动终端接入互联网,而“移动化”带来

的便捷性也逐渐融入到人们的生活、工作当中。在移动终端的推动下,移动互联

网产业得以飞速发展,移动化也已然成为当今全球互联网的发展趋势[2]。而智能

终端其移动性、便捷性的特点能有效地弥补传统CRM方式的不足。

1.2课题研究目的和意义

在移动互联网飞速发展与企业经营方式向“客户”转型的背景下,为了解决

传统CRM系统实时性差、获取信息不及时以及耗时长等缺陷,本课题以某企业

项目为依托,设计并实现一款基于Android平台的CRM系统的客户端软件。

将CRM与移动智能终端相结合,使终端移动性、便捷性的特点得以最大限

度的发挥,企业的业务人员将不再受时间地点的限制,能够随时随地地对客户需

求进行处理和反馈,提高客户关系管理的实时性。

另外移动智能终端拥有一些PC机上所没有的功能,包括通话、短信、通讯

录、位置服务等等,将这些功能与CRM相结合,能为CRM的功能扩展提供一

个良好的平台,使得业务人员可以通过更加快捷便利的方式与客户沟通,提高与

客户交互的频率和深度。

相比于PC机,智能终端的存储容量要小得多,处理能力也相对弱,移动CRM

客户端应提供最核心的功能、精简的界面。另外,移动CRM客户端将不关注对

大批量客户数据的挖掘和处理,取而代之的是依靠企业业务人员自行管理客户、

挖掘客户、维系客户关系。将每一个客户作为一个单独的个体,以一对一的方式

实施客户关系维护和管理。这种方式能够有效地发现和保存客户的行为方式和偏

好,从而依据每个客户的个别状况提出相应的应对策略或方案,增加客户关系管

理的灵活性。

本系统客户端软件结合了移动智能终端的优点,在提供客户关系管理基本

功能的基础上,使管理的各项操作不受时间地点的限制,并且将客户关系管理的

主动权交由企业业务人员,使得管理具有针对性、灵活性,能大大提高客户关系

北京邮电大学硕士研究生学位论文

3

管理的效率,使得企业能够更有效地维系老客户、挖掘新客户,对企业的整体发

展具有重要的现实意义,对移动互联网产业的发展、企业信息化进程的推动提供

巨大动力。

1.3课题研究现状

当前,移动技术被广泛应用,CRM也紧随移动办公进入移动领域,并且成

为了不少业务人员必备的办公用品。在以前,地域、时差、人员等诸多客观因素

会使得企业原本优质的服务能力下降,或者由于办公条件、通信传输、数据分析

等的局限性而导致无法及时响应客户的需求。随着企业之间竞争的激烈化和客户

个性化需求的与日俱增,企业必须能够提供具有实时性、不受限制的办公环境和

办公能力,让业务人员在任何时间任何地点都能与客户进行沟通,了解客户需求,

及时反馈市场信息等。因此,将CRM与移动互联网相结合,使CRM具备移动

性、便捷性等特点,这将是客户关系管理将来的主要发展方向。而随着CRM系

统的不断完善,在技术实现上也有了一定程度的发展,当前CRM系统在技术实

现上主要体现在以下几个方面:

1)信息分析技术。

CRM系统作为企业核心资源的管理系统,需要处理大量的客户信息,如何

分析和利用这些信息成为了CRM系统的关键。利用数据仓库、数据挖掘等关键

技术可以建立量化的、有效的评估体系,帮助企业更合理的指定经营策略。

2)集成多种客户信息交换渠道。

随着网络的发展,新的信息交流技术不断涌现,作为企业的常用企业管理软

件,CRM系统应该集成电话、电子邮件、手机短信、VoIP和网络会议等多种新

的通信方式,从而能够更加及时高效的为企业客户提供服务。

3)网络应用技术

企业业务信息处理,网络功能越来越发挥着重要的作用。CRM为企业带来

了实现电子商务的平台,企业也因此由传统企业模式转化为电子商务为基础的现

代化企业模式。

随着CRM管理理念以及实现技术的进一步发展,CRM系统也将不断实现

技术和应用的最新结合,进一步成为企业不可或缺的前端业务支撑系统。

1.4课题研究内容及主要工作

本课题的主要研究内容及工作可以划分为以下几点:

1)对基于Android平台的CRM系统的客户端进行需求分析。

北京邮电大学硕士研究生学位论文

4

本课题将首先对系统客户端软件进行需求分析,深入描述其功能和性能,确

定相关约束条件,以及服务器与客户端通信等方面的接口细节。

2)对设计开发本系统客户端进行技术调研、积累与分析。

将依据需求阶段所提出的相关需求,确定开发本客户端所涉及的相关技术,

对其进行调研、分析与对比,进行技术积累与储备。

3)设计并实现客户端共用界面元素以及底层功能。

本课题将设计并实现客户端共用界面元素以及底层功能,其中底层功能主要

包括数据封装/解析、加密/解密、压缩/解压缩、与服务器的交互等。

在设计过程中,将尽可能地涵盖开发同类或类似应用所具有的共有的特征及

功能;针对不同应用功能上的区别性,设计易修改、易扩展的接口,满足各个应

用、功能的特性要求,从而减少开发工作量,节省开发时间[3]。

4)设计并实现客户端各个功能模块。

本课题将基于需求分析及设计阶段的成果进行客户端功能的开发。各个功能

模块的设计与开发将基于之前完成的共用界面元素以及底层功能进行,保证风格

的统一性,同时减少开发工作量。本课题所要实现的功能模块包括:客户、联系

人、线索、销售订单、日常安排(行动)。

5)对客户端进行测试及部署。

本客户端的测试工作将分为以下几个阶段进行:单元测试,将针对软件内部

各个方法、功能点等“单元”进行测试。该测试工作将随着各个功能模块的开发

而进行;集成测试,针对子系统内部以及子系统之间的交互进行测试;系统测试,

将客户端与系统其他部分结合起来,在实际环境下运行,进行测试,同时包括性

能测试;验收测试,让用户也参与的测试,使用真实的数据进行测试。

在完成上述工作后,确定客户端版本以及相应版本管理工作,交付客户端,

发布在相关网站上。

1.5论文结构

本论文的结构和主要内容安排如下:

第一章介绍本论文的课题背景,阐述当前CRM系统的研究现状,说明本课

题的研究目的和意义,并介绍本文的组织结构。

第二章介绍客户关系管理方面的理论知识,介绍CRM系统中所使用到的核

心技术。

第三章介绍CRM系统的需求分析,包括客户管理、联系人管理、线索管理、

销售订单管理以及行动等功能需求,同时论述业务处理响应时间、安全性、易用

性等非功能需求。

北京邮电大学硕士研究生学位论文

5

第四章在需求分析的基础上对系统进行概要和详细设计。说明本系统的各

个功能模块的划分;分析CRM系统的体系架构、层次结构、业务流程以及数据

库表的设计。

第五章论述了客户端各个功能模块的实现。主要针对客户端共有界面元素

以及底层功能模块、客户模块、联系人模块、线索模块、销售订单模块、日常安

排(行动)模块,并给出上述各模块的流程图、类图以及时序图。

第六章论述系统测试工作,介绍测试用例,说明各个测试阶段的具体工作,

根据测试结果分析客户端完成情况。

第七章论文工作总结。对本论文工作进行总结,提出下一步改进和完善的

建议。

北京邮电大学硕士研究生学位论文

6

第二章相关技术介绍

2.1客户关系管理相关概念

2.1.1客户关系管理

当前关于客户关系管理,不同的研究机构或企业、公司有着不同的定义,但

是这些不同的定义对客户关系概念的理解具有共同之处,即客户关系包含了企业

与客户之间的所有关系,如买卖、咨询、售后等,是一种长期、紧密、互利互惠

的关系[4]。CRM系统将企业内部各个业务人员和各个部门的关于客户的所有信

息进行整合、分析,统一保存和管理,并以此为基础,向企业各部门提供良好的

访问接口,使得企业对于客户信息的管理具有高度的统一性、规范性。同时CRM

系统结合了先进的管理思想,采用信息产业的最新成果,为客户关系管理构筑信

息平台。该平台整合了数据挖掘、数据仓库等信息技术,能够为企业提供多方面

多领域的自动化解决方案,大大减轻了业务人员的工作强度和难度。

2.1.2客户关系管理移动应用系统解决的问题及思路

CRM整合了企业内部各个业务人员、各部门资源,并对这些资源进行有效、

规范地组织、整理和分析,从而提高了企业中整个客户关系生命周期的管理效果。

移动终端下的CRM系统为企业办公提供了一个新的平台,带来了信息时代

全新的运营理念,业务人员能够在客户关系生命周期中更加及时有效地了解相关

的资源,同时也简化、优化了业务人员的相关业务工作流程,从而提高企业的业

务活动效率。移动终端客户关系管理系统为企业解决四个方面的问题,如图2-1

所示。

客户关系管理

客户获取客户维系客户选择客户价值

怎样用最有效率的

方法获取客户

如何判断谁是我们最

有价值的客户

如何尽可能久的维

系老客户

如何获取最大客户

效益

图2-1移动终端客户关系管理所解决的问题[5]

从图2-1中可以看出,移动终端客户关系管理所重点关注四个问题的解决。

北京邮电大学硕士研究生学位论文

7

企业绝不希望自己的客户群时时刻刻都在发生巨大的变化,一个相对稳定的客户

群能够为企业创造一个平稳良好的盈利和发展空间。因此,企业必须及时获取并

快速响应客户的需求(这些需求有可能时刻都在变化),并提升产品服务质量,

提供良好便捷的产品购买渠道或服务获取渠道,同时提供良好的售后服务等。

CRM移动应用系统应该为企业提供与客户进行沟通交流的快速方便的渠道和方

式,增加企业业务人员与客户沟通的频率和效率。同时,企业也需要对其所有客

户进行评估和衡量,分析客户的潜在效益,使得客户关系管理具有针对性和侧重

性。CRM移动应用系统能帮助企业在营销活动中转被动为主动,主动地去找寻

客户、主动地获取需求、主动为客户提供产品和服务。

本课题将依照移动终端客户关系管理理念及其所关注的四个问题,进行CRM

系统客户端的设计和开发。

2.2Android操作系统介绍

随着移动互联网概念的普及和推广,移动终端正朝着智能化的方向飞速前

进,智能手机也逐渐的融入人们的日常生活工作当中,成为人们工作生活娱乐不

可或缺的设备或工具。自2008年Google公司发布了Android操作系统至今,

Android的版本已由当初的1.1上升至如今的4.2,而Google公司也将于明年5

月份正式发布Android5.0版本。随着版本的更新,Android操作系统也逐步趋于

完善,运行效率大幅提升,所提供的功能也更加丰富,用户体验也好。

在我国,Android终端的销量逐年攀升,已占领大部分终端市场,并且每年

每季度均能保持至少一成的增长幅度[6]。由此可见,Android已成为当前市场上

主流的移动终端操作系统,对其的研究具有重大的现实意义。因此,本课题选用

Android作为CRM系统客户端的开发平台。

2.2.1Android系统的特点

Android操作系统之所以受到用户和开发者的青睐,因为其具有以下几大优

势[7][8]:

1)开放性。

开放性是Android操作系统相比于其他终端操作系统所具有的最大的优势。

开发者可以随意地对Android系统进行个性化的修改,有利于开发出更具差异性

的应用;另一方面,厂商能够根据自己的硬件设备的性能来自行修改Android操

作系统底层的源代码,使得系统与硬件设备更加适配,从而发挥硬件的最佳性能,

提高用户体验。

2)应用程序平等性。

北京邮电大学硕士研究生学位论文

8

Android平台不需要区分核心应用和第三方应用。开发者可以随意的开发或

扩展任意的应用程序,大大拓宽了开发者的开发范围。另一方面,对用户而言,

用户可以随意替换移动设备上的应用程序,即便是拨号程序或者主屏幕这样的核

心应用,也在很大程度上满足了用户的个性化需求[9]。

3)易于开发。

Android应用程序基于Java语言进行开发,开发人员只要掌握基本的Java编

程技能就能够轻易的学习和上手Android应用的开发[10]。

4)无缝结合的Google应用。

Google应用平台为用户提供诸多优秀稳定的物联网产品,如Google地图、

Gmail、Google搜索等,而Android平台能够非常好的与这些应用无缝结合,为

用户提供更好的服务[11]。

2.2.2Android的系统架构

Android操作系统的系统结构图如图2-2所示。

Application(应用层)

HomeContactsPhoneBrowr

ApplicationFramework(应用框架层)

Activity

Manager

Window

Manager

Content

Provider

ViewSystem

……

Notification

Manger

Package

Manager

Telephony

Manager

Resource

Manager

Location

Manager

XMPPService

Libraries(系统运行库层)

Surface

Manager

Media

Framework

SQLite

OpenGL/ESFreeTypeWebkit

SGLSSLLibc

AndroidRuntime

(Android运行时)

CoreLibraries

DalvikVM

LinuxKernel(Linux内核)

DisplayDriver

Camera

Driver

Bluetooth

Driver

FlashMemory

Driver

Binder(IPC)

Driver

USBDriverKeypadDriverWi-FiDriverAudioDrivers

Power

Management

图2-2Android系统结构图[12]

从图2-2中可以看出,Android系统总共分为四层,从上至下分别是应用层

(Application)、应用框架层(ApplicationFramework)、系统运行库层(Libraries)

北京邮电大学硕士研究生学位论文

9

和Linux内核层。

1)应用层

Android平台上,一切可操作行为的载体即为应用程序,换句话说,Android

操作系统的基本单位为应用程序(Application)。应用层一方面包括Android系统

中自带的应用程序,如主屏幕、联系人、短信、设置等核心应用程序;另一方面,

还包括开发人员所开发的第三方应用。

2)应用框架层

应用框架是一个应用程序的核心和基础,它为开发人员的开发行为提供了详

尽的规范和约定。一方面,开发人员必须基于应用开发框架进行应用程序的开发,

以保持主体结构的一致性;另一方面,应用框架允许开发人员在遵守框架相关规

范的基础上,对其开发的应用程序进行必要的扩展,以满足各个应用程序的差异

性、个性化需求。

Android应用框架提供了访问所有核心API的方法。该框架提高了组件的重

用性,减少项目开发的工作量;同时,在遵循这个框架的相关原则的前提下,开

发人员可以在这个框架上尽情地扩展应用。Android应用框架层所提供的相关组

件如表2-1所示。

表2-1Android应用程序框架所提供的组件[13]

组件功能

视图(View)提供构建应用程序界面的各种控件。

内容提供器

(ContentProviders)

允许应用程序开放接口,让其他程序访问其数据。

资源管理器

(ResourceManager)

对资源的管理,包括本地字符串(String)、图片

(drawable)和布局文件(Layoutfile)等等。

通知管理器

(NotificationManager)

对状态栏的管理,可以设置并显示状态栏信息。

活动管理器

(ActivityManager)

对应用程序基本元素Activity的管理。

窗口管理器

(WindowManager)

对所有窗口的管理,如对话框(Dialog)等等。

包管理器

(PackageManager)

对Android应用程序(apk包)的管理,包括系统

本地自带的应用以及第三方应用。

3)系统运行库层

Android应用框架层为上层的开发提供了良好的平台和接口,为支持Android

对硬件设备的调用,系统运行库为上层提供了各种组件调用使用的支持。系统运

行库层包括系统库和Android运行时环境。

系统库各个部分的功能如表2-2所示。

北京邮电大学硕士研究生学位论文

10

表2-2Android系统库各部分功能说明

库功能

Bionic系统C库最底层的C语言标准库。

多媒体库

(MediaFramework)

Android系统多媒体库,为Android系统提供了多种音视

频及图片格式的支持。

SGL2D引擎库。

SSL

该库为Android系统提供数据通信方面的支持,位于各

层协议之间。

OpenGLES1.0提供3D效果的支持。

SQLite提供轻量级关系型数据库的支持。

Webkit浏览器引擎。

FreeType位图(bitmap)及矢量图(vector)。

第二部分Android运行时环境(AndroidRuntime)提供了Java核心库(Core

Libraries)和Dalvik虚拟机(DalvikVirtualMachine)。该Java核心库提供了Java

的核心API。

Dalvik虚拟机是通过Java实现的。Dalvik虚拟机通过将.class和.jar文件转换

为.dex文件来获取指令和数据。.dex文件使用上更加高效,这使得Dalvik虚拟

机能够在有限的存储空间和计算速度下,正常顺畅的运行。因此,Dalvik虚拟机

非常适合运行在移动终端中。

4)Linux内核层

Android系统基于Linux2.6内核,内核层提供了一些关于终端核心硬件设备

的支持,如USB、蓝牙等。内核层将设备相关的服务以接口形式提供给上层。

2.2.3Android四大组件

Android平台是为组件化而搭建的平台,在Android平台上进行应用软件的

开发,通过基于组件的重用和架构,就可以轻易的搭建和完成各式应用,主要包

括以下四种类型的组件。

1)Activity

Android中,Activity是最为常用的组件,它可以表示为一个可视化的用户界

面或一个单独的屏幕。例如一个联系人列表的Activity为用户展现的就是一个按

照列表的方式列出所有联系人基本信息的界面。每一个Activity都包含一些控件

用以实现相关的界面效果和相应的功能,如按钮(Button)、文本框(TextView)、

列表(ListView)等等。

每一个具体的Activity都是Activity(ty)的子类。各个

Activity之间可以进行数据的通信。因此,通过使用不同的控件以及设置控件的

相关事件,开发人员就能设计开发出不同界面效果、不同功能的Activity。

北京邮电大学硕士研究生学位论文

11

2)Service

Service也是Android开发较为频繁使用的组件。Service与Activity的区别在

于,首先,Service没有用户界面,它不像Activity那样能够通过各种控件、界面

元素的组合来给用户直观的展现;其次,Service运行于系统后台,而且它不能

自己运行,需要通过调用需要通过调用ervice()或

rvice()方法启动服务。

3)BroadcastReceiver

BroadcastReceiver主要用于对系统发送的广播进行接收、过滤和响应[14]。

Android系统会产生并发出一些广播用于通知相应的应用来处理一些事件,如电

池电量过低、更改语言等。

BroadcastReceiver不像Activity和Service能够去执行某些操作或业务,它处

于一种被动的状态。只有符合条件的广播发送过来时,BroadcastReceiver才会被

激活去执行一些指定的操作。

4)ContentProvider

ContentProvider提供一种应用间的数据共享访问机制。ContentProvider帮助

应用向外部提供数据访问的接口,使得应用间具有关联性,方便用户使用。

2.3DES加解密技术

对于一些企业级别的系统,如CRM系统,它们需要在互联网上传输关于公

司、客户等一些企业内部信息,这些信息如果以明文的形式传输,势必会有泄露、

被窃取的危险性[15]。因此,CRM系统需要对客户端与服务器之间交互的数据进

行加密,保障数据的安全性。

本课题的CRM系统将采用一种安全、操作简便的加解密方法。

DES(DataEncryptionStandard,数据加密算法)是一种世界标准的加密形式,

同时也是发明最早的最广泛使用的分组对称加密算法[16][17]。

DES加密算法属于分组加密算法,通过对密钥的保护提高加密算法的安全性。

DES采用混乱和扩展(即先替换后置换)的技术对数据进行加密。

针对CRM系统,由于客户端与服务器之间传递的数据属于公司内部资料,

具有私密性;同时,这些数据由于涉及到某些订单、报表的具体内容,数据量可

能会很大;再者,CRM系统客户端为移动终端,其处理能力、存储能力相对于

PC机要弱。因此,对于加解密算法,应该选择一种形式简单,易实现、计算资

源少、速度快的算法。而DES加解密算法具有上述特点,因此本课题采用DES算

法来实现系统内数据的加解密功能。

北京邮电大学硕士研究生学位论文

12

2.4Java对象序列化技术

对于网络中的通信,无论传递的是何种类型的数据,一般都会以二进制的

方式呈现。在实现CRM系统的时候,应该为客户端与服务器提供一种能够方便

进行数据封装和解析的方法,一方面,供客户端或服务器将对方发来的数据进行

解析,提取出相关重要的参数,进行相应的业务处理;另一方面,客户端与服务

器自身能将所需请求或响应的参数以一定形式封装起来,进行网络间数据的传递。

Java为网络间的数据传输的封装提供了很好的支持,即对象序列化。序列化

指的是将对象写入字节流的过程;接收到字节流,将其恢复为对象的过程,则是

反序列化。

相比于其他数据封装方法,如XML、JSON、Java对象序列化的优势在于它

的简单易用性。Java提供了进行对象序列化和反序列化的接口,只需要进行简单

的方法调用,即可实现相关操作。而Java中的对象也只需要实现Serializable接

口就可以被序列化。

2.5本章小结

本章主要阐述了CRM系统所涉及相关的技术。介绍了客户关系管理的相关概

念和理论。对Android操作系统做了简要说明,阐述了Android平台的特点,及其

体系架构、组件等相关内容。然后对CRM系统所使用到的DES加密技术做了简

要介绍。最后对CRM系统客户端与服务器之间交互数据的封装方法——Java对象

序列化进行了说明。

北京邮电大学硕士研究生学位论文

13

第三章系统需求分析

本课题主要研究与实现的是基于Android平台的CRM系统的客户端软件。该

系统主要面向长期在移动状态下工作的人群,包括企业销售人员、现场服务人员,

以及企业中高层管理人员等。系统将围绕客户关系管理理念,主要分为九个功能:

客户管理功能、联系人管理功能、销售机会管理功能、订单管理功能、产品管理

功能、线索管理功能、行动管理功能、知识库管理功能以及日程管理功能。系统

用例图如图3-1所示。

用户

客户管理

联系人管理

线索管理

销售机会管理

销售订单管理

产品管理

知识库管理

日常工作管理

行动管理

日程管理

<

<

i

n

c

l

u

d

e

>

>

<

<

i

n

c

l

u

d

e

>

>

CRM系统

图3-1CRM系统用例图

以下将针对客户管理功能、联系人管理功能、线索管理功能、销售订单管理

功能和行动管理功能进行具体详细的分析说明。

3.1功能需求分析

3.1.1客户管理功能

在本系统中,客户管理功能是最基本的功能,其余各个功能都将围绕着“客

户”这一概念展开。客户关系管理概念中所提及的“客户”并不仅仅指代消费者

或者用户,它指的是购买企业产品或服务的顾客,同时也可以泛指企业的内部员

工、合作伙伴等等。而且,“客户”这一概念也并非仅指代一个自然人,它可以

指代一个公司,一个团体等等。

北京邮电大学硕士研究生学位论文

14

客户管理功能的用例图如图3-2所示。

用户

客户管理

新增客户

编辑客户

搜索客户

查看客户

查看客户相关对象

<>

快速联系

<>

创建交易

<

<

i

n

c

l

u

d

e

>

>

<

<

i

n

c

l

u

d

e

>

>

<

<

i

n

c

l

u

d

e

>

>

<

<

i

n

c

l

u

d

e

>

>

<

<

i

n

c

l

u

d

e

>

>

CRM系统

图3-2客户管理功能用例图

由用例图可知,本功能提供与业务人员相关联的所有客户的信息。

为用户提供新增、查看、搜索、修改客户的基本功能操作,各功能都需进行

操作权限的控制。于此同时,为用户提供快速联系客户的功能,支持打电话、发

短信、发邮件等方式与客户进行及时沟通交流。

用户通过当前客户创建相应业务信息的功能,包括创建订单、创建商机、创

建行动等。通过客户功能中的某客户创建操作时,将自动带入该客户的相关信息。

客户管理功能提供与其他功能的关联接口。支持用户查看与该客户相关的所

有对象的信息,包括该客户所拥有的所有联系人、销售订单、行动信息等等。

通过客户端录入的信息均需交由服务器端保存处理,如若保存失败客户端会

给用户相应的状态提示。

由于“客户”对于CRM系统是非常重要的元素,因此,本系统在客户端中

将不提供客户的删除功能,将该功能授权于系统管理人员。

3.1.2联系人管理功能

CRM系统中,客户关怀是一个非常重要的环节,它强调企业应该与客户时

刻保持沟通,一方面,为客户在购买企业产品或服务后,提供有效及时的产品售

后服务;另一方面,企业也可以通过与客户进行主动沟通,在充分了解客户需求

的基础上,更好地挖掘潜在客户,提高销售机会。

CRM系统中的联系人为与用户直接进行沟通交流的对象。他可以属于一个

“客户”,也可以独立存在。在CRM系统中,联系人与用户手机中的通讯录联

系人不一样,CRM系统中的联系人存储于系统服务器,他们是与企业业务活动

相关的人员;而用户手机本地联系人是用户的个人数据,可能与企业客户没有任

何关系。本系统联系人管理功能的用例图如图3-3所示。

北京邮电大学硕士研究生学位论文

15

用户

联系人管理

添加联系人

编辑联系人

查询联系人

查看联系人

查看联系人相关对象

<>

快速联系

<>

删除联系人

创建行动

<

<

i

n

c

l

u

d

e

>

>

<

<

i

n

c

l

u

d

e

>

>

<

<

i

n

c

l

u

d

e

>

>

<

<

i

n

c

l

u

d

e

>

>

<

<

i

n

c

l

u

d

e

>

>

<

<

i

n

c

l

u

d

e

>

>

CRM系统

图3-3联系人管理功能用例图

如图所示,系统提供联系人的相关功能。用户可以添加联系人。在添加过程

中,用户需要录入与该联系人相关的信息,同时需要确定该联系人是否属于某个

“客户”,以及该联系人是否为该客户的主联系人。

对于已添加入CRM系统的联系人,系统允许拥有特定权限的用户对联系人

信息进行修改,同时,系统也允许用户删除某个联系人。

用户在查看联系人详细信息的同时也可以查看与联系人相关联的所有对象

的信息。相关对象信息主要包括该联系人相关的行动、线索和客户信息。同时,

系统为用户提供了该联系人在CRM系统中的关系信息,通过关系树(图片)的

方式呈现给用户。

在查看联系人详情过程中,用户也可以直接和联系人进行沟通。客户端为用

户提供了拨打手机、拨打座机、发送邮件等联系方式。

联系人管理功能允许用户通过当前查看的联系人来创建行动,在创建过程中,

自动带入当前联系人的相关信息。

用户在查看联系人的时候,可以通过输入关键字对联系人进行搜索。

3.1.3线索管理功能

线索即是业务员在工作中获取的信息片段,其来源包括招标文件、广告等;

它并没有经过验证,是需要进一步核实的销售消息。通过所获取的线索,可能会

触发商机以及相关的后续操作。线索是企业业务活动过程中的一个过渡点,在本

CRM系统中,线索的最终形态是客户或者联系人。线索管理功能的用例图如图

3-4所示。

北京邮电大学硕士研究生学位论文

16

用户

线索管理

新增线索

编辑线索

查询线索

查看线索相关对象

查看线索

<>

删除线索<

<

i

n

c

l

u

d

e

>

>

<

<

i

n

c

l

u

d

e

>

>

<<

in

cl

ud

e>

>

<

<

i

n

c

l

u

d

e

>

><

<

i

n

c

l

u

d

e

>

>

CRM系统

线索转化

<>

转化为客户

转化为联系人

<

<

i

n

c

l

u

d

e

>

>

<

<

i

n

c

l

u

d

e

>

>

图3-4线索管理功能用例图

如上图所示,线索为用户提供了线索新增功能,用户需要录入线索的相关信

息。在添加线索操作过程中,用户需要确定并输入该线索的名称以及所涉及的公

司名称,以便往后进行线索的转换操作。同时,用户还需要确定并选择该线索的

来源,来源包括:朋友介绍、网站新闻、招投标公告等等。

用户可以查看线索详情,在查看详情过程中,CRM系统允许拥有权限的用

户对线索信息进行修改,同时也允许对线索进行删除。

单独的线索对于企业而言并没有直接的价值,只有将线索进行转化后,线索

的潜在价值才能得以体现。因此,线索转化功能对于线索管理功能而言非常重要。

CRM系统为用户提供了将线索进行转化的功能,用户可以将线索转化为客户或

者联系人。该转化操作只能执行一次,即线索只能转化为客户和联系人中的一项。

在转化过程中,系统自动将线索相关内容带入相应转化对象的新增功能中。当转

化操作完成时,该线索不会被删除,仍然保存在系统中。用户可以随时查看该线

索的信息。但与之前查看线索详情不同的时,转化后的线索不允许用户进行修改

操作;而且在线索详情界面中,系统将显示与该线索相关联的客户信息和联系人

信息,用户可以通过该线索查看与之相关的客户和联系人的详细信息。

3.1.4销售订单管理功能

在本系统中,销售订单是企业与客户之间关系的最直接最具有价值的体现。

它与企业的利润直接相关,同时它也直接反映了客户的需求。系统销售订单管理

功能用例图如图3-5所示。

北京邮电大学硕士研究生学位论文

17

用户

销售订单管理

新增销售订单

编辑销售订单

查看销售订单

查询销售订单

关注销售订单

<

<

i

n

c

l

u

d

e

>

>

<

<

i

n

c

l

u

d

e

>

>

<<

in

cl

ud

e>

>

<

<

i

n

c

l

u

d

e

>

>

添加订单行

<>

<>

查看客户

查看业务员

查看订单行

查看销售机会

查看附件

<>

<>

<>

<>

<>

查看产品

<<

in

cl

ud

e>

>

CRM系统

图3-5销售订单管理功能用例图

销售订单管理功能为用户提供了与销售订单相关的一系列操作。

用户可以添加销售订单,添加过程中,用户需要录入订单相关信息。同时,

在添加过程中,用户需要选择与该订单相关的客户以及业务类型、销售部门等信

息。添加订单时,当用户为该订单选择了客户后,CRM系统就允许用户为该订

单添加订单行。订单行为订单中用户所订购的产品或服务。

用户可以查看销售订单详情。在订单详情中,用户可以对其感兴趣或者重要

的订单进行关注操作。而在订单列表中,不仅将显示与用户相关的所有订单,同

时也将显示被用户关注的订单,方便用户对特定订单的跟踪。

在订单详情功能中,用户可以查看订单相关对象的信息。用户可以查看客户

信息,订单在创建时选择了客户,因此,用户可以通过销售订单查阅相关的客户

档案。用户可以查看业务员(联系人)信息,同时客户端也为用户提供了拨打手

机、拨打座机、发邮件等方式与业务员进行沟通。用户也可以查看与订单相关的

销售机会的详细信息。用户还可以查看该订单所包含的所有订单行(产品)信息。

同时,用户可以查看每一个产品的明细。若订单包含了某些附件,用户亦可查看

附件的详细信息。

对于已添加入CRM系统的订单,系统为拥有特定权限的用户提供了订单编

辑功能,同时也允许用户对订单进行删除操作。

用户可以通过输入一至多个关键字进行销售订单的查询操作。

3.1.5行动管理功能

CRM系统的主要用户群为企业的业务人员,当业务人员将客户、线索等相

北京邮电大学硕士研究生学位论文

18

关信息录入CRM系统后,并不意味着业务人员的工作告一段落。相反,业务人

员的工作因这些信息的录入而刚刚开始。业务员需要根据这些信息,及时与客户

沟通,迅速并充分了解客户不断变更的需求,因此,业务员需要对他的行动进行

周密的计划,并进行记录;而且,当某些意外状况发生是,业务员也需要对自己

的行动进行相应的变更、调整。

总的说来,CRM系统应该为用户提供对其行动的记录功能,使用户能够随

时随地地查看自己的行程,并根据实际情况予以调整,从而保证业务人员的工作

质量与效率,维系企业与客户之间连续、和谐的关系。

CRM系统的行动管理的用例图如图3-6所示。

用户

行动管理

新增行动

上传照片

<>

查询行动

查看行动

查看行动相关对象

定位

<>

<>

<>

编辑行动

删除行动

<

n

c

l

u

d

e

>

>

<

<

i

n

c

l

u

d

e

>

>

<

clud

e>>

<

<

i

n

c

l

u

d

e

>

>

<

<

i

n

c

l

u

d

e

>

>

编辑照片

<>

系统

<>

图3-6行动管理功能用例图

CRM系统为用户提供了新增行动功能。用户通过录入行程相关信息则可添

加行程。在录入信息过程中,用户需要确定该行动的起始、结束时间,以便用户

及时的跟踪该行动。同时,系统允许用户上传当前位置信息,及时记录和更新行

动的实施地点。

CRM系统针对行动管理功能,还为用户提供了照片上传的功能,用户能够

通过手机照相机拍照或者根据手机本地的照片图片,将与行动相关的照片上传至

服务器,与行动关联,帮助用户记录并完善行动信息。

用户可以查看与其相关的所有行动信息。在查看过程中,用户可以查看与行

动相关的对象信息,包括:线索信息、客户信息、销售机会信息。

同时,在行动明细界面中,用户还可以看到该行动最近一次更新的地理位置

信息,最近一次上传的照片信息。

CRM系统还为用户提供了行动的编辑功能。用户可以对行动信息进行相应

调整修改。用户可以在此更新自己的地理位置信息,可以修改和删除所上传的照

北京邮电大学硕士研究生学位论文

19

片或者上传新的照片。

系统允许拥有特定权限的用户删除某条行动信息。

用户可以通过输入一个或多个关键字对行动进行查询。

3.1.6其他功能

CRM系统处理为用户提供上述功能外,还为用户提供了销售机会管理、产

品管理、知识库管理、日程管理功能。关于这些功能的用例图如图3-7所示。

用户

销售机会管理

产品管理

知识库管理

日常工作管理

新增销售机会编辑销售机会

查看销售机会

查看销售机会相关对象

查询销售机会

查询产品

产品查看历史

查看产品详情

<>

<>

产品相关对象

<>

查看产品基本信息

查看产品其他信息

删除销售机会

<>

创建交易

关注产品

<>

下订单

<>

查询知识库

查看知识点

行动管理

日程管理

新增日程

查看日程

编辑日程

删除日程

<

n

c

l

u

d

e

>

>

<

<

i

n

c

l

u

d

e

>

>

<

<

i

n

c

l

u

d

e

>

>

<

<

i

n

c

l

u

d

e

>

>

<

<

i

n

c

l

u

d

e

>

>

<

clud

e>>

<

<

i

n

c

l

u

d

e

>

>

<

<

i

n

c

l

u

d

e

>

>

<

<

i

n

c

l

u

d

e

>

>

<

<

i

n

c

l

u

d

e

>

>

<

<

in

c

lu

d

e

>

>

<

<

i

n

c

l

u

d

e

>

>

<

<

i

n

c

l

u

d

e

>

>

<

<

i

n

c

l

u

d

e

>

>

<

<

i

n

c

l

u

d

e

>

>

<

<

in

c

lu

d

e

>

>

<

<

i

n

c

l

u

d

e

>

>

<

<

i

n

c

l

u

d

e

>

>

<

<

i

n

c

l

u

d

e

>

>

客户管理

联系人管理

线索管理

销售订单管理

系统

图3-7其他功能用例图

3.2非功能性需求分析

CRM系统将从端到端业务处理响应时间、安全性以及易用性三个方面分别

对系统的非功能性需求进行考虑和分析。

3.2.1端到端业务处理响应时间

从用户的角度来看,操作的响应时间是衡量软件性能的指标之一,软件的性

北京邮电大学硕士研究生学位论文

20

能指的是用户操作的响应时间,此运行时间指的是从客户端发起请求到从服务器

得到响应的时间,将相关数据处理展示的过程。按其过程来划分主要分成三个部

分:呈现时间,即对接收的数据进行处理并展示给用户的过程;数据传输时间,

即发送一个请求,系统处理过后返回所需要的时间;系统处理时间,即系统得到

请求后对请求进行处理并将结果返回所消耗的时间。本系统中由于客户端与服务

器需要大量数据交换,为了用户可以顺畅的使用,并获得良好的用户体验,对于

向服务器请求的操作,运行时间限制在5秒内。

3.2.2安全性

对于CRM系统,其数据都均为企业内部数据,包括企业信息、相关客户信

息、订单信息等。因此,如果对这些数据不加处理而允许其在网络上传输,则会

导致数据被窃取的可能性增大,对企业造成不必要的损失[18]。

所以,在本系统中,对于所有在客户端与服务器之间传递的数据,都必须进

行加密处理,以提高系统的安全性。

3.2.3易用性需求

易用性一般指用户对于软件产品的理解、学习和使用的简易程度,它涉及到

用户对软件产品的易理解性、易学习性和易操作性。针对本系统易用性主要包含

以下三个方面:

1)用户对本CRM客户端软件的功能、逻辑等方面的认识的难易程度。CRM

移动客户端对于用户的提示、说明语言应该直白,逻辑清晰,同时应该尽量避免

使用专业术语。

2)用户学习使用本CRM客户端软件的难易程度。用户在使用时能够轻易地

找到所要使用的功能入口;界面应简单明了地将功能呈现出来,软件的使用手册

也应该对每一步操作进行详细清晰的说明,以方便用户使用。

3)用户对于本CRM客户端软件操作、控制的难易程度。用户在使用时应操

作简单方便,各项功能的设计应该做到直接、流畅。

CRM系统客户端应该满足以上关于易用性的相关要求,提高用户体验。

3.3本章小结

本章主要阐述了基于Android手机平台下的CRM系统的需求分析,主要包

括功能性需求和非功能需求。对CRM系统的各个功能进行了相应的说明并给出

了用例图,重点分析了笔者参与实现的功能。同时,针对CRM在性能、安全等

方面进行了非功能需求分析和说明。

北京邮电大学硕士研究生学位论文

21

第四章系统设计

本章根据需求分析对本系统及客户端进行整体结构设计、功能模块划分等设

计工作,形成软件的具体设计方案。

4.1系统架构设计

4.1.1物理结构

CRM系统建立在Internet等Web技术的基础上,具有动态性、分散性等特

点,因此,对于CRM系统的物理结构,可采用客户机/服务器(C/S)模式或者

浏览器/服务器(B/S)模式。

对于基于Android平台的CRM系统,用户希望能够及时快速的进行业务处

理,希望系统能够快速地对操作进行响应和反馈。在移动终端上,浏览器相对于

终端应用,用户体验较差,事件响应速度较低。因此CRM系统采用C/S模式进

行设计开发。如图4-1所示。

Internet

WLAN/2G/3G移动应用服务器

移动终端

企业CRM系统

图4-1某企业CRM系统组成示例

由图4-1所示,用户使用移动智能终端,可以通过无线网络从指定的网站下

载CRM系统客户端软件并安装,然后通过互联网与移动应用服务器数据交换,

进而进行业务处理。

4.1.2逻辑结构

本体系结构采用MVC模式进行设计和开发,上层不会知道底层的具体实现

细节,因此,改变上层的结构细节不会对下层造成任何影响。CRM系统客户端

结构层次结构图如图4-2所示。

1)表示层

表示层主要用于向用户展现客户端的界面信息,负责将后台传来的数据以友

好的方式显示出来;同时负责为用户提供良好的操作接口,接收用户的交互事件。

表示层为用户和系统的业务服务之间提供了一种通信机制。

在本CRM系统中,除了用Android自带的控件构建用户界面外,还需使用

特定的控件用以实现特殊数据的显示。

北京邮电大学硕士研究生学位论文

22

表示层

列表图表

业务逻辑层

用户管理客户管理线索管理联系人管理

……

销售订单管理销售机会管理产品管理行动管理

日程管理下载升级知识库管理

基础服务层

网络连接电话通信服务短信服务定位服务

照相机接口电子邮件服务

控件

……

……

数据封装数据加解密

数据压缩

数据层

SQLite数

据库

非结构化数据

图4-2客户端软件层次结构图

2)业务逻辑层

在本客户端中,业务逻辑层提供了对CRM系统业务的处理,是整个系统架

构中的核心部分,包括:客户管理、线索管理、联系人管理、销售订单管理、销

售机会管理、产品管理、行动管理、日程管理、知识库管理。这九大模块组成了

系统的主要业务逻辑。同时,该层还提供用户管理、客户端的下载更新等逻辑功

能。

业务逻辑层处于整个体系架构中的中间部分,位于表示层和基础服务层之间。

它对于基础服务层而言是调用者;对于表示层而言,是被调用者。在本客户端系

统中,业务逻辑主要通过Activity来实现。在Activity中,它一方面展现XML

定义的界面;同时它也通过调用接口来选择适当的业务处理方法进行逻辑处理,

完成业务操作;之后将结果再返回给表示层加以呈现。

3)基础服务层

与其他体系结构不同的是,本客户端在业务逻辑层和数据层之间添加了一层

——基础服务层。该层主要负责为各项业务逻辑的实现提供接口。

北京邮电大学硕士研究生学位论文

23

由于CRM系统客户端基于Android平台进行设计开发,在客户端中需要使

用到Android设备所带有的诸多功能,譬如拨号程序、短信、照相机等等。基础

服务层为上层业务逻辑层提供了调用智能终端设备的接口。业务层可以方便的调

用这些接口从而完成自己内部逻辑实现。

虽然AndroidSDK提供了已定义好的使用Android相关设备的接口,开发者

可以直接使用,但更好的方式是,在此基础上,根据CRM系统业务具体逻辑实

现,在相关接口外再封装一层,定义适合于CRM系统的接口。使开发时,接口

调用更加方便,代码的可读性也更高,维护也更方便。

4)数据层

数据层提供对数据的访问的相关操作的接口。在本系统客户端中,包括结构

化数据(SQLite数据库)和非结构化数据(文件、图片等等)。该层提供了针对

这两种类型数据的访问方式。

Android开发平台提供了一种轻量级的数据库——SQLite数据库,同时也提

供了对该数据库的相关操作的接口。另一方面,也提供了对非结构化数据的存储

访问方式,如智能手机的SD卡等等。

CRM系统的技术架构图如图4-3所示。

Android客户端软件

客户管理联系人管理线索管理

……

Java对象序列化

移动应用服务器

异步处理数据转换处理

WebService+XML

CRM应用服务器

注册登录客户线索销售机会销售订单

……

CRM数据引擎、

CRM数据服务器CRM数据仓库

销售订单管理...

图4-3CRM系统层次结构图

1)Anroid客户端软件。系统最上层通过Android开发技术为用户提供友好、

北京邮电大学硕士研究生学位论文

24

易操作的界面,通过捕获用户的操作事件,进行相应的业务请求。该层通过对象

序列化的方式进行数据的封转与解析,从而与下层在约定的数据格式下进行通信。

2)移动应用服务器。在业务处理前对请求数据进行预处理;负责对客户端

与服务器之间交互通信的数据进行相应的格式转换,一方面以供下层进行相应的

逻辑处理;另一方面,为上层提供服务器所返回的相关处理结果。

3)CRM应用服务器。该层主要负责提供各个功能模块的业务处理逻辑。

4)持久化层。提供对数据的存储和访问方法。

4.2系统主要模块设计

用户成功登陆客户端后,客户端主界面上为用户提供了客户、联系人、线索、

销售机会、销售订单、产品、知识库、行动、日程九项功能模块的入口。用户可

以选择其一进入,进行具体流程的操作。以下将针对笔者所参与设计和开发的模

块进行具体流程的说明。

4.2.1客户模块

客户模块的主要流程如图4-4所示。

显示客户

列表

添加客户

查看客户

详情

搜索客户

进入客户模块

录入客户

相关信息

显示搜索

结果

创建交易编辑客户

查看客户

相关对象

与客户主联

系人通信

输入关键

是否有权限

保存客户

是否有权限

图4-4客户模块流程图

如上图所示,当用户进入客户模块后,客户端为用户显示与其相关的客户列

表。用户可以选择添加、查看详情和搜索客户。

用户进入添加客户前,客户端需要对用户的权限进行验证,拥有相应权限的

北京邮电大学硕士研究生学位论文

25

用户方可进行添加操作。添加操作需要用户录入客户相关信息,在用户选择保存

所添加的客户后,客户端进行客户列表的更新,显示最新的客户列表。

用户进行搜索客户的操作后,需要用户输入一个或多个关键字进行搜索,客

户端会将搜索结果以列表方式显示出来。

当处于客户列表或者搜索结果列表时,用户可以选择查看客户详情,客户端

会将用户所选择的客户的详细信息展现出来,如客户名称、编号、主联系人信息

等等。当用户拥有相关权限时,用户则可以通过当前查看的客户进行交易的创建,

交易包括:销售订单、销售机会和行动;或者用户可以对客户进行编辑操作,修

改客户的详细信息;或者用户也可以查看与该客户相关的对象信息,相关对象包

括:信用状况、销售订单、销售机会、行动、联系人。以上操作均需要进行相关

权限的验证。在客户详情界面中,用户还可以与客户的主联系人进行通信。

在客户列表界面中,若用户进行返回操作,结束客户业务流程。

4.2.2联系人模块

联系人模块的主要流程如图4-5所示。

进入联系人模块

显示联系

人列表

查看联系

人详情

添加联系

搜索联系

输入关键

显示搜索

结果

输入联系

人信息

编辑联系人创建行动

与联系人

通信

查看相关

对象

是否有权限

删除联系人

保存联系

是否有权限

图4-5联系人模块流程图

由图4-5可知,当用户进入联系人模块后,客户端将向用户展现与其相关的

联系人列表。在进行添加联系人的操作时,用户需要输入联系人相关信息并确定

是否为主联系人。在用户保存该联系人后,联系人列表主动更新界面。

北京邮电大学硕士研究生学位论文

26

用户进行搜索联系人的操作时,需要输入一个或多个关键字,客户端将搜索

后的结果以列表的方式显示出来。

在联系人列表处(主界面列表、或者搜索结果列表),用户可以进行联系人

详细信息的查看操作,客户端将联系人的所有信息展现出来,包括姓名、职位、

联系方式等等。用户可以编辑当前查看的联系人信息;用户可以根据当前的联系

人创建行动信息,创建行动时将自动带入联系人信息;用户还可以查看当前联系

人的相关对象,包括:行动、线索、关系树、客户。以上操作均需要对用户的权

限进行验证。

在联系人详情处,用户可以采用多种交流方式与当前联系人进行通信,主要

包括:手机、座机和邮件等。

当用户在联系人主界面中进行返回操作时,联系人业务流程结束。

4.2.3线索模块

线索模块的主要流程如图4-6所示。

进入线索模块

查看线索

列表

添加线索

查看线索

详情

录入线索

信息

查询线索

输入关键

显示查询

结果

是否有权限否

编辑线索删除线索

是否已转化

显示客户或联

系人信息

转化为联

系人

转化为客

是否有权限

保存线索

是否有权限

图4-6线索模块流程图

如图4-6所示,当用户进入线索模块后,客户端以列表的方式将所有线索展

现出来。在线索主界面下,用户可以添加、查询和查看线索。

当用户进入添加线索操作后,用户需要输入线索信息。录入完信息后,若用

北京邮电大学硕士研究生学位论文

27

户选择保存,则客户端会显示最新的线索列表。

用户进行线索查询操作时,需要输入一个或者多个关键字,客户端会将查询

结果以列表的方式显示出来。

在线索列表(线索主界面、查询结果)处,用户可以查看所选定的线索的详

细信息。若用户拥有相关权限,则用户可以对该线索进行编辑和删除操作。当用

户进行查看线索详情操作时,除了判断用户的权限外,系统还将检测当前线索是

否已经被转化。若没有转化,客户端将为用户提供线索转化的接口,用户可以将

该线索转化为客户或者联系人;若线索已被转化,则用户可以查看线索转化后的

相关内容,客户和联系人。

当用户在联系人主界面返回时,线索业务流程结束。

4.2.4销售订单模块

销售订单流程图如图4-7所示。

进入销售订单模块

查看销售

订单列表

查看被关注的

销售订单列表

编辑关注

订单列表

删除被关

注订单

关注订单

列表更新

添加销售

订单

查看销售

订单详情

查询销售

订单

输入关键

分类查询

显示查询

结果

录入订单

信息

是否添加

订单行

添加订单

保存订单

关注/取消关

注销售订单

查看业务

编辑订单

查看订单

查看销售

机会

是否有权限

与业务员

通信

查看客户

查看附件

保存销售

订单

是否有权限

图4-7销售订单模块流程图

如图所示,用户进入销售订单模块后,客户端将通过两种方式将订单列表呈

现给用户,一种是显示所有与用户相关的销售订单;另一种则是显示当前用户所

关注了的销售订单。用户可以在这两种方式之间切换查看。

在订单关注列表界面下,用户可以编辑当前的关注列表,用户可以将订单从

北京邮电大学硕士研究生学位论文

28

关注列表中删除,但不会删除该订单本身。删除后,客户端会更新订单关注列表。

用户在销售订单主界面中,可以添加销售订单、查询销售订单、查看订单详

情。

用户进行添加订单操作时,需要输入订单的信息,若用户需要输入关于订单

的相关产品(订单行),则用户可以添加订单行并保存。在用户保存了所添加的

订单信息后,客户端更新订单列表。

用户进行查询订单操作时,CRM系统为用户提供了两种方式进行查询。一

种方式是分类查询,客户端提供了三种类别进行分类查询:日期、客户和业务员。

用户可以选择其中之一进行查询。另一种方式则是关键字查询,用户可以输入一

个或者多个关键字进行查询。用户在选择了查询方式并进行查询操作后,客户端

更新销售订单列表,将查询结果显示出来。

在订单列表界面(销售订单主界面、订单查询结果、订单关注列表)中,用

户可以选取一个销售订单查看其详细信息。在订单详情中,用户可以进行以下业

务操作:

用户可以设置是否关注或取消关注当前的订单,具体的操作结果会反映

到订单关注列表中。

用户可以查看与当前订单相关联的业务员的信息。同时,用户可以与该

业务员进行通信,通信方式包括:手机、座机和电子邮件。

用户可以查看与当前订单相关联的客户信息。

若该订单有订单行,则用户可以查看订单行的信息以及具体的产品明细。

用户可以查看与该订单相关的销售机会的信息。

若订单设有附件,用户可以查看该附件的相关信息。

在进入订单详情时,客户端会对用户的权限进行验证。拥有相关权限的用户

可以对当前订单进行编辑操作。

本客户端销售订单功能中,需要显示用户所关注的订单列表。该列表保存于

手机本地,因此,需要为订单关注列表设计方便存取的数据保存方式。

Android提供了轻量级的关系型数据库SQLite用以保存结构化数据。该数据

库高效、可靠、易使用,同时它占用的资源非常少,以此非常适合应用与移动终

端中。

在关注订单功能中,所需要保存的订单信息包括:订单id、订单编码、订单

金额、客户简称、订单日期。所建立的数据库表如表4-1所示。

表4-1关注订单数据库表

表名称crm_tb_order

北京邮电大学硕士研究生学位论文

29

字段名类型长度是否主键说明

_idint8是主键,自增

idvarchar20

订单id号,唯一标示订单,作

为向服务器请求订单详情时

的关键参数。

codevarchar50订单编号

amountvarchar20订单金额

customervarchar255订单客户简称

datevarchar16订单日期

4.2.5行动模块

行动模块流程图如图4-8所示。

如图所示,用户进入行动模块后,客户端将与用户相关的所有行动通过列表

的方式展现出来。在行动主界面下,用户可以添加行动、查询行动、查看行动详

细信息的操作。

用户执行添加行动操作前,客户端会对用户的权限进行验证,只有拥有添加

权限的用户才能进行添加行动的操作。在添加行动时,用户需要输入行动的相关

信息,同时用户还可以上传有关于行动的照片。

用户执行查询操作时,需要输入关键字,执行查询操作后,客户端会显示查

询结果。

在行动列表界面(行动主界面、查询结果界面)时,用户可以查看选中的行

动的详细信息。在行动详情界面中,用户可以编辑行动信息、可以删除或上传照

片;可以删除行动;可以查看照片;可以定位,更新地理位置信息;可以查看相

关对象,包括:线索、销售机会和客户。

北京邮电大学硕士研究生学位论文

30

进入行动模块

查看行动

列表

是否有相应权限

查看行动

详情

查询行动

输入关键

显示查询

结果

添加行动

录入行动

信息

编辑行动删除行动

定位

查看照片上传照片

编辑照片

查看相关

对象

保存行动

图4-8行动模块流程图

4.3客户端结构设计

本课题在对客户端设计过程中,将针对面向企业的Android应用软件设计具

有一定复用性的共用界面以及底层功能。

当前,针对企业移动应用软件的开发,开发人员通常都要重头开始进行,针

对应用软件的各个功能模块逐个开发,这种开发方式,既需要开发使用Android

基本API所能实现的功能,也需要开发涉及企业业务方面的功能。这样就使得

应用开发的成本过高、时间耗费大、开发效率和代码复用率低。

另一方面,对于诸多企业移动应用软件,其相似的地方比较多。这些相似之

处,不光体现在某些功能上,也体现在一些界面设计上。因此,设计并开发具有

一定复用性的共用界面以及底层功能,能够有效地减少开发成本、提高开发效率

和代码复用率,同时,也便于应用软件后期的维护。

针对各个企业移动应用软件,其具有的共同之处有:

1)数据封装。

对于企业应用,客户端与服务器交互的数据需要一种统一的数据格式,方便

服务器提取参数进行业务逻辑处理。因此,底层功能中应该包含一种针对交互数

据的封装和解封装方法。同时,由于移动终端处理能力相对于PC机要低,因此

这种数据封装和解封装方法应该要尽可能的高效、资源消耗低,能够方便开发人

北京邮电大学硕士研究生学位论文

31

员调用同时也能较好地适应移动终端设备的硬件环境。

2)保密性

目前绝大多数的企业移动应用软件其内部所涉及的数据都是与企业或客户

相关的数据,这些数据具有私密性,如果数据丢失或被窃取,则会给企业或客户

造成不小的损失。因此,对于企业应用软件,应该提供一种对数据的保护手段,

尽可能地降低数据被窃取的可能性,或者降低因数据丢失或被窃取所造成的损失。

3)减少用户流量消耗

对于移动终端,用户的流量是较为宝贵的资源。因此,移动应用应尽可能地

减少用户流量的消耗,也就是应该尽可能地减少客户端与服务器之间交互的数据

量。但是对于面向企业的移动应用软件来说,其客户端与服务器之间交互的数据

往往涉及企业一些、财务、管理、报表之类的数据,其数据量通常较大,因此导

致从数据内容上实现数据量的限制是不现实的。所以,对于企业移动应用,应该

提供一种方法对客户端与服务器之间交互的数据进行压缩,从而一定程度上减少

网络流量。

4)与服务器的数据通信

当前的企业管理系统,其大部分的数据以及相应的业务逻辑处理都集中在企

业内部的服务器中,而客户端基本上只起到发起请求,接收响应,显示处理结果

等功能。因此,绝大多数企业移动应用软件都需要与服务器进行通信交互。所以,

客户端应该提供一种针对与服务器进行交互的方式。

基于以上共性,本文所提出的企业移动应用软件结构图如图4-9所示,客户

端结构分为四层,表示层、业务逻辑层、数据封装层和通信层。

1)表示层

在表示层中,为开发人员提供了诸多可复用的组件;同时,这些组件也随着

项目不断增多和改善。这些组件,可以通过xml的方式进行描述和设计,而更好

的方式则是在xml描述的基础上,将xml文件转换为Java对象,提供针对该控

件的相关操作和方法,方便开发人员调用。

2)业务逻辑层

在业务逻辑层,每一个功能模块视为一个Module。将为客户端结构中的

Module提供一个具有通用性的父类——BaActivity。该类继承Android中的

Activity,为Module的实现提供了相关对象和方法,包括监听器Listener、Handler

等。各个Module将基于该父类进行各自业务逻辑的实现。

在业务逻辑层接收到表示层的数据后,将提取出相关参数,交由相关模块进

行业务数据处理,将得到的数据封装、加密等以完成对数据格式的转换,最后调

用通信接口实现向服务器发出请求。另一方面,当业务逻辑层获取到服务器所返

北京邮电大学硕士研究生学位论文

32

回的且经过数据解封装等处理后的请求结果时,会通过一定方式(如Handler、

Listener等)通知UI进行更新,将结果展现给客户。

可复用UI组件1可复用UI组件2

……

ListenerHandler

BaActivity

……

Java对象序列化Java对象反序列化

DES加密DES解密

GZip压缩GZip解压缩

通信模块

图4-9企业移动应用客户端结构图

3)数据封装层

数据封装层提供了对数据的相关加工操作,从各个业务模块获得的数据在发

送给服务器之间,要先经过序列化的过程,来将对象转换为字节序列,然后将其

进行DES加密以及Gzip压缩操作,另一方面,从服务器获取数据要经过解压缩、

DES解密以及反序列的过程将字节转换为相应业务模块的JAVA对象,进而解析

后的数据才可以成为各个业务模块处理的源数据。

4)通信层

通信层主要负责客户端与服务器的数据通信,为数据封装层提供了统一的接

口以供调用。根据CRM系统传输数据的特性,将经过数据封装后得到的字节流

封装成http数据包使用httppost的方式进行数据的传输,将传输方法封装成接口

的形式,供上层开发人员使用。

针对本系统客户端进行具体的结构设计,客户端结构图如图4-10所示。

北京邮电大学硕士研究生学位论文

33

……

Modules

客户端

Camera

SMS/

MMS

Wi-fi

/GRPS

Telephony

Email

DAO

SQLite数

据库

通信模

服务器

主界面

UI框架

Layout

Views

……

监听器

OnVOR

equeste

dListen

er

客户

BaActivity

线索

BaActivity

销售机会

BaActivity

销售订单

BaActivity

OnNetw

orkStat

usChec

kedList

ener

……

数据封

装/解

析模块

图4-10CRM系统客户端结构图

本系统客户端结构架构中UI层主要基于系统中可复用UI组件以及Android

自带控件,各个功能模块在BaActivity的基础上负责各自业务逻辑处理,同时

根据业务需要,调用移动终端通话应用(Telephony)、短/彩信(SMS/MMS)、无

线网络(WI-FI/GPRS)等相应设备接口,实现相关功能。将各个功能模块的数

据交由数据封装解析以及通信模块进行处理,完成与服务的数据交互。

4.5本章小结

本章主要说明了CRM系统客户端的设计,阐述了系统的物理结构和逻辑结

构,并通过流程图说明了客户端主要功能模块的具体流程,并且对客户端结构设

计做了详细说明。

北京邮电大学硕士研究生学位论文

34

第五章CRM系统客户端的实现

本章针对CRM系统客户端,基于软件设计工作与成果,阐述了客户端界面

元素、底层功能以及客户端中主要功能模块的具体实现方式。

5.1客户端界面元素以及底层功能的实现

5.1.1共用组件的实现

共用组件的实现基于Android上界面的设计开发。本节以客户端中列表样式

的控件为例来说明共用组件的实现方式。

在CRM系统中,较多模块都使用到了列表样式的布局。因此,客户端将该

样式实现为共用组件,以方便调用。共用组件创建流程图如图5-1所示。

首先需要对自定义控件所存放的界面进行相应设置并初始化。然后创建自定

义控件并初始化,为其添加文字、图片等具体内容,并设置控件点击事件处理(可

选)。完成对自定义控件的设置后,将其添加到指定控件中。可以添加多个自定

义控件。在完成对所有自定义控件的添加后,将整个控件添加到界面中加以显示。

开始

声明并初始化

相关对象

GroupLayout

groupLayout;

Listviews

创建一个自定

义控件item

ListItemSingleLine;

CommonExpandable

ListItemView;……

设置item中的

内容

将item添加到

views中

是否添加完

item

将views添加进

GroupLayout中并

为其设置标题

为item设置点

击事件

GroupLayout

添加进界面中

结束

图5-1共用组件创建流程图

本节以列表样式的控件为例对共用组件的实现进行说明,该列表样式控件需

要设置列表界面及其标题,同时需要设置列表项的界面。列表控件效果图如图

北京邮电大学硕士研究生学位论文

35

5-2所示。

图5-2列表样式共用组件示意图

1)定义两个布局文件:

a)列表内部每个item:layout_list_item_single_。该布局应尽可

能全面地囊括item中的内容;示意图如图5-3所示。

左侧图片左侧文字

中间文字

(主)

中间图片右侧文字右侧图片

图5-3列表item结构图

b)整个列表界面layout:layout_,容纳item的容器。

针对以上两个布局文件,在工程中建立两个控件类,用以与上述两个控件相

关联。而开发人员在需要使用控件时,直接使用这两个类创建的对象即可。

2)创建并设置列表项:ListItemSingleLine

layout_list_item_single_的实现类,继承Layout。

在ListItemSingleLine中,申明item中所定义的控件,包括:

a)ImageViewleftImageView,rightImageView,middleImageView;item中

左侧、右侧和中间的图片;

b)TextViewleftTextView,rightMainTextView,right2TextView;item中左

侧、中间和右侧的文字。

定义ListItemSingleLine类中的构造函数,通过调用findViewById方法将以

上申明的对象与xml中定义的控件相关联。

ListItemSingleLine类提供对点击事件的支持。由于item继承于LinearLayout,

则其可以直接调用tOnClickListener方法实现点击事件的处理。

3)设置列表项点击时界面的变化

当用户点击某item时,该item的背景会发生变化。这种依据用户点击事件

而更改背景的方式是Android开发过程中较为常用的界面处理方法。针对列表控

件中item的不同样式,需要根据所点击的item位于列表中的位置来决定item的

北京邮电大学硕士研究生学位论文

36

背景变化方式。

item的不同样式如图5-4所示。

图5-4item不同显示方式

item依据它在GroupLayout中的位置决定使用何种布局,四种布局及其位置

关系如表5-1所示。

表5-1四种布局及其所处位置

样式所处位置对应的布局文件

顶部圆角矩形

GroupLayout具有多个item,该

item位于第一个。

corner_list_first_

尖角矩形

GroupLayout具有多个item,该

item既非第一个也非最后一

个,位于中间位置。

corner_list_normal_

底部圆角矩形

GroupLayout具有多个item,该

item位于最后一个。

corner_list_last_

圆角矩形

GroupLayout只有该item一个

元素。

corner_list_single_

对于上述四种item背景布局,需要定义该控件未被点击和被点击时两种状

态下的背景。如对于样式1,其两种背景为:list_item_bg_(未点击时)、

list_item_bg_first_(点击时);在corner_list_first_中对这两种

的背景采用Android提供的背景选择器(lector)加以实现。Selector通过对事

件的判断(未点击、点击、获取焦点等)定义各个事件下的背景。当状态为“点

击”(state_enabled)时,将背景更换为list_item_bg_first_,非点击状

态则为list_item_bg_。

4)创建并设置列表界面GroupLayout

GroupLayout是layout_的实现类,继承Layout。

在GroupLayout中申明列表layout中定义的控件,包括:

1

2

3

4

北京邮电大学硕士研究生学位论文

37

TextViewgroupTitleTextView:列表标题;

LinearLayoutgroupContentLayout:用于存放列表项item。

同样通过调用findViewById方法将以上申明的对象与xml中定义的控件相关

联。GroupLayout还提供以下相关设置方法,如表5-2所示。

表5-2列表样式控件提供的方法

方法说明

tGroupContent(Listitems)

设置列表内容,将列表项item添加进

列表中。

tGroupTitle(Stringtitle)

设置列表标题,若不输入值,则隐藏

标题。

5.1.2通用父类——BaActivity的实现

BaActivity为Module的具体实现提供相关通用方法,包括向服务器的请求

方法、相关监听器、以及通过Handler实现对状态监听结果的相关操作。

BaActivity类图如图5-5所示。

图5-5BaActivity类图

1)向服务器的请求

BaActivity将提供一个方法来实现发起请求的操作,该方法封装了向服务

器发起请求的具体实现细节,其子类可以直接调用该方法实现发送请求。方法名

为:requestVO,所需要传入的参数为:

Stringurl:服务器地址

WAComponentInstancesVOmWAComponentInstancesVO:请求参数封

装对象,将在下一节详细说明

OnVORequestedListenerlistener:监听器,用以监听请求状态

在requestVO方法中,将启动一个线程(Thread)。该线程主要负责请求发

送和接收响应的工作,并在获得服务器响应后,通知相应模块进行处理。请求方

法为:requestVOFromServer(url,mWAComponentInstancesVO,headerList);

客户端与服务器进行一次通信的流程图如图5-6所示。

在调用requestVO方法后,客户端将等待服务器的响应。在获取到服务器返

回的voHttpRespon后,建立一个消息对象(Messagemsg)并将voHttpRespon

北京邮电大学硕士研究生学位论文

38

添加进该消息对象中;若服务器因某些原因处理失败,则将失败状态及其相关提

示说明添加到消息对象中。该消息对象通过Handler机制传递给相应的监听器,

监听器根据消息以及voHttpRespon的响应状态进行相应的处理。

开始

生成并封装请

求参数

服务器地

址,请求

参数对象

调用requestVO

发送请求

监听服务器响

获取服务器响

VOHttpR

espon

将服务器返回的相

应数据封装进消息

对象中

Message

Handler根据消息及

服务器响应状态,

进行相应的处理

结束

处理是否成

将处理失败的状态及

其相应的提示说明封

装进Message对象中

图5-6客户请求服务器参数流程图

2)监听事件的通知

客户端启动了一个子线程进行服务器请求的操作。但由于Android平台中只

允许主线程对UI进行操作和更新,所以当服务器返回处理结果时,子线程获取

到结果但却无法更新UI。因此,需要一种消息机制来实现界面的更新操作。

Android提供了一个非常方便且强大的消息处理机制——Handler。该消息机

制由消息循环、消息发送和消息处理三个部分组成。

a)消息循环

消息处理机制中,消息存放与消息队列中,应用程序在运行过程中,将针对

该消息队列建立一个循环。如果队列中有消息,主线程会将消息去除并通知相应

的Handler处理;若队列中没有消息,则主线程会进入等待状态,直到下一条消

息的到来。

b)消息发送

Android中主要通过Handler来实现消息的发送。在发送消息之前,需要定

义消息。消息类为Message。申明Message对象(msg)后,可以为其设置标志

和参数,主要包括消息类型()和消息内容()。

BaActivity中所定义的消息类型如表5-3所示。

北京邮电大学硕士研究生学位论文

39

对于服务器返回的VOHttpRespon对象,可以通过进行封装。

在设置完消息内容后,直接调用Handler中的ndMessage(Messagemsg)将

消息发送至消息列表中。

表5-3Handler消息类型

消息类型说明

REQUEST_SUC请求成功。

REQUEST_FAIL请求失败。

REQUEST_FAIL_NOTWASERVER服务器地址错误。

REQUEST_FAIL_SESSIONTIMEOUT处理超时。

BASE_ACTION_TOAST进行Toast消息提示。

c)消息处理

在申明Handler对象时,需要实现对消息的处理方法。实现方式为重写

Handler中的handleMessage(Messagemsg)方法。在该方法中,通过属

性实现不同消息区分,并针对各个消息实现其具体处理方式。

3)监听器接口

BaActivity中,申明了针对请求状态和网络状态的监听器接口,以供其子

类实现。监听器接口类图如图5-7所示。

+onNetworkStatusAvilable()

<>

OnNetworkStatusCheckedListener

+onVORequested(invo:VOHttpRespon)

+onVORequestFailed(invo:VOHttpRespon)

<>

OnVORequestedListener

图5-7监听器接口类图

请求状态监听器接口(OnVORequestedListener)中主要包含两个方法:请

求成功和请求失败。网络状态监听器接口(OnNetWorkStatusCheckedListener)包

含一个方法:网络可用状态。

在Module中,要实现对请求状态和网络状态的监听,可让Module类直接

实现上述两个接口并实现接口中各个方法的内部逻辑。

BaActivity使用Java多态的概念,在BaActivity中为监听器接口创建对

象,并在Handler进行事件处理时,通过对象调用相应的方法进行处理。该方法

写在BaActivity中,其子类在触发Handler事件后,会自动调用子类中所定义

的监听器中的具体方法进行相应的处理。

4)其他工具方法

BaActivity中还提供了一些工具方法以供调用,方法及其相关说明如表5-4

所示。

北京邮电大学硕士研究生学位论文

40

表5-4BaActivity其他方法说明

方法说明

readPreference(Stringkey)

SharedPreferences工具方法,用来读取默认

Preferences文件中所指定key的对应值。

readPreference(String

xmlname,Stringkey)

SharedPreferences工具方法,用来读取指定

Preferences文件中所指定key的对应值。

writePreference(Stringkey,String

value)

SharedPreferences工具方法,用来向默认

Preferences文件中写入一个键值对。

writePreference(Stringxmlname,

Stringkey,Stringvalue)

SharedPreferences工具方法,用来向指定的

Preferences文件中写入一个键值对。

toastMsg(StringmsgText)

Toast信息工具方法,用于通过Toast方式显

示所指定的信息。通过使用Handler消息机

制,将信息传给Handler进行显示。

5.1.3模块创建和初始化

本系统客户端以模块为单位进行功能的设计和开发,应该为各个模块提供方

便的开发模式。

Module相关类图如图5-8所示。

+onBoard(inv:GridItemView,invo:WAComponentInstancesVO)

-mainClazz:Class

-moduleName:String

-title:String

-iconId:int

Module

+loadModules(inmoduleList:List)

Modules

+onCreate()

+onTerminate()

+moduleList:List

+IS_DEBUG:bool

App

Application

-gridView:GridView

MainBoardActivityGridAdapter

图5-8Module相关类图

1)App:继承自Application类,主要用于保存整个应用程序的全局变量及

进行应用程序的初始化相关工作。

2)Module:CRM系统中每一个特定业务为一个Module。

3)Modules:Module的集合。

4)MainBoardActivity:应用程序可复用的主界面Activity。

5)GridAdapter:Adapter类,实现主界面数据与界面的连接。

Module类的相关属性及其说明如表5-5所示。

北京邮电大学硕士研究生学位论文

41

表5-5Module主要属性

属性名属性类型说明

mainClazzClass模块主Activity的类,该类为该模块的首页。

moduleNameString模块名,用以唯一识别模块

titleString模块标题,主要用于在九宫格主界面上的显示

iconIdint

模块图片素材id。模块图片素材存储于项目工程

/res/drawable/目录下,在项目中各个素材对应一

个id号。模块素材id用于九宫格主界面中模块

图标的显示。

模块创建及加载流程如图5-9所示。

开始

创建特定业务

的Module类

xxModule

在Modules类中

创建该Module

的对象

设置Module对

象的属性值

mainClazz、

moduleName、

Title、iconId

将Module对象

添加到Module

列表中

List

moduleList

App调用

loadModules方

法加载Module

主界面获取

moduleList并

加载

以九宫格方式

显示功能模块

入口

结束

图5-9模块创建加载流程图

在创建一个模块的时候,需要创建其特有的Module类。该模块的Module

类继承Module基类。

底层功能提供Modules类,用于加载所要实现的模块。Modules类创建一个

List列表,用于保存所有的模块。方法为:loadModules(List

moduleList)。

各个Module的创建和添加必须在程序启动开始时进行,即在应用入口处执

行模块的设置操作。Android应用程序的入口并非MainActivity,而是Application。

Application类是Android开发平台提供给开发者用于保存全局变量的基本类,

它随着package创建而创建,因此Application中相关操作的执行先于应用的Main

Activity。

本系统设计并实现了继承自Application类的App类。App类所负责的任务

就是对应用中所有模块的加载以及相关全局变量的设置。

北京邮电大学硕士研究生学位论文

42

在App类的onCreate方法中,执行模块的加载工作,调用Modules提供的

接口即可:dules(moduleList)。

本客户端提供企业移动应用的通用主界面。该主界面以九宫格的方式将客户

端各个功能模块的入口呈现出来。主界面类为MainBoardActivity。该类使用

Android提供的GridView控件实现九宫格界面。通过将App类的moduleList中

所有的模块添加进GridView中,使客户端主界面显示所有模块的入口。

5.1.4数据封装的实现

1)对象序列化与反序列化

a)序列化对象

在CRM系统中,将客户端与服务器之间通信的数据封装为对象,以序列化

的形式实现对象的传输。所支持的序列化对象类为WAComponentInstanceVO。

WAComponentInstanceVO对象用户描述一个对服务器的请求,它封装了该

请求的模块、具体请求的动作、以及请求的相关参数。WAComponentInstanceVO

的主要属性如表5-6所示。

表5-6WAComponentInstanceVO主要属性

属性名类型说明

m_actionsActions

请求的行动,它与组件(模块)编号一同区

分每一个请求。请求行为描述了该请求所要

完成的任务。

m_componentidString

组件id号,与行为共同区分每一个请求。

组件id号指代该请求数据哪一个功能模块,

或者哪一个单独的组件。

m_componentNameString组件名称

m_componentVersionString

组件版本,该版本需要与服务器方的相应组

件的版本一致。

在WAComponentInstanceVO确定参数之前,需要首先确定此次请求所要执

行的操作,因此,需要对请求行动进行描述。本系统客户端提供了Actions类用

以描述请求的行动。

Actions中最为重要的方法就是iontype(Stringm_actiontype)。该

方法定义了一个行动的具体类型。每一个功能请求都具有其请求行动的类型。服

务器在获取客户端发送来的请求后,会解析出该行动类型并进行查询。在找到匹

配的行动后,服务器会进行该行动对应的业务操作。行动有可能包含多个,因此,

需要使用一个列表用以保存多个行动。当确定请求行动后,

WAComponentInstanceVO调用tActions(Actionsactions)方法将行动添加到VO

对象中。

北京邮电大学硕士研究生学位论文

43

确定行动后,VO对象需要确定相应的组件,确定该请求行为属于哪一个组

件。WAComponentInstanceVO对象通过调用tComponentid(String

m_componentid)方法将组件id添加进VO中作为请求的其中一个参数。

请求中另一个重要的元素即为请求的参数。本系统提供了对参数的描述类。

ParamTagVO类通过键值对的方式描述一个参数。ParamTagVO类调用其构造函

数,将参数名和参数值作为键值对传入并保存。由于ParamTagVO对象只用于描

述单个参数。而对于一次请求,可能需要传入多个参数。以此,就需要使用

ParamTagVO数列进行多个参数的定义(ArrayListparams)。

定义好所有的请求参数后,ReqParamsVO类的实例添加该参数数列,然后

Action对象会将该ReqParamsVO对象添加进来。

一次请求的生成的参数流示意图如图5-10所示。

WAComp

onentInst

anceVO

Compo

nentId

ParamT

agVo

ParamT

agVo

ArrayList

ramTagVo>

ReqPar

amsVO

Action

……

Action

type

ArrayList

Actions

ArrayList

AComponent

InstanceVO>

WAComp

onentInst

anceVO

……

WAComponen

tInstancesVO

WAComponentInstanceVO

图5-10请求生成参数流程图

由上图可以看出,最后在完成了多个VO的创建后,生成

WAComponentInstancesVO对象。该对象则是用于请求的参数。

b)序列化与反序列化流程

序列化流程图如图5-11所示。

在将实现序列化接口的对象传入序列化方法中后,将针对该对象封装两层输

出流,依次为:ByteArrayOutputStream和ObjectOutputStream。之后调用

writeObject方法将对象写入指定的输出流中,在将其转换为字节数组,完成序列

化。反序列化流程图如图5-12所示。

北京邮电大学硕士研究生学位论文

44

开始

对象实现序列

化接口

Serializable

Object

传入对象

创建

ByteArrayOutput

Stream输出流

将baos封装到

ObjectOutputS

tream输出流

将指定的对象写入

ObjectOutputStre

am中

关闭输出流

将输出内容转

化为字节数组

格式

byte[]

结束

ByteArrayO

utputStream

baos

ObjectOut

putStream

oos

图5-11对象序列化流程图

开始

传入数据byte[]

将数据封装到

ByteArrayInputStre

am输入流中

将bais封转到

ObjectInputStrea

m输入流中

ByteArrayIn

putStream

bais

ObjectInp

utStream

ois

从流中读取对

Object

result

关闭输入流

结束

图5-12反序列化流程图

对于传入反序列化方法的字节流数据,使用输入流ByteArrayInputStream和

ObjectInputStream对其进行封装,然后通过调用readObject方法,从输入流中读

取对象并保存,完成反序列化操作。

2)DES加解密

本系统中涉及有关企业客户,线索以及订单等敏感信息,因此有必要对数据

的传输进行加密。本系统采用DES加密算法。对于DES加解密,Java提供了良

好封装的接口以供调用。在执行加解密操作之前,需要进行相应的准备工作,如

设置工作模式、填充模式、初始化向量,获取密钥等等。DES一共有电子密码

本模式(ECB)、加密分组链接模式(CBC)、加密反馈模式(CFB)和输出反馈

模式(OFB)四种模式,不同平台下,有关DES加密的默认初始化工作模式是

北京邮电大学硕士研究生学位论文

45

不同的,因此,实现时为了和服务器端加解密保持对应一致,应逐个进行设置,

出于对加解密的效率以及抗攻击等因素考虑,本系统采用加密块链模式CBC模

式。CBC模式示意图如图5-13所示。

明文区块1明文区块i-1……明文区块i……明文区块n

+IV

加密

+

密文区块i-1密文区块1……

加密……

密文区块i密文区块n……

密文区块i=明文区块i⊕加密(明文区块i-1)

图5-13CBC工作模式图

CRM系统客户端对数据的加密流程如图5-14所示。

开始

创建一个用于生

成密钥的

DESKeySpec对象

获取初始向

DESKeySp

eckeySpec

Algorithm

Parameter

Speciv

创建一个密

钥工厂

SecretKeyF

actory

keyFactory

通过密钥工厂,

使用keySpec对

象生成密钥

Keykey

创建Cipher

对象,设置

其工作模式

使用密钥和初

始向量对cipher

进行初始化

Cipher

cipher

执行加密操

是否需要

ba64编码

对密文进行

ba64编码

生成密文

结束

byte[]

输入明文byte[]

图5-14数据加密流程图

在执行加密操作之前,需要进行相应的准备工作。

DES加密中,密钥是加解密的关键所在,它作为一个输入参数,在加解密

过程中充当操作执行的“钥匙”。通过DESKeySpec(DES_es("UTF-8"))

北京邮电大学硕士研究生学位论文

46

方法对密钥参数进行设置。然后创建一个密钥工厂对象(SecretKeyFactory)。通

过调用generateSecret(keySpec)方法获取密钥。然后通过调用

(T_MODE,key,iv)方法进行初始化工作,最后通过

l(data)进行加密操作。再完成加密操作后需要确定是否进行ba64

编码。如需要,则对数据再进行ba64编码最终生成密文。

对数据的解密操作流程如图5-15所示。

开始

输入密文

加解密准备

工作

使用密钥和初

始向量对cipher

进行初始化

对密文进行

ba64编码

是否需要

ba64编码

执行解密操

生成明文

结束

byte[]

byte[]

图5-15数据解密流程图

解密操作前同样需要进行准备工作,然后确认是否需要进行ba64编码,

若需要则对数据进行ba64编码。之后同样调用doFinal方法执行解密操作。最

终将解密后的明文以字节数组方式保存。

本客户端的底层功能提供DES加密的工具类,DESEncrypt。该类提供两个

工具方法,即加密方法encode和解密方法decode。

3)GZip压缩解压缩

由于手机端带宽有限,未经压缩的数据在传输过程中耗费时间,而且还将占

用有限的网络带宽,带来较差的用户体验。本系统采用Gzip压缩技术解决上述

问题。对传输的数据进一步进行压缩处理,不但可以提高数据的安全性,同时也

减少占用网络带宽,从而提高数据的机密性和数据的传输效率。

Java提供了良好定义的接口支持GZip压缩和解压缩。为方便开发人员使用,

将向上层直接提供压缩和解压缩的工具类及其相应方法,不需要进行对象的创建,

直接使用压缩或解压缩方法即可完成相关功能。

压缩使用Java提供的GZIPOutputStream类及其write方法实现。解压缩使

用Java提供的GZIPInputStream类及其read方法实现。

本客户端提供的压缩和解压缩方法相关说明如表5-7所示。

北京邮电大学硕士研究生学位论文

47

表5-7压缩解压缩方法说明

方法名参数返回值说明

gZipbyte[]databyte[]

压缩方法,传入压缩前源数据(字节数

组),返回压缩后数据(字节数组)。调

用方式:

(data);

unGZipbyte[]databyte[]

解压缩方法,传入压缩后的数据(字节

数组),返回解压缩后的源数据(字节数

组)。调用方式:

(data);

4)数据封装、解析

本客户端底层功能将数据封装和解析的具体实现对外隐藏,为上层提供封装

好的方法。同时,为方便调用,封装解析方法将直接通过工具类提供,而不需要

通过创建对象的方式进行方法调用。相关模块只需要直接通过类名调用方法即可

实现数据封装、解析功能。

数据封装方法包含对象序列化、数据加密和数据压缩方法,向用户提供一个

调用接口,具有高度的封装性。同样,数据解析方法包含对象反序列化、数据解

密和数据解压缩方法,对外提供统一的接口。

数据封装流程图如图5-16所示。

将对象输入数据封装方法后,对其进行序列化操作,生成字节流。通过相关

参数,确定对数据进行加密和压缩的顺序。同时,数据封装方法提供加密操作和

压缩操作的开关,并将开关以参数的形式提供给调用者。在完成对数据的加密和

压缩操作(或者不执行)后,数据以字节流形式被用于向服务器发送请求。

数据解析流程图如图5-17所示。

将字节流数据输入解析方法后,根据相关参数,确认解密和解压缩的顺序。

同时,根据所设置参数,确定是否进行解密操作和解压缩操作。在完成对数据的

解密和解压缩操作(或者不执行)后,对字节流数据进行对象反序列化操作,将

数据还原为对象并保存,完成对数据的解析。

北京邮电大学硕士研究生学位论文

48

开始

输入原始数

Object

进行对象序

列化操作

byte[]

是否先加

密后压缩

是否进行

加密

执行加密操

执行压缩操

是否进行

压缩

生成封装后

数据

byte[]

是否进行

压缩

执行压缩操

执行加密操

是否进行

加密

结束

否否

开始

输入原始数

byte[]

是否先解密

后解压缩

执行解密操

是否进行

解密

是否进行

解压缩

执行解压缩

操作

是否进行

解压缩

执行解压缩

操作

是否进行

解密

执行解密操

执行反序列

化操作

Object

结束

图5-16数据封装流程图图5-17数据解析流程图

数据封装和解析方法的说明如表5-8所示。

表5-8数据封装解析方法说明

方法名输入参数返回值说明

encode

obj:所封装的对象;

nisEncrypt:是否需要

加密;

ryptiontype:加解密

类型;

nisCompress:是否需

要压缩;

ocessOrderorder:对

象源byte数组的加密压缩

顺序。

byte[]

1.将所需要封装的对象转

换为字节数组;

2.提供加密、压缩的开关,

方便操作;

3.调用方式:

(obj,true,

1,true,

RYPT_FIRST);

decode

[]src:封装好的数据;

nisEncrypt:是否需要

解密;

ryptiontype:加解密

类型;

nisCompress:是否需

Object

1.将封装好的数据解析为

原始对象;

2.提供解密、解压缩的开

关,方便操作;

3.调用方式:

(src,true,1

北京邮电大学硕士研究生学位论文

49

要解压缩;

ocessOrderorder:对

象源byte数组的解密解压

顺序。

,true,

YPT_FIRST);

对于方法提供的加解密类型,可选项为:

需要ba64编码的加解密类型;

不需要ba64编码的加解密类型;

对于方法提供的加解密、压缩解压缩的顺序,可选项为:

T_FIRST:该顺序对于数据封装和鸡西是

相反的,即先加密后压缩、先解压缩后解密;

SS_FIRST:先压缩后加密、先解密后解

压缩。

5.1.5通信模块的实现

本系统客户端采用HTTP方式与服务器通信。通信模块类图如图5-18所示。

-waComponentInstancesVO:WAComponentInstancesVO

-requestHeaders:Header[]

-responHeaders:Header[]

-statusCode:int

VOHttpRespon

VOHttpHandler

-cache:VOHttpRespon

+requestVOFromServer(inurl:String,in

mWAComponentInstancesVO:WAComponentInstancesVO,

inheaderList:List

):VOHttpReson

图5-18通信模块类图

VOHttpHandler:工具类,提供了向服务器发送请求的方法

(requestVOFromServer)。

VOHttpRespon:服务器应答数据类,表示服务器返回的数据。

通信模块首先创建一个默认的HTTP客户端(DefaultHttpClient)对象,该

对象用于执行向服务器发起请求的操作。创建同时,需要为该对象设置相关参数,

如连接超时的时间等等。

本系统使用POST方式实现HTTP连接,因此,需要创建HttpPost请求对

象。该对象将负责确定服务器地址并携带相关头信息以及请求参数,实现向服务

器的请求。

1)设置服务器地址

在创建Post请求时,创建一个HttpPost对象并将服务器地址作为参数传入。

北京邮电大学硕士研究生学位论文

50

2)设置请求头信息

底层功能所提供的通信操作对外的接口将接收调用方传入的参数,其中就包

括Post请求的头信息。头信息通过Header类实现,Post请求直接调用tHeader

方法实现头信息的设置。

3)设置请求参数

请求参数在Http中以Entity(实体)的方式封装。

本系统的请求所需要的参数如表5-9所示。

表5-9请求参数

参数类型说明

mWAComponentI

nstancesVO

WAComponentInsta

ncesVO

包含请求具体业务参数的对象

isEncryptboolean请求数据是否已加密

encryptiontypeint加密方式

isCompressint请求数据是否已压缩

dpOrderDataProcessOrder

数据处理顺序,及数据加密、压缩的

顺序

在对上述参数进行设置后,通过调用数据封装方法(encode)将其序列化、

加密、压缩并转换为字节数组。通过创建ByteArrayEntity类实例将所有参数封

装起来。request对象通过调用tEntity方法将请求参数添加到请求对象中。

4)执行请求操作

在将上述参数等数据准备并设置好后,client执行execute方法向服务器发送

请求,并接受服务器的返回值。返回值通过HttpRespon类的实例接受。

5)返回参数的解析

在接收到服务器返回参数后,首先需要对返回状态进行判断。非200状态则

可以进行参数解析。

通过调用数据解析方法(decode)并结合相关参数对服务器返回的数据进行

解析。解析方法返回解析数据对象。

底层功能提供服务器响应类用以封装服务器返回来的数据以及相关头信息

和状态码。该类及其参数如表5-10所示。

表5-10服务器返回数据封装类

类名属性名属性类型说明

VOHttpR

espon

waComponentInst

ancesVO

WAComponentIn

stancesVO

反序列化的到的

WAComponentInstancesVO

requestHeadersHeader[]本次请求的头信息

responHeadersHeader[]本次请求返回结果的头信息

statusCodeint本次请求返回的Http状态码

北京邮电大学硕士研究生学位论文

51

综上所属,本客户端底层功能为上层提供良好封装的通信方法,该方法可直

接通过类名进行调用,不需要进行类实例的创建,方便使用。调用方法如下。

VOHttpResponvoHttpRespon=tVOFromServer(

url,mWAComponentInstancesVO,headerList);

5.2客户端主要模块的实现

本系统主要是为了提高销售业务员的工作效率,管理好客户资源,监控销售

过程。下面分别对客户、联系人、线索、销售订单以及行动等各模块的实现进行

阐述。

出于对企业知识产权保护的目的,本文中所有关于客户端界面的效果图均

隐去。

5.2.1客户功能模块的实现

客户模块类图如图5-19所示。

CustomerModule

+onBoard(inv:GridItemView,invo:WAComponentInstancesVO)

-mainClazz:Class

-moduleName:String

-title:String

-iconId:int

Module

CustomerMainActivity

BaActivity

CustomerDetailActivityCustomerCreditStatusActivity

-customergroup:List

-cstlistchild:List>

-cstexpListView:CommonExpandableListItemView

CommonListAdapter

CommonExpandableListItemView

BaExpandableListAdapter

-id:String

-name:String

-type:String

-data:String

-creater:String

CommonExpandableListItem

WAEXLoadListView

ExpandableListView

WADetailView

图5-19客户模块类图

a)CustomerModule:客户业务模块Module,继承Module类。

b)CustomerMainActivity:客户模块主类,继承BaActivity,用以显示

客户列表。

c)WAEXLoadListView:自定义控件,继承ExpandableListView,具有

上下滑动刷新功能的可扩展列表。

d)CommonListAdapter:Adapter类,继承BaExpandableListAdapter,

用以实现客户列表数据在界面上的显示。

e)CommonExpandableListItem:用以表示可扩展列表中的一个Item的

北京邮电大学硕士研究生学位论文

52

数据。

f)CommonExpandableListItemView:可扩展列表中Item的界面。

g)CustomerDetailActivity:继承BaActivity,用以实现客户详情界面。

h)CustomerCreditStatusActivity:继承BaActivity,用以实现客户信用

状况界面。

i)WADetailView:自定义控件,用以实现列表样式的界面布局。

1)客户列表

客户列表为客户主界面中的主要元素,客户主界面为CustomerMainActivity,

该Activity继承BaActivity基类。客户列表功能模块时序图如图5-20。

用户

UI

获取客户列表

CustomerMainActivity

getCustomerList()

VOHttpHandler

requestVOFromServer()

client:DefaultHttpClient

服务器

HttpRespon

voHttpRespon

voHttpRespon

显示客户列表

decode()

requestVO()

execute()

encode()

获取客户列表请求

图5-20客户列表功能模块时序图

用户列表使用getCustomerList()函数获取列表参数,通过VOHttpHandler类

中requestVOFromServer()方法向服务请求数据,voHttpRespon用于接收服务器

数据,在获取到服务器传回的数据后,对客户列表界面进行更新,完成刷新操作。

2)列表数据加载

客户列表控件实现数据的加载,使用Android提供的Adaptet机制。Adapter

是Android中控件与数据之间交互的“桥梁”。Adapter帮助控件定义了控件内部

子控件的界面,同时控件通过加载Adapter,使其能够将添加并加以显示。

WAEXLoadListView继承自ExpandableListView,定义继承自

BaExpandableListAdapter的类CommonListAdapter来实现WAEXLoadListView

北京邮电大学硕士研究生学位论文

53

控件的数据加载。

WAEXLoadListView中的一个重要的概念就是分组概念,即数据按照一定规

则进行分组,界面以Group指代一个组,而组内的元素则用Child表示。因此,

CommonListAdapter类中实现了针对Group和Child的界面实现和数据加载的功

能。CommonListAdapter类中重要的方法如表5-11所示。

表5-11CommonListAdapter类方法说明

方法名参数返回值说明

getGroupintgroupPositionObject

Group数据以List的方式存

储。该方法从GroupList中获

取指定位置的Group数据。

getGroupCount无int

根据GroupList内容确定

Group数量

getGroupIdintgroupPositionlong获取指定位置的Group的id

getGroupView

intgroupPosition;

booleanisExpanded;

ViewconvertView;

ViewGroupparent;

View

构建Group界面和数据的方

法。通过convertView为该

Group设置界面。通过

groupPosition获取相应的

Group数据并添加到Group内

相应的控件中。

getChild

intgroupPosition;

intchildPosition

Object

Child以List>的

方式存储数据。该方法从

ChildList中获取指定位置的

数据。

getChildrenCountintgroupPositionint

获取指定Group中的Child数

getChildId

intgroupPosition;

intchildPosition

long获取指定位置的Child的id

getChildView

intgroupPosition;

intchildPosition;

booleanisLastChild;

ViewconvertView;

ViewGroupparent

View

构建Child界面和数据的方

法。通过convertView为该

Child设置界面。通过

groupPosition和childPosition

从ChildList中提取相应的数

据添加到Child界面内的各个

控件中。

完成对CommonListAdapter的定义后,在Activity中创建该Adapter对象的

实例,对WAEXLoadListView中数据进行获取及构建成符合Adapter规定的格式。

WAEXLoadListView通过调用tAdapter方法完成与Adapter的连接,从而实现

北京邮电大学硕士研究生学位论文

54

列表界面的数据显示功能。

3)客户详情

在客户列表处,用户点击某一客户,界面将跳转至客户详情。Activity之间

的跳转使用Intent实现。因此,需要为客户列表中的每一个item设置其点击事

件。

各个item的点击事件在CommonListAdapter中通过getChildView方法进行

设置。getChildView方法中的convertView参数即为Child的界面。因此,通过

该参数,调用tOnClickListener方法为其设置点击事件监听器,并实现监听器

回调函数的具体内容。

在onClick方法中,创建Intent实例并确定所要跳转到的Activity,此处为客

户详情Activity:CustomerDetailActivity,并通过intent实例调用putExtra方法为

此次跳转添加相关参数。在完成跳转的准备工作后,调用startActivity(intent)方

法即实现了向某客户详情界面的跳转功能。

跳转至CustomerDetailActivity后,需要向服务器获取该联系人的相关详细

信息。Activity根据所传来的参数,生成并封装向服务器的请求,调用与服务器

通信的requestVO方法发起请求。在接收并解析了服务器的响应后,提取出客户

的相关信息,显示在客户详情界面中。

客户详情界面中,同样通过使用Intent,为客户提供相关对象的查看功能。

为详情界面下方相关对象按钮设置点击事件,通过设置所要跳转到的Activity,

实现相关对象界面的跳转。

客户详情中包含了相关联系人的联系人方式,用户可以直接向联系人发起通

信操作。通信方式包括:拨打座机、拨打手机、发送短信以及发送电子邮件。

客户详情提供了与当前客户相关的其他信息的查看功能,包括:信用情况、

行动、销售订单、销售机会和联系人。

5.2.2联系人模块的实现

联系人模块的类图如图5-21所示。

a)ContactModule:联系人模块Module,继承Module类。

b)ContactMainActivity:联系人列表Activity,继承BaActivity,实现

联系人列表界面。

c)WAEXLoadListView:具有上下滑动刷新功能的可扩展列表控件。

d)CommonListAdapter:Adapter类,用以实现联系人列表数据在界面

上的显示。

e)ContactDetailActivity:联系人详情类,继承BaActivity,实现联系

人详情界面。

北京邮电大学硕士研究生学位论文

55

f)WADetailView:自定义控件,实现列表样式的界面布局。

ContactModule

+onBoard(inv:GridItemView,invo:WAComponentInstancesVO)

-mainClazz:Class

-moduleName:String

-title:String

-iconId:int

Module

-cstgroup:List

-cstchild:List>

-adapter:CommonListAdapter

ContactMainActivity

-detailView:WADetailView

ContactDetailActivity

WAEXLoadListView

WADetailView

-customergroup:List

-cstlistchild:List>

-cstexpListView:CommonExpandableListItemView

CommonListAdapter

BaActivity

图5-21联系人模块类图

联系人模块主要为用户提供联系人列表的查看,联系人详情的查看以及联系

人通信的功能。

1)联系人列表

联系人主界面为ContactMainActivity,该类继承了BaActivity。联系人列

表以时间因素对联系人进行分组,包括:本周、上周、更早。在主界面联系人列

表处同样使用WAEXLoadListView实现分组效果。联系人Activity调用:

createContactGroupVOWtihRequestOfMainActivityAppend方法生成联系人列表请

求,设置请求相关参数,并返回WAComponentInstancesVO类型的请求数据。

联系人调用基类提供的requestVO方法向服务器发起请求。当客户端获取到

联系人列表数据后,通过Adapter机制,将列表数据添加到WAEXLoadListView

控件中。

2)主联系人标记

在联系人列表中,针对联系人列表item,设计并实现了具有复用性的item

界面控件。该控件名为CommonExpandableListItemView,该控件主要用于可扩

展列表(ExpandableListView)中的列表项界面。该控件结构示意图如图5-22所

示。

listIcon

upText

downText

rightDescri

ption

rightDown

Description

rightar

row

图5-22列表项控件结构图

如图所示,该控件主要包括以下几个部分:

北京邮电大学硕士研究生学位论文

56

listIcon:ImageView类型,主要用于显示该item的相关图标。

upText:TextView类型,item中的主要文字显示部分,位于上层。

downText:TextView类型,item中的主要文字显示部分,位于下层。

rightDescription:TextView类型,辅助文字说明,位于上层,一般不

显示。

rightDownDescription:TextView类型,辅助文字说明,位于下层,

一般不显示。

rightarrow:ImageView类型,主要用于显示指向右侧的“箭头”图

片,说明该item可点击。

在使用上述控件进行联系人列表项界面设置时,listIcon表示联系人图标、

upText显示联系人姓名、downText显示联系人所属公司、rightarrow显示右向箭

头,对于主联系人标识,采用rightDescription进行表示。将其背景设置为主联系

人标识图片,并将该控件设为可见。

3)联系人详情

用户点击联系人列表中的某一联系人后,客户端向服务器发起获取联系人详

情的请求,并跳转至该联系人的详细信息界面。

联系人详细信息会将联系人的姓名、是否为主联系人、各种联系方式、所属

公司以及创建时间显示出来。

用户点击联系人的联系方式即可进行快速的通信,通信方式包括:拨打座机、

拨打手机、发送短信、发送邮件等。快速通信使用Intent类,通过指定Intent的

行为,并设置相关参数,调用Android提供的电话、短信等功能模块的接口加以

实现。

联系人详情界面也提供了联系人相关对象的查看功能,包括:行动、线索、

客户。

5.2.3线索模块的实现

线索模块类图如图5-23所示。

a)ClueModule:线索模块Module,继承Module类。

b)ClueMainActivity:线索主Activity,继承BaActivity,用以实现线

索列表界面。

c)CommonListAdapter:Adapter类,用于实现线索列表数据的显示。

d)ClueDetailActivity:线索详情Activity,继承BaActivity,实现线索

详情界面。

e)WADetailView:自定义控件,用以实现列表样式的界面布局。

北京邮电大学硕士研究生学位论文

57

ClueModule

+onBoard(inv:GridItemView,invo:WAComponentInstancesVO)

-mainClazz:Class

-moduleName:String

-title:String

-iconId:int

Module

-clueListView:ExpandableListView

-cstchild:List>

-adapter:CommonListAdapter

ClueMainActivity

-detailView:WADetailView

ClueDetailActivity

WADetailView

BaActivity

-customergroup:List

-cstlistchild:List>

-cstexpListView:CommonExpandableListItemView

CommonListAdapter

图5-23线索模块类图

线索模块主界面通过列表形式显示用户的所有线索信息。

1)线索列表

线索主界面为ClueActivity,通过可扩展列表的方式将线索分组进行显示,

其依据时间因素,将线索划分为本周、上周、更早三类线索。

线索主界面通过ExpandableListView控件加以呈现。主界面中,通过

createClueListVOWtihRequestOfMainActivityAppend方法设置相关参数,生成线

索信息请求。

客户端调用requestVO方法发送请求。通过所设定的监听器,在获取服务器

返回的线索列表信息后,进行相应的数据解析;提取出列表信息,通过继承自

Ba的CommonListAdapter生成列表界面并填入数据,生成线索列表。

2)线索搜索

用户在线索列表处进行线索的搜索操作。用户点击搜索输入框,界面显示以

往搜索关键字,用户可以选择其中某个关键字进行搜索,或者用户可以输入关键

字进行搜索。若用户输入,则输入后的关键字添加入搜索关键字历史记录,在下

次搜索时显示在搜索历史记录列表中。关键字中包含“全部”关键字,即显示全

部线索。

搜索界面使用ListView控件显示线索查询历史记录。记录通过

SharedPreference保存在应用中,通过基类BaActivity提供的readPreference、

writePreference方法实现对历史记录的读取和添加。

获取保存的查询历史记录后,通过Adapter将数据添加到ListView中。当用

户点击某个历史记录后,客户端将依据所点击的关键字进行查询。

3)线索详情

用户点击了线索列表中的某一条线索后,界面将跳转至线索详情界面,并向

北京邮电大学硕士研究生学位论文

58

服务器发送请求获取线索详细信息,加以显示。

线索详情界面显示线索名称、线索来源,并提供相关联系人的通信信息以及

地址、邮编等。点击通信方式,客户端将相关参数传入并通过Intent启动Android

提供的通信功能。可以进行的快速通信包括:拨打座机、拨打手机、发送短信和

发送邮件。

线索详情下方提供了查看线索相关对象的入口,可以查看联系人、客户和行

动。

5.2.4销售订单模块的实现

销售订单模块类图如图5-24所示。

图5-24销售订单类图

a)OrderModule:订单模块Module类,继承Module类。

b)OrderListActivity:订单主界面Activity,继承BaActivity类,用于

实现订单列表界面。

c)WAEXLoadListView:自定义控件,具有上下滑动刷新功能的可扩展

列表控件。

d)OrderListViewAdapter:Adapter类,用于实现订单列表数据的显示。

e)OrderAttentionListViewAdapter:Adapter类,用于实现关注订单列表

数据的显示。

北京邮电大学硕士研究生学位论文

59

f)OPListItemViewData:表示列表项的数据。

g)OrderDetailActivity:订单详情Activity,继承BaActivity,用于显

示订单详细信息。

h)WADetailView:自定义控件,用于实现列表样式的界面布局。

i)OrderCustomerDetailActivity:订单客户信息Activity,继承

BaActivity,用于显示订单相关客户的详细信息。

j)EmployeeDetailActivity:订单业务员Activity,继承BaActivity,用

于显示与订单相关的业务员信息。

k)AttachmentListActivity:附件列表Activity,继承BaActivity,用于

显示订单相关的附件列表。

l)AttachmentActivity:附件Activity,继承BaActivity,用于显示附

件信息。

m)OrderRowActivity:订单行Activity,继承BaActivity,用于显示订

单行信息。

n)OrderRowAdapter:Adapter类,用于实现订单行数据的显示。

o)ProductDetailActivity:产品Activity,继承BaActivity,用于显示订

单行明细。

p)OrderExecuteActivity:订单执行Activity,继承BaActivity,用于显

示订单执行相关信息。

1)订单列表

订单主界面为:OrdersListActivity。该类继承自父类BaActivity。在订单列

表中,各个订单默认依时间进行分组,即拥有相同创建时间的订单为一组。同时,

客户端提供订单分类查看的功能,提供的类别包括:本周、上周、本月和全部。

在每一类中,同样采用时间分组方式进行订单列表的显示。

订单列表使用可扩展列表控件WAEXLoadListView实现。以各订单的时间作

为Group,订单基本内容作为Group下的Child。

OrdersListActivity通过调用createGetOrderListRequestVO生成订单列表请求,

需要为其设置组件id、行为、请求param等相关参数。

客户端通过调用requestVO方法将请求发送给服务器,同时建立监听器以获

取服务器的响应。通过监听器的回调函数,对服务器返回的数据进行解析。在提

取出订单列表数据后,通过OrdersListViewAdapter建立列表各项的界面并添加数

据,加以显示。

订单列表项采用CommonExpandableListItemView控件实现界面布局。该控

件内部各个子控件与订单信息的对应关系如表5-12所示。

北京邮电大学硕士研究生学位论文

60

表5-12界面元素与订单信息的对应关系

界面元素界面元素说明订单信息

listIcon图标imageView订单图标

upText上方说明文字订单编号

downText下方说明文字客户简称

rightarrow向右箭头imageView右向箭头

rightDescription上方辅助文字说明订单金额

rightDownDescription下方辅助文字说明订单日期

OrdersListViewAdapter中,通过getGroupView方法设置Group界面及其数

据。Group界面使用已定义好的界面布局文件_list_item_title,并

将Group数据添加进对应的控件中。对于Child,OrdersListViewAdapter调用

getChildView方法,根据表5-12所指出的界面控件与订单信息的对应关系,将

订单信息添加到界面中。

2)订单分类显示

订单界面中客户端提供按时间进行分类的显示方式,包括:本周、上周、本

月和全部。用户在选择了相关显示方式后,客户端将该方式作为参数向服务器发

送请求,更新订单列表。

同时,在某种时间分类方式下,客户端还提供了二级分类方式,包括:日期、

客户和业务员。界面提供三种分类方式的按钮。客户端使用groupCode参数表示

这三种分类方式,其对应的参数值分别为:日期:date;客户:customer;业务

员:salesman。

用户在点击选择了某种分类方式后,客户端会将groupCode作为参数向服务

器发送请求。在对服务器的响应数据进行解析后,订单列表将显示相应分类的订

单内容。同时,各个分类下,WAEXLoadListView控件将Group显示为当前分类

的类别。如选择了“日期”类别,列表会根据订单的日期进行分组,各组的Group

将显示该组订单的日期以及组内订单数;如选择了“客户”类别,列表会根据订

单的客户进行分组,各组的Group将显示该组订单的客户名称以及关于该客户的

订单数;“业务员”以此类推。

3)关注订单

用户可以将所查看的订单添加至订单关注列表中,方便用户查看重点关注的

订单。为实现关注订单列表,保证用户在退出应用下一次登录后人就能查看到所

关注的订单,客户端需要维护一张保存关注订单信息的数据库表。

本系统客户端使用Android提供的SQLite数据库。建立的数据库名称为:

DATABASE_NAME="crm_order_databa";

订单关注表名称为:

北京邮电大学硕士研究生学位论文

61

DATABASE_TABLE="crm_tb_order";

在订单模块中,创建工具类OrderDatabaUtil用以处理针对订单数据库的相

关操作。在该类中,创建了SQLite数据库的类及其实例:SQLiteDatabamDb。

该类提供了针对数据库的增删改查等操作。同时,创建DatabaHelper类及其实

例:DatabaHelpermDbHelper。该类继承自Android提供的数据库访问帮助类

SQLiteOpenHelper。DatabaHelper类重写了SQLiteOpenHelper中的onCreate方

法,用于根据传入的SQL语句创建数据库。

DatabaHelper提供了获取数据库对象的方法。通过调用getWritableDataba

方法,获取数据库对象并赋予SQLiteDatabamDb,用以实现其他操作。

OrderDatabaUtil类提供了针对数据库的增删改查操作。

添加操作

构造一个ContentValues对象,通过调用它提供的put方法以键值对的方式

为表中每一列添加数据。最后通过数据库对象mDb调用inrt方法将数据加入

数据库表中呢。

删除操作

删除操作较为简单,只需要根据表中唯一标识各行数据的主键,通过调用

delete方法即可删除对应的数据。

更新操作

更新操作与添加操作类似,需要使用ContentValues封装新数据。根据指定

的主键,调用update方法更新相应的数据。

查询操作

根据用户输入的查询条件,调用数据库提供的query方法即可获取所查询数

据在表中的位置,以Cursor数据类型返回,即指向该数据的指针,方便后续的

操作。

订单关注相关功能顺序图如图5-25所示:

用户在进入销售订单主界面时,客户端会向数据库进行关注订单数据的查询

和提取,将所有关注的订单显示在关注订单列表中。同时为用户提供关注订单和

所有订单切换的接口。

在关注订单列表中,用户可以点击查看某订单的详细信息,同时也可以删除

某关注的订单(不会删除该订单本身)。

在用户进入订单详情界面时,用户可以对该订单进行关注或取消关注的操作。

订单详情中,客户端在界面右上方以“五角星”图片作为订单是否被关注的标记。

用户可以点击该图片关注订单或取消关注。

北京邮电大学硕士研究生学位论文

62

UI

查看所关注的订单

OrdersListActivity

updateOrderAttentionView()

顶层包::用户

orderdb:OrderDatabaUtil

关注订单列表

显示关注订单列表

mDbHelper:DatabaHelper

mDb:SQLiteDataba

getWritableDataba()

query()

Cursor

clo()

clo()

orderdb

open()

fetchOrder(dbId)

图5-25(a)查看关注订单功能顺序图

UI

顶层包::用户

OrderDetailActivity

关注订单

关注订单操作

orderdb:OrderDatabaUtil

orderdb

mDbHelper:DatabaHelper

mDb:SQLiteDataba

getWritableDataba()

inrt()

操作成功

操作成功

clo()

clo()

open()

addOrderData(orderId)

操作成功

图5-25(b)关注订单功能顺序图

UI

顶层包::用户

OrderDetailActivity

取消关注

取消关注订单操作

orderdb:OrderDatabaUtil

open()

mDbHelper:DatabaHelper

mDb:SQLiteDataba

getWritableDataba()

orderdb

deleteOrder(orderId)

delete(orderId)

操作成功

操作成功

操作成功

clo()

clo()

图5-25(c)取消订单关注功能顺序图

北京邮电大学硕士研究生学位论文

63

在订单详情类OrderDetailActivity中,通过boolean变量isFocus来表示该订

单是否被关注。在获取订单详情时,根据服务器传回的数据,确定isFocus变量

的值。用户在点击关注按钮后,向数据库执行添加或删除操作。

4)订单详情

用户点击订单列表中的某条订单后,客户端将跳转至该订单的订单详情界面,

同时,客户端根据该订单的订单id等数据向服务器发送请求获取其详细信息,

加以显示。

订单详情界面中,主要显示订单的编号、客户简称、订单日期、金额、业务

员等订单基本信息。同时,还将该订单所涉及的相关订单行列出,并提供该订单

的销售机会的查看接口。

用户点击客户简称可以查看该客户的详细信息。点击业务员可以查看该业务

员的详细信息,在业务员详情界面中可以向该业务员发起通信,如拨打手机、发

送短信等。

点击订单行,界面将该订单的具体单据信息列出。信息内容包括存货编码、

存货名称、存货数量。

用户也可以点击查看某一条订单行的具体信息,包括存货编码、存货名称、

存货数量、金额等;同时提供该订单行的执行情况接口。订单执行情况主要显示

该订单行的已发货数量、未发货数量、已发货金额、未发货金额等数据。

5.2.5行动模块的实现

行动模块类图如图5-26所示。

ActionModule

+onBoard(inv:GridItemView,invo:WAComponentInstancesVO)

-mainClazz:Class

-moduleName:String

-title:String

-iconId:int

Module

-actionListView:WAEXLoadListView

-archAdapter:TaskSimpleAdpater

-actionSearchListData:WASearchListData

-adapter:CommonListAdapter

-actiongroup:List

-actionchild:List>

ActionMainActivity

BaActivity

-detailView:WADetailView

ActionDetailActivity

WAEXLoadListView

TaskSimpleAdpater

-maxSize:int=5

-data:String[]

WASearchListData

-customergroup:List

-cstlistchild:List>

-cstexpListView:CommonExpandableListItemView

CommonListAdapter

-id:String

-name:String

-type:String

-data:String

-creater:String

CommonExpandableListItem

CommonExpandableListItemView

WADetailView

图5-26行动模块类图

a)ActionModule:行动模块Module类,继承Module类。

b)ActionMainActivity:行动主Activity,继承BaActivity,用于实现

行动主界面行动列表界面。

北京邮电大学硕士研究生学位论文

64

c)WAEXLoadListView:自定义控件,实现上下滑动刷新功能的可扩展

列表。

d)CommonListAdapter:Adapter类,用于实现行动列表数据的显示。

e)CommonExpandableListItem:用于表示列表项数据。

f)CommonExpandableListItemView:列表项界面布局。

g)TaskSimpleAdapter:用于显示查询历史记录信息。

h)WASearchListData:用于表示查询历史记录数据。

i)ActionDetailActivity:行动详情Activity,继承BaActivity,用于显

示行动详细信息。

j)WADetailView:自定义控件,用于实现列表样式的界面布局。

1)行动列表

行动主界面为:ActionMainActivity。该类继承了BaActivity。行动依据时

间,分为三个类别,分别是:本周、上周、更早。因此,行动列表采用

WAEXLoadListView控件实现分组效果。

客户端通过调用createActionListVOWtihRequestOfMainActivityAppend方法

生成行动列表请求。

调用requestVO方法将请求参数传入,并向服务器发起请求。通过其设置的

监听器,获取到服务器的响应后,回调函数对数据进行处理,提取出行动列表。

WAEXLoadListView控件通过其Adapter:CommonListAdapter生成列表各项

的界面及其数据,并加以显示。

WAEXLoadListView列表中各个item采用CommonExpandableListItemView

控件设置界面。其界面元素与行动信息的对应关系图表5-13所示。

表5-13item界面元素与行动信息对应关系

界面元素界面元素说明行动信息

listIcon图标imageView行动item图标

upText上方说明文字行动主题

downText下方说明文字行动计划开始时间

rightarrow向右箭头imageView右侧箭头

rightDescription上方辅助文字说明行动状态

rightDownDescription下方辅助文字说明行动指派人

CommonListAdapter通过getChildView方法为行动列表项设置界面。

行动信息中,行动状态体现了行动的生命周期,行动状态主要包括:

未开始:即指派人未采取实际的行动;

进行中:行动正在进行当中,已开始而未结束;

完成:指派人完成了行动所指定的任务,该行动生命周期结束。

北京邮电大学硕士研究生学位论文

65

在获取服务器传来的行动信息中,ActionInfoVO用于标示某条行动的相关信

息。将从该类实例中获取信息并生成CommonExpandableListItem对象。通过调

用getActionstatus()方法获取行动的状态。

2)行动详情

用户点击行动列表中某条行动后,界面将跳转至该行动的详情界面,并向服

务器请求行动详细信息,加以显示。

行动详情界面中,将界面分为三个部分:

a)行动基本信息部分。

将显示行动主题、指派人、开始时间以及行动状态信息。

b)行动具体实施信息。

包括行动的计划开始时间、计划结束时间、指派人、(实际)开始时间、(实

际结束时间)、备注等信息。

c)行动相关对象入口。

提供查看线索、客户和销售机会的入口。

5.3本章小结

本章基于设计阶段的成果,对CRM系统客户端软件进行了实现。主要实现

的功能模块有客户、联系人、线索、销售订单和行动,结合相关代码对模块中的

具体功能做了详细的说明。同时,也结合各个功能的时序图、类图,说明了功能

的具体实现情况。

北京邮电大学硕士研究生学位论文

66

第六章系统测试

6.1测试环境

本系统客户端基于Android平台进行开发设计,由于Android系统自身版本

分化等原因,Android系统的开发也面临着在各种手机上的兼容问题,因此在选

择测试终端时,要充分考虑到Android系统的版本、手机的性能以及手机屏幕的

分辨率等因素。

关于系统的版本问题,由于Android程序是向上兼容,高版本中底层的变化,

低版本是支持不了的,因此本系统的开发版本为市场上最常用且最稳定的版本

Android2.2,且系统需支持分辨率:480*800、320*480、480*854、1280*800。

本客户端的测试设备如下表所示:

表6-1测试设备

手机型号操作系统版本分辨率

摩托罗拉MB525Android2.2.1480*854

HTCT528wAndroid4.0.4480*800

HTCG6Android2.3.3320*480

三星I9220Android2.3.51280*800

三星GT-S5830Android2.3.4320*480

索尼爱立信MT15iAndroid2.3.3480*852

6.2系统功能测试

功能测试就是根据功能测试用例检查产品的各项功能,来判断是否达到用

户要求。下面以用户登录及首页、客户两个模块为例,说明本客户端的功能单元

测试结果:

1)用户登录及首页功能模块测试结果,如下表6-2:

北京邮电大学硕士研究生学位论文

67

表6-2用户登录及首页测试结果

功能模块用户登录和首页

用例描述用户输入正确服务器地址及端口号,成功登录客户端,正确

显示应用首页页面

功能描述前提条件操作步骤预期结果

是否

通过

登录设置

服务器有

域名、服务

器端口为

可访问

1.启动app

2.进入设置界面,IP设

置为域名,设置正确端

口号

保存成功

登录主页

正确保存

服务器域

名、端口号

1.启动app

2.正确输入用户名、密

码项

3.点击登录

app登陆成功是

主界面显

示对象

登陆成功

1.登陆成功后进入主页

2.点击各应用

1.页面应用包

括线索、客户、

联系人、销售

机会、订单、

产品、知识库、

日程等2.进入

各应用界面

2)客户功能模块,如表6-3:

表6-3客户功能模块测试结果

功能模块客户

用例描述进入客户模块应用,对客户模块进行列表、新增、编辑等功

能操作

功能描述前提条件操作步骤预期结果

是否

通过

增加客户

进入到客户

列表界面

1.点击界面中新增

按钮

2.输入指定信息

3.点击保存

新增的客户出现

在客户列表中

编辑客户

进入到客户

列表界面

1.点击界面选择一

客户2.点击编辑,

修改客户信息

客户内容已改为

编辑的内容

客户列表

显示

客户列表有

客户数据

进入客户列表

列表界面显示名

称、客户类型、

地址、邮箱等

北京邮电大学硕士研究生学位论文

68

查看客户

相关对象

进入到客户

列表界面

点击一客户

客户相关对象显

示顺序信用状

况、行动、订单、

销售机会、联系

增加客户

相关对象

记录

后台设置联

系人、订单、

销售机会等

可增加

1.分别点击客户查

看页面相关对象

中:订单、销售机

会、行动。2.点击各

页面新增按钮

1.进入相应对象

的新增数据界面

2.带入相关客户

相关对象-

增加按钮

显示

相关对象不

允许新建操

进入相关对象界面

新增按钮在界面

中不显示

自动关联

客户

后台设置联

系人、订单、

销售机会、

可增加

1.分别点击客户查

看页面相关对象:

联系人、订单、销

售机会。2.点击页面

新增按钮。3.填入保

存信息保存。4.查看

客户或信息

添加的信息与相

关客户关联

查询客户

(模糊查

询)返回记

录超过30

进入查询页

1.在搜索栏中输入

一存在的客户名称

的汉字2.点击搜索

图标

1.返回相应的搜

索结果2.每次加

载20条线索数据

3.列表中数据按

照创建时间倒序

显示4.刷新完后

加载下一页线索

数据一共可滚动

浏览30条数据

5.移动端和CRM

端显示查询结果

一致

本系统分别从登录和首页、线索、客户、联系人、销售机会、销售订单、行

动、知识库等功能模块分别进行测试,测试的结果表明,各模块功能与期望一致,

满足测试预期。

6.3系统非功能测试

非功能性测试包括:安全性、兼容性、并发性等。其中并发测试是指不同数

目的用户执行检查点的操作,其主要的目的是预测系统投入使用后在一定用户的

压力情况下系统的响应时间,确保系统能够在高负荷下运行正常且用户体验良好。

北京邮电大学硕士研究生学位论文

69

本系统并发测试结果如表6-4所示:

表6-4(a)并发测试结果

测试登录(秒)

对象新增编

辑(客户)

(秒)

查看对象

列表(客

户)(秒)

相关对象列表(20

条客户相关对象

联系人)(秒)

对象查询20

条记录(客

户)(秒)

平均

值1

2.66377.56632.73052.98282.8206

平均

值2

2.42117.55353.66224.40252.7608

平均

值3

5.54137.71302.40504.24293.0823

平均

值4

2.36587.50222.80223.32813.3648

平均

值5

2.72497.62012.88752.98243.7024

总平

均值

3.14337.59102.89753.58773.1462

表6-4(b)并发测试结果

测试

对象查询返回20

条记录(订单)

(秒)

对象删除单条

记录(客户)

(秒)

上传照片(秒)

日程位置定

位(秒)

平均

值1

2.94996.25244.07413.0840

平均

值2

3.59044.37845.87442.8986

平均

值3

3.14944.11615.80392.9098

平均

值4

3.01443.55046.96534.6405

平均

值5

2.46824.18505.25764.5775

总平

均值

3.03454.49655.59513.6221

本系统客户端选定10人操作10部符合表6-1测试设备要求的Android智能

手机,且每台测试机均安装客户端系统apk文件,10人以不同用户身份信息登

录,同时执行并发测试点功能操作,记下每次操作的用户响应时间。测试中一共

有9并发测试点,它们分别是登陆、查看对象列表、查看相关对象列表、对象查

询等。通过对每个测试点进行5次相同操作,根据记录的每次每台设备的用户响

应时间计算出该测试点的平均耗时。

对于测试用例的结果分析过程为将其与需求中规定的时间进行对比。超出规

北京邮电大学硕士研究生学位论文

70

定耗时的时间必须小于5s,如果大于5s则并发性能不符合要求。

表6-5并发效率测试结果

功能点

平均耗时-标准值

(秒)

标准值

(秒)

平均耗时(秒)

登录慢0.0433.14

对象新增编辑(客户)慢2.5957.59

查看对象列表(客户)快-0.1032.90

相关对象列表(20条客户

相关对象联系人)

快-1.4153.59

对象查询20条记录(客户)快-1.8553.15

对象查询返回20条记录

(订单)

慢0.0333.03

对象删除单条记录(客户)慢1.5034.50

上传照片慢2.6035.60

日程位置定位慢0.6233.62

从测试用例结果表6-5分析说明中可得知,有3个测试点达到需求提供的标

准相应时间,另外登录、对象新增编辑、对象查询、对象删除单条记录、照片上

传、日程定位超出标准时间5s,但超出部分小于5s,属于可接受范围。因此,

并发效率基本满足测试预期。

6.4结果分析

主要针对本系统客户端功能及并发效率测试进行测试,结果表明,该系统相

对稳定,选择的测试用例能够满足测试用例设计上的需求,测试结果相对客观完

善,基本上完全实现了各模块功能需求,并且各模块之间运行流畅,系统满足在

一定用户的压力情况下系统的响应时间,以及数据安全性的要求,且用户体验良

好,与预期效果相符。满足了用户的相应需求。

6.5本章小结

本章主要对本系统的测试工作进行阐述,详细说明了系统的功能测试与非功

能测试中的并发测试。系统运行良好,功能完善并且在并发运行时间上也满足需

求,具备良好的用户体验,满足用户的需求。

北京邮电大学硕士研究生学位论文

71

第七章结束语

7.1论文工作总结

该系统需求主要围绕客户信息随身处理、移动销售过程跟踪、员工行为管理

等方面展开。在设计和研发过程中,本人主要的工作有:

1)客户关系管理以及Android平台操作系统进行调研,对其现状进行简要

分析和说明。提出当前CRM系统的不足,提出本系统需要解决的问题

以及优势所在。

2)对系统进行相关的需求分析,围绕客户管理、联系人管理、线索管理、

销售订单管理、行动管理等功能模块,进行详尽的分析设计。

3)根据系统的详细需求分析,实现基于客户关系管理系统的客户端软件,

实现各业务流程。

4)对系统做相应的改进工作,对共有界面元素以及底层功能进行开发设计,

使程序更加合理,可复用性增强,采用对象序列化,数据加密,数据压

缩等技术,提高通讯效率以及安全性。

5)对系统功能和并发效率进行测试,结果表明软件的实现与需求一致,并

且通过测试对系统有了一定程度的优化。

7.2问题与展望

1)实现新增编辑功能

本客户端当前为1.0版本。由于开发时间的限制,本客户端在有些功能上没

有实现新增和编辑功能,因此在2.0版本的开发中,将重点为客户端各个功能模

块添加新增和编辑功能,完善CRM系统客户端。

2)设计实现客户端开发框架

本系统设计并开发了针对企业移动CRM应用的客户端共有界面元素以及底

层功能,减少了开发工作量,也一定程度上提高了软件质量,但仍旧有局限性。

因此,今后还需要在界面、用户体验、功能上进行进一步的研究,分析对比当前

多种企业应用,设计并开发针对企业CRM移动应用开发框架。

3)超大屏终端设备的支持

本客户端当前版本针对主流移动智能手机进行了测试,测试结果良好,能很

好的支持用户的使用。但当前,智能终端朝着大屏幕的趋势发展,目前市场上也

北京邮电大学硕士研究生学位论文

72

逐渐出现了诸多以大屏幕为特点的终端设备,如三星的Note系列、平板电脑等

等。因此,本系统客户端需要针对大屏幕设备对界面进行相应的改善,提高大屏

幕下的用户体验。

北京邮电大学硕士研究生学位论文

73

参考文献

[1].:///view/.

[2].浅谈IT运维在移动终端的应用发展趋势./art/1032/

20120428/3816397_.

[3].刘瑜,王立福,张世琨.软件框架开发过程研究[J].计算机工程与应用,2004:

26-28.

[4].黄春英.客户关系管理系统的设计与实现[J].重庆理工大学学报(自然科学).

2011.11,25(11):86-91.

[5].李志刚.客户关系管理原理与应用[M].北京:电子工业出版社,2011.11.

[6].Android市场份额超七成./12/0607/05/83CG3EA3000

.

[7].杨丰盛.Android应用开发揭秘[M].北京:机械工业出版社,2010.1.

[8].Android的优势及光明前景./news/?.

[9].徐敏.Android平台多媒体通信客户端研究与实现[D].西安:西安电子科技

大学,2011.

[10].Android开发经验分享./Tech/265/.

[11].Android开发手机软件的优势与劣势./project/Android/

[12].GoogleAndroid介绍./hudon/article/details/3993211.

[13].:///view/#7.

[14].Android开发四大组件分别是什么./article

-.

[15].百度百科:加密./view/#4.

[16].张晓新,孙国岭,杨平,等.完全掌握加密解密实战超级手册[M].北京:

机械工业出版社,2010.5.

[17].沈昌祥.信息安全导论[M].北京:电子工业出版社,2009.12.

[18].安全性./view/.

北京邮电大学硕士研究生学位论文

74

致谢

时光如逝岁月飞梭,经过两年半的研究生忙碌而充实的工作和生活,我提

炼出了本次毕业设计论文主题。经过本课题设计开发项目的锤炼,本人在开发

研究和专业知识等各方面都有很大的提高。当然由于个人经验的匮乏以及知识

面的限制,难免有考虑不周全的地方,如果没有导师的督促指导和项目组同学

的支持,想要完成此次毕业设计难上加难。

在这里值此论文完稿之际,我要衷心感谢我的研究生导师xxx教授,xx老师

在本人科研工作和毕设过程中,从选题研究、设计实现以及最后的论文撰写都

给予我悉心的指导。xx老师严谨的科学研究作风和耐心教导深深的影响了我,

是我永远学习的榜样,相信在我今后的工作生活中也将发挥巨大的积极作用。

在他耐心指导下,我不仅动手能力大幅提升,还顺利完成了几个项目课题,再

次向xx老师的辛勤帮忙表示衷心感谢!

这里也要特别感谢xxx老师,在这近两年的时间里对我进行了悉心的教导和

教育,使我能够不断的学习提高。同时,感谢老师在生活、思想上给予我的帮助。

然后,我还要感谢研究生期间的所有老师,以及实验室的同门。她们为我

打下计算机科学与技术专业基础知识的同时,在项目开发过程中也给我很多支

持和鼓励。因此才会顺利完成此次毕业设计。

最后,感谢软件学院和我的母校-北京邮电大学;同时向参与审阅论文以及

毕设答辩的专家们表示感谢!

北京邮电大学硕士研究生学位论文

75

攻读学位期间发表的学术论文

[1]xxxxxxx分析与设计xxx刊物20xx年

本文发布于:2023-03-11 02:32:46,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/zhishi/a/16784731667830.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:论文范例.doc

本文 PDF 下载地址:论文范例.pdf

上一篇:雅思范文
下一篇:返回列表
标签:论文范例
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 实用文体写作网旗下知识大全大全栏目是一个全百科类宝库! 优秀范文|法律文书|专利查询|