CRM实施组新员工培训
实施组职责
è 新项目实施
– 签单项目的实施
– 当前项目:山西2期、山东2期
è 老项目维护
– 当前项目:天津2 期、集团总部一站、计费
è 积累
– 开发方法论,借鉴敏捷方法
– 应用框架
我们已有的项目
è 总部项目
– 一站(跨省电路的一站式受理业务)
– 计费(跨省电路的计费摊分出帐)
– 南方集中
è 天津大客户管理系统
è 山西大客户管理系统
è 山东重点客户管理系统
è (代码库统一存放到SVN中,项目文档及pdm等统一放在CRM配置库中,测试系统在ceshi2上)
SVN源代码库
è新的配置库的用户名为自己的拼音简写,密码相同。可以使用subclipse插件(或TortoiseSVN),地址为:
è应用框架:http://10.8.103.25/crmdev/crmframework4/trunk
è山东1期:http://10.8.103.25/crmdev/sdcrm1/trunk
è山东2期:http://10.8.103.25/crmdev/sdcrm2/trunk
è山西1期:http://10.8.103.25/crmdev/sxcrm1/trunk
è天津2期:http://10.8.103.25/crmdev/tjcrm2/trunk
è总部一站:http://10.8.103.25/crmdev/cnccrm2/trunk
è总部计费:http://10.8.103.25/crmdev/cncbill1/trunk
è山西2期:http://10.8.103.25/crmdev/sxcrm2/trunk
我们项目的外部接口
è97营业受理系统
è计费系统
– 从计费中取大客户的费用信息
è统计分析系统
– 对CRM 系统内资料进行分析
我们的软件过程
è需求调研
è需求分析及功能分解
è迭代计划
è迭代过程
– 设计、测试设计、开发、测试、代码走查
è上线
è初验
è终验
è总结报告
è (最重要的是沟通、总结,沟通是为了高效,总结是为了提高)
团队分工
è 技术经理:
– 负责小组实施与积累整体工作,负责人员安排,负责保证部门方法规范在项目中的应用和问题收集解决
è 软件经理:
– 协助项目经理,做项目的软件开发管理工作,包括业务分析、系统设计、进度安排、开发跟踪、指导组员开发,保证项目各阶段文档规范等要求
è 开发人员:
– 负责分配的任务的自动测试设计开发、详细设计与开发,维护模块的设计思路文档,提交修改说明到VSS
è 数据库管理人员:
– 数据库设计pdm、数据库结构、现场数据库环境等的统一管理和同步、部门数据库相关的工作统一管理。
应用框架(以前)
è1.0 纯jdbc访问数据库(struts+jdbc+jsp)
– (山西项目)
è2.0 hibernate2.1 、struts 、spring 、jsp
– ( 天津2 期,山东部分模块)
è3.0 hibernate3.0 、struts dispatch action
– ( 总部一站项目,总部计费项目)
框架4.0核心原理
èModal层(开发)
– BO对象(通过hibernate访问数据库)来实现
èView 层( 开发)
– Jsp+dojo 来实现,采用ajax 方式
èController (CrmActionServlet.java)
– 查询bo 对象,调用指定的方法,处理返回值
èFilter(CrmFrameworkFilter.java)
– 身份验证、事务提交、session 关闭
应用框架4.0规划
è已完成部分(主要技术:dojo0.4, hibernate3.1, jbpm3.1):
– 页面框架、风格、身份验证、事务
– 分页支持、COID模式、BaseVO、PlusVO
– 组织机构、人员、系统管理、日志记录
– 参数配置(统一编码)、附件、编号生成、cache支持
– 工作流支持(待办工作)
– 业务通知(沟通平台)、工作提醒支持、定时器任务支持
– 动态树、级连选择select、Form范本支持
– 特殊数据权限支持、快捷菜单项定制
– Util类、Excel、CSV文件支持
è以下为规划中,未完成部分:
– 流程图、数据变更信息、信息浏览统计、帮助系统、知识库
– 销售管理、项目管理、活动管理、个人喜好定制
设计开发原则
è简单设计,不断重构
– 有真正需要时才考虑可扩展性
– 每次变更或bug修改都是一个绝好的重构机会
è代码唯一
– 不允许拷贝
è质量至上
– 考虑可测试性
– 借鉴成熟设计模式
è进度可控
– 功能分解到1周内可实现
– 进度的衡量是靠可见的运行结果,而不是估计
设计模式
èCOID,统一主键:
– classID[NUMBER(4)] + objectID[NUMBER(15)]
è类继承树持续化到一张表,参考jbpm log
è减少存储过程使用,尽量采用java 实现
è关联查询,可采用:
– 创建视图,将视图映射到类,采用hibernate单表查
常用技术与工具
è 数据库设计、Oracle、sql
è Jdk1.4
è Hibernate3.1
è html、jsp、js
è Dojo
è Jbpm3.1
è ----下面是常用工具-----------
è Jdk1.4.2、tomcat5.x
è Eclipse3.2 (wtp插件、svn插件、atf插件)
è hibernate console代码生成
è Oracle9i client、pl/sql工具
è Word、excel、ppt、project (2003版)
è Mindjet mind manager 6.0
è Power designer 9.0
è UML工具,如Rose 2003、magicDraw
沟通与学习
---效率为先
---效率为先
èEmail群发
è短会议讨论(30~60分钟)
è面对面交流
è电话
è看书、看权威资料
è实践、测试
è总结、讨论交流、共享
è形成积累,放入配置库上
è 提醒:有事找辅导员或组长
日常工作方法
--- 让每件事情都更有意义
--- 让每件事情都更有意义
è任务安排
– 目的、意义清晰;工作量合理;成果要求明确
è处理
– 独立思考;借鉴以前成果。问题不清及时沟通
è反馈
– 进展情况,及完成后及时反馈;及时检查成果
è总结积累
– 将成果总结,放到VSS 上形成积累,意义更大
新框架应用举例
è后台创新BO类:LogBO.java
è建立BO方法:
– public String query(){
• LogVO log = (LogVO) HtmlUtil.getVo(CrmContexts.getRequest(), LogVO.class);
• //可以使用hibernate session: CrmContexts.getEntityManager()
• PageUtil.queryPage(log);
• return “/hollycrm/log/log_list.jsp”;
– }
è配置bean: <bean id=“log” class=“com.xx.LogBO”/>
è前台写jsp: /hollycrm/log/log_list.jsp
è在jsp中提交的url为:/hollycrm/log.bo?cmd=query
è这个分页查询日志模块就写完了,很简单吧
测试和调试
è对后台的业务逻辑方法推荐写单元测试,经过测试的代码才放心,才算完成
è打断点跟踪调试。单步执行是快速找到问题的捷径,注意将自己的开发环境配置为简单可调试的。
– Tomcat 在eclipse 中的启动配置:
• 启动main类:org.apache.catalina.startup.Bootstrap
• 程序参数:-config "C:/tomcat-5.x/conf/server.xml" start
• VM args: -Dcatalina.home="C:/tomcat-5.x" -Djava.endorsed.dirs="C:/tomcat-5.x/common/endorsed" -Dcatalina.base="C:/tomcat-5.x“
• Classpath里增加:tomcat/bin/bootstrap.jar; jdk/lib/tools.jar
对BO进行JUnit测试
è package com.hollycrm.crmframework.log2db.impl;
è import junit.framework.TestCase;
è import com.hollycrm.crmframework.CrmContexts;
è import com.hollycrm.crmframework.unittest.MockRequest;
è public class LogBOTest extends TestCase {
è private LogBO bo = (LogBO) CrmContexts.getBean("log"); //找到BO
è protected void tearDown() throws Exception {
– CrmContexts.getEntityManager().getTransaction().commit(); //提交事务。
è }
è public void testAdd() {
– MockRequest request = new MockRequest(); //模拟request
– request.setParameter("operate", "测试操作");
– request.setParameter("log", "一些日志信息");
– CrmContexts.setRequest(request); //放置request
– //测试代码:该方法会从request里取出信息,进行保存
– String ret = bo.add(); //取session时启动事务
– System.out.println(ret);
è }}
常用工具类方法
èHtmlUtil.getVo()、HtmlUtil.updateVoFromRequest()
– HttpServletRequest request = CrmContexts.getRequest();
– Session session = CrmContexts.getEntityManager();
– String flowId = CrmContexts.getRequestParam("flowId");
– MoneyVO vo = null;
– if(flowId != null && flowId.length() > 0) { //id有值,修改原记录
– vo = (MoneyVO)session.load(MoneyVO.class, Long.valueOf(flowId));
– HtmlUtil.updateVoFromRequest(request,vo);
– session.update(vo);
– } else { //id为空,新增记录
– vo = (MoneyVO) HtmlUtil.getVo(request, MoneyVO.class);
– session.save(vo);
– }
新框架web目录规划
è1、hollycrm 目录存放各项目的业务模块。各项目的模块主要放在此目录下面。其它目录由应用框架控制,各项目不要修改
è2、framework 目录存放应用框架中的各模块使用的jsp代码
è3、public 公用的jsp,需要嵌入到各模块的页面中,比如附件,选择用户。
è4、image 图片
è5、css 样式
è6、js 脚本文件目录
è7、index.jsp 登录页面
è8、main.jsp 主框架文件
è9、main 主框架里面使用到的文件
采用dojo进行页面数据有效性验证
ècommon.js中增加了新方法validateFormUsingDojo
è举例:
– 必填TEXT:<input type="text" widgetId="foo"
– dojoType="ValidationTextbox" required="true"
– missingMessage="必填" name="foo" maxlength="40" />
– 整数校验:<input type="text" name="position" maxlength="3"
– widgetId="position" dojoType="IntegerTextbox"
– min="0" max="999" invalidMessage="输入有误"/>
– 验:if (validateFormUsingDojo(formToBeCheck)){ //调common.js
– formToBeCheck.submit();
– return true;
– }
分页
è包:com.hollycrm.crmframework.util.
èPageUtil.queryPage()
è/public/turn_page.jsp
参数配置(统一编码)
è通过parent_id,组成树形结构
è可存储各种配置信息
– 比如function、系统参数、任务处理url等
è前台维护页面已由申楠开发完成,在新框架下
èTBL_CODE
ècom.hollycrm.crmframework.generalcode. CodeHelper. getCode()
附件管理
è不需要各个业务表有attach_id字段,而是在附件表里保存业务VO的id
è可统一保存位置,也可定制(配置在tbl_code)
è添加、修改、和查看的可嵌入页面已由暴林超完成
è1.可嵌入的jsp:
– attach_edit.jsp、attach_view.jsp
è2. 可调用AttachHelper 的方法:
– addFiles(BaseVO) 、delAllFile(BaseVO)
编号生成
è定义编号生成规则
– $date_,$cur_,$arg1_, $arg2_, $arg3_其它常量
è能应付各种复杂的编号生成,威力无比
– 比如合同号,按地市、年、业务类型重新编号等
è包:com.hollycrm.crmframework.sequence.
èNoUtil.getNext()
cache支持
è包:com.hollycrm.crmframework.cache.
èCacheUtil. put(String type, Serializable key, Object value)
èCacheUtil. get(String type, Serializable key)
工作流支持(待办工作)
è工作流定义、部署。ProcessHelper.deployProcessDefinition()
è启动工作流实例。ProcessHelper.startProcess()
è根据任务分派规则产生任务。规则配置在wf_task_rule
è待办工作台,查询任务。已完成
è开始任务处理。任务处理url配置在tbl_code
è任务处理,应包含通用页面。这个需要各业务模块开发
è任务处理结束。调用TaskBO.endTask()推动流程
è所有任务结束,流程结束。
工作提醒支持、定时器任务支持
– 包:com.hollycrm.crmframework.remind.
– RemindTaskHelper. addOrUpdateRemindTask()
– 可支持各种提醒,按天、月等循环,或一次性
• 合同到期
• 联系人生日(可按阴历提醒)
• 大事记
– 使用:业务模块调用上述方法增加提醒任务
– 实际的提醒可采用:消息、邮件等
Ajax --js
è var params = {
è cmd: 'getConjOptions',
è initValue: p_initValue,
è };
è
è dojo.io.bind({
è url: 'ajaxUtil.ajax',
è content: params,
è load: function(type, data, evt){
è //采用js处理返回的数据data;
è }
è });
动态树
è 采用ajax方式,dojo的树实现前台
è 后台实现ITreeFactory接口即可。
– <div dojoType="TreeSelector" widgetId="treeSelector"
– eventNames="select:nodeSelected"></div>
– <div dojoType="TreeRPCController"
– RPCUrl="/tree/treeUtil.ajax?cmd=initNode&treeId=orgTree"
– widgetId="treeController" DNDController="create"></div>
– <div dojoType="Tree" selector="treeSelector" toggle="fade"
– controller="treeController">
– <%=TreeUtil.getRoots("orgTree")%>
– </div>
– dojo.addOnLoad(function() {
– dojo.event.topic.subscribe("nodeSelected",
– function(message) {
– dojo.debug(message.node.title+“ selected, id:“
– +message.node.objectId);
– });});
级连选择select
è<select name="type" id='type'
è οnchange="updateConjOption (xx..);" >
è在第一级<select>改变时,
– 无提交方式调用后台的级连选择支持类,
– 刷新第二级<select>的选项。
– 同理,可以实现三级、四级
è后台包:com.hollycrm.crmframework.util
èAjaxUtil. getConjOptions()
常用Form数据保留(查询条件等)
è包:com.hollycrm.crmframework.personal
è页面嵌入:public/query/condition_manage.jsp
特殊数据权限支持
è包:com.hollycrm.crmframework.purview
è普通的数据权限:
– 根据用户的“机构权限”,对他所在的机构的数据有相应的权限,包括本人、本组、及下级
è特殊数据权限:
– 特殊权限是与用户所在组织无关的权限设置
– 所以权限设置里增加了“资源类型”、“目标信息权限”的属性
– 包括:某信息、某人的、某组织的、某组织及下级的
业务通知(沟通平台)
è包:com.hollycrm.crmframework.message
è包括:消息、公告、通知、新闻、竞争快报、通报等。分为3类:
è1是完全公开信息
– 不需要设置受众和处理,采用完全公开的权限
è2是普通信息
– 不需要设置受众和处理,采用普通数据权限查
è3是有特殊受众信息
– 采用“特殊数据权限”实现受众人
è支持转发和回复。
è有专门的维护模块。另外,提供接口方便其它模块添加消息
项目与活动管理
è活动管理是较小的概念,是动态的。
– 包括计划、和总结。
– 可扩展类型:里程碑活动等
è项目的概念很广,包括活动和静态内容
– 包括项目文档、成员、风险、沟通信息等
– 可扩展类型:技术支持项目、一站项目、招投标项目等
è包:com.hollycrm.crmframework.activity
è com.hollycrm.crmframework.project