1 学习计划
1、定区关联客户
n 完善CRM服务中的客户查询方法
n 在BOS项目中配置代理对象远程调用crm服务
n 调整定区关联客户页面
n 实现定区关联客户
2、查看定区中包含的分区
n 页面调整
n 服务端实现
3、查看定区关联的客户列表数据
n 页面调整
n 服务端通过代理对象远程调用CRM服务活动客户信息
2 定区关联客户
2.1 在BOS项目中配置代理对象远程调用crm
第一步:在BOS项目的pom.xml中引入CXF的依赖
<dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-jaxws</artifactId> <version>3.0.1</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http</artifactId> <version>3.0.1</version> </dependency>
第二步:使用wsimport命令解析wsdl文件生成本地代码,只需要接口文件和实体类
第三步:在spring配置文件中注册crm客户端代理对象
<!-- 注册crm客户端代理对象 --> <jaxws:client id="crmClient" serviceClass="com.itheima.crm.ICustomerService" address="http://192.168.115.89:8080/crm_heima32/service/customer"/>
第四步:通过注解方式将代理对象注入给Action
2.2 完善CRM服务中的客户查询方法
l 在crm服务中的接口中扩展两个方法
l 在实现类中实现方法
//查询未关联到定区的客户 public List<Customer> findListNotAssociation() { String sql = "select * from t_customer where decidedzone_id is null"; List<Customer> list = jdbcTemplate.query(sql, new RowMapper<Customer>(){ public Customer mapRow(ResultSet rs, int arg1) throws SQLException { int id = rs.getInt("id");//根据字段名称从结果集中获取对应的值 String name = rs.getString("name"); String station = rs.getString("station"); String telephone = rs.getString("telephone"); String address = rs.getString("address"); String decidedzone_id = rs.getString("decidedzone_id"); return new Customer(id, name, station, telephone, address, decidedzone_id); } }); return list; } //查询已经关联到指定定区的客户 public List<Customer> findListHasAssociation(String decidedzoneId) { String sql = "select * from t_customer where decidedzone_id = ?"; List<Customer> list = jdbcTemplate.query(sql, new RowMapper<Customer>(){ public Customer mapRow(ResultSet rs, int arg1) throws SQLException { int id = rs.getInt("id");//根据字段名称从结果集中获取对应的值 String name = rs.getString("name"); String station = rs.getString("station"); String telephone = rs.getString("telephone"); String address = rs.getString("address"); String decidedzone_id = rs.getString("decidedzone_id"); return new Customer(id, name, station, telephone, address, decidedzone_id); } },decidedzoneId); return list; }
注意:服务端扩展了新的方法,需要客户端重新生成客户端代码
2.3 调整定区关联客户页面
页面:WEB-INF/pages/base/decidedzone.jsp
第一步:修改定区页面中关联客户按钮绑定事件处理函数
function doAssociations(){ //获取当前数据表格所有选中的行,返回数组 var rows = $("#grid").datagrid("getSelections"); if(rows.length != 1){ //弹出提示 $.messager.alert("提示信息","请选择一个定区操作!","warning"); }else{ //选中了一个定区 $('#customerWindow').window('open'); //清理下拉框 $("#noassociationSelect").empty(); $("#associationSelect").empty(); //发送ajax请求,请求定区Action,在定区Action中通过crm代理对象完成对于crm服务远程调用获取客户数据 var url_1 = "decidedzoneAction_findListNotAssociation.action"; $.post(url_1,function(data){ //遍历json数组 for(var i=0;i<data.length;i++){ var id = data[i].id; var name = data[i].name; var telephone = data[i].telephone; name = name + "(" + telephone + ")"; $("#noassociationSelect").append("<option value='"+id+"'>"+name+"</option>"); } }); //发送ajax请求,请求定区Action,在定区Action中通过crm代理对象完成对于crm服务远程调用获取客户数据 var url_2 = "decidedzoneAction_findListHasAssociation.action"; var decidedzoneId = rows[0].id; $.post(url_2,{"id":decidedzoneId},function(data){ //遍历json数组 for(var i=0;i<data.length;i++){ var id = data[i].id; var name = data[i].name; var telephone = data[i].telephone; name = name + "(" + telephone + ")"; $("#associationSelect").append("<option value='"+id+"'>"+name+"</option>"); } }); } }
第二步:在定区Action中注入crm代理对象,并且提供方法远程调用crm服务
第三步:为关联客户窗口中左右移动两个按钮绑定事件
第四步:为定区关联客户窗口中的“关联客户”按钮绑定事件
2.4 在crm服务端扩展定区关联客户方法
注意:crm服务端扩展方法后,需要bos客户端重新生成客户端代码
2.5 在定区Action中提供关联客户方法
3 查看定区中包含的分区
页面:WEB-INF/pages/base/decidedzone.jsp
3.1 页面调整
第一步:为datagrid绑定数据事件
第二步:定义doDblClickRow函数
3.2 服务端实现
l 在分区Action中提供方法,根据定区id查询关联的分区
l 在SubareaServiceImpl中提供方法,根据定区id查询关联的分区
4 查看定区中关联的客户信息
public String findListHasAssociation(){ List<Customer> list2 = customerService.findByHasAssociation(model.getId()); ObjectToJson(list2, null); return NONE; }