1. 首先发布crm服务
第一步:创建动态的web项目crm,导入hessian的jar
第二步:创建一个crm数据库和t_customer表
第三步:在crm项目的web.xml中配置spring的DispatcherServlet
remoting org.springframework.web.servlet.DispatcherServlet 1 remoting /remoting/*
第四步:提供接口CustomerService和Customer类、hbm映射文件
// 客户服务接口 public interface CustomerService { // 未关联定区客户 public ListfindnoassociationCustomers(); // 查询已经关联指定定区的客户 public List findhasassociationCustomers(String decidedZoneId); // 将未关联定区客户关联到定区上 public void assignCustomersToDecidedZone(Integer[] customerIds, String decidedZoneId);}
第五步:为上面的CustomerService接口提供实现类
public class CustomerServiceImpl implements CustomerService { public ListfindnoassociationCustomers() { Session session = HibernateUtils.openSession(); session.beginTransaction(); String hql = "from Customer where decidedzone_id is null"; List customers = session.createQuery(hql).list(); session.getTransaction().commit(); session.close(); return customers; } public List findhasassociationCustomers(String decidedZoneId) { Session session = HibernateUtils.openSession(); session.beginTransaction(); String hql = "from Customer where decidedzone_id = ?"; List customers = session.createQuery(hql).setParameter(0, decidedZoneId).list(); session.getTransaction().commit(); session.close(); return customers; } public void assignCustomersToDecidedZone(Integer[] customerIds, String decidedZoneId) { Session session = HibernateUtils.openSession(); session.beginTransaction(); // 取消定区所有关联客户 String hql2 = "update Customer set decidedzone_id=null where decidedzone_id=?"; session.createQuery(hql2).setParameter(0, decidedZoneId).executeUpdate(); // 进行关联 String hql = "update Customer set decidedzone_id=? where id =?"; if (customerIds != null) { for (Integer id : customerIds) { session.createQuery(hql).setParameter(0, decidedZoneId).setParameter(1, id).executeUpdate(); } } session.getTransaction().commit(); session.close(); }}
第六步:在WEB-INF目录提供spring的配置文件remoting-servlet.xml
2. 在bos项目中调用crm服务获得客户数据
第一步:在bos项目中导入hessian的jar
第二步:从crm项目中复制CustomerService接口和Customer类到bos项目中
第三步:在spring配置文件中配置一个代理对象,可以调用crm服务
第四步:将上面的代理对象通过注解方式注入到Action中
@Autowired protected CustomerService customerService;
第五步:为定区列表页面中的“关联客户”按钮绑定事件,发送2次ajax请求访问Action,在Action中调用hessian代理对象,通过代理对象可以远程访问crm获取客户数据
//全局变量,定区选中的定区id var id; function doAssociations(){ //判断当前是否选中了一个定区 var rows = $("#grid").datagrid("getSelections"); if(rows.length == 1){ id = rows[0].id; //选中了一个 $('#customerWindow').window('open'); $("#noassociationSelect").empty();//清空下拉框 $("#associationSelect").empty();//清空下拉框 //发送ajax请求获取没有关联到定区的客户 var url1 = "${pageContext.request.contextPath}/decidedzoneAction_findnoassociationCustomers.action"; $.post(url1,{},function(data){ //解析json数据,填充到下拉框中 /// for(var i=0;i"+name+""); } },'json'); //发送ajax请求获取关联到当前选中定区的客户 var url2 = "${pageContext.request.contextPath}/decidedzoneAction_findhasassociationCustomers.action"; $.post(url2,{ "id":rows[0].id},function(data){ //解析json数据,填充到下拉框中 /// for(var i=0;i "+name+""); } },'json'); }else{ $.messager.alert("提示信息","请选择一个定区操作!","warning"); } }
第六步:为左右移动按钮绑定事件
//为左右移动按钮绑定事件$("#toRight").click(function(){ $("#associationSelect").append($("#noassociationSelect option:selected"));}); $("#toLeft").click(function(){ $("#noassociationSelect").append($("#associationSelect option:selected"));});
第七步:为关联客户窗口中的“关联客户”按钮绑定事件
//为关联客户按钮绑定事件$("#associationBtn").click(function(){//在提交表单之前,选中右侧下拉框中的所有选项$("#associationSelect option").attr("selected","selected");//在提交表单之前设置隐藏域的值(定区id)$("input[name=id]").val(id);$("#customerForm").submit();});
第八步:在定区Action中接收提交的参数,调用crm服务实现定区关联客户业务功能
private Integer[] customerIds; /** * 定区关联客户 * @return */ public String assigncustomerstodecidedzone(){ customerService.assignCustomersToDecidedZone(customerIds, model.getId()); return "list"; }