OAF_开发系列07_实现OAF下拉菜单的上下联动Poplist Synchor(案例)

简介: 20150706 Created By BaoXinjian 一、摘要 下拉列表的级联显示是非常常用的一种界面显示效果,在FORMS中我常作,作法也很简单,可OAF中显然有点麻烦了 现假定有张表,里面有两个字段,一个是Province(省),一个是City(市) 现需要在页面上放置两个下拉列表字段,一个选择省,一个选择市,当然,选择市的下拉列表值需要根据省的下拉列表的选择进行筛选。

20150706 Created By BaoXinjian

一、摘要


下拉列表的级联显示是非常常用的一种界面显示效果,在FORMS中我常作,作法也很简单,可OAF中显然有点麻烦了

现假定有张表,里面有两个字段,一个是Province(省),一个是City(市)

现需要在页面上放置两个下拉列表字段,一个选择省,一个选择市,当然,选择市的下拉列表值需要根据省的下拉列表的选择进行筛选。

实现思路:

实际上很简单,与FORMS差不多,就是要动态的指定选择市的下拉列表的查询,当选择完省后,立即更新市的查询

在Form中通过Trigger进行下拉菜单变更事件的抓取

在OAF中通过Event进行下来菜单变更事件的抓取

 

二、实现分析


Step1. 创建数据库资料, 省和市的资料

 

Step2. 新建一个Business Component Package(For AM and VO)

Step2.1 新建BC:

Package Name:   bxj.oracle.apps.ap.poplist.server

Step2.2 新建AM:

AM Name:          poplistAM

AM Path:            bxj.oracle.apps.ap.poplist.server

Step2.3 新建省的VO(基于SQL):

VO Name:           ChinaProvinceVO

VO Path:             bxj.oracle.apps.ap.poplist.server

SQL:                    SELECT id, provinceid, province FROM bxj_province

Step2.4 新建市的VO(基于SQL):

VO Name:            ChinaCityVO

VO Path:              bxj.oracle.apps.ap.server

SQL:                    SELECT id, cityid, city, father FROM bxj_city

Step2.5 新建市的VO(基于SQL):

VO Name:            ChinaAreaVO

VO Path:              bxj.oracle.apps.ap.server

       SQL:                    SELECT id, areaid, area, father FROM bxj_area

 

Step3. 联AM与VO(方法略)

 

Step4.新建Web Page 及Item

Step4.1新建Page

 

Step4.2 新建Item

 

 

Step5. 创建AM和CO方法

Step5.1 创建CO控制方法

  public void processFormRequest(OAPageContext pageContext, OAWebBean webBean)
  {
    super.processFormRequest(pageContext, webBean);
    
    OAApplicationModule empAM = pageContext.getApplicationModule(webBean);
    
    //当选择省时,刷新市
    if ("refProvince".equals(pageContext.getParameter(EVENT_PARAM))) {
        String province = pageContext.getParameter("ChinaProvinceList");
        String city = pageContext.getParameter("ChinaCityList");
        String area = pageContext.getParameter("ChinaAreaList");
        Serializable[]  amprovinceparams = { province };
        Serializable[]  amaddressparams = { province, city, area };
        empAM.invokeMethod("initCityAddress", amprovinceparams);
        empAM.invokeMethod("initAddress", amaddressparams);
    }
    
    //当选择市时,刷新县
    if ("refCity".equals(pageContext.getParameter(EVENT_PARAM))) {
        String province = pageContext.getParameter("ChinaProvinceList");
        String city = pageContext.getParameter("ChinaCityList");
        String area = pageContext.getParameter("ChinaAreaList");
        Serializable[]  amcityparams = { city };
        Serializable[]  amaddressparams = { province, city, area };
        empAM.invokeMethod("initAreaAddress", amcityparams);
        empAM.invokeMethod("initAddress", amaddressparams);
    }
    
    //当刷新写时,将省市县资料放到EmployeeAddress栏位中,完成自动赋值
    if ("refArea".equals(pageContext.getParameter(EVENT_PARAM))) {
        String province = pageContext.getParameter("ChinaProvinceList");
        String city = pageContext.getParameter("ChinaCityList");
        String area = pageContext.getParameter("ChinaAreaList");
        Serializable[]  amaddressparams = { province, city, area };
        empAM.invokeMethod("initAddress", amaddressparams);
    }
  }

Step5.2 创建AM实现方法

    //当刷新省时,变更市VO的条件
    public void initCityAddress(String p_province) {
        poplistAMImpl addressAM = (poplistAMImpl) this.getpoplistAMSearch();
        ChinaCityVOImpl chinacityVO = addressAM.getChinaCityVO();
        
        chinacityVO.setWhereClause(" province = :1 ");
        chinacityVO.setWhereClauseParam(0, p_province);
        chinacityVO.executeQuery();
    }
    
    //当刷新市时,变更县VO的条件
    public void initAreaAddress(String p_city) {
        poplistAMImpl addressAM = (poplistAMImpl) this.getpoplistAMSearch();
        ChinaCityVOImpl chinacityVO = addressAM.getChinaCityVO();
        
        chinacityVO.setWhereClause(" city = :1 ");
        chinacityVO.setWhereClauseParam(0, p_city);
        chinacityVO.executeQuery();
    }
    
    //当刷新省市县时,自动赋值Address的值
    public void initAddress(String p_province, String p_cit, String p_area) {
        EmployeesVOImpl employeeVO = this.getEmployeesCreateVO();
        EmployeesVORowImpl employeeRow = (EmployeesVORowImpl) employeeVO.getCurrentRow();
        employeeRow.setEmployeeAddress(p_province + p_cit + p_area);
    }

 

Step6 测试三个下拉菜单的级联,和对Address的自动赋值

 

 

Thanks and Regards

参考: Tony Liu - http://blog.itpub.net/10359218/viewspace-677454/

ERP技术讨论群: 288307890
技术交流,技术讨论,欢迎加入
Technology Blog Created By Oracle ERP - 鲍新建
相关文章
|
JavaScript
【Vue3从零开始-实战】S16:详情页样式优化及tab栏内容联动功能实现
【Vue3从零开始-实战】S16:详情页样式优化及tab栏内容联动功能实现
292 0
【Vue3从零开始-实战】S16:详情页样式优化及tab栏内容联动功能实现
|
4月前
|
搜索推荐 数据库
最新UI六零导航系统源码 | 多模版全开源
使用PHP+MySql,增加后台管理 多模板选择,支持在后台切换模板 增加常用搜索引擎,如:知乎、哔哩哔哩、在线翻译等(支持自定义) 支持用户提交收录申请,地址:http://域名/apply 部分模板优化和增加部分功能,如返回顶部、获取输入框焦点、时间日期显示等
75 1
|
5月前
|
小程序 JavaScript 前端开发
【微信小程序-原生开发】实用教程06-轮播图、分类页签 tab 、成员列表(含Tdesign升级,切换调试基础库,设置全局样式,配置组件按需注入,添加图片素材,wx:for,生命周期 onLoad)
【微信小程序-原生开发】实用教程06-轮播图、分类页签 tab 、成员列表(含Tdesign升级,切换调试基础库,设置全局样式,配置组件按需注入,添加图片素材,wx:for,生命周期 onLoad)
167 0
|
6月前
|
前端开发 程序员 UED
全面解析layui:掌握基础知识与实用技能(1. 核心组件与模块 2. 布局与容器 3. 弹出层与提示框;1. 数据表格与数据表单 2. 表单验证与提交 3. 图片轮播与导航菜单)
全面解析layui:掌握基础知识与实用技能(1. 核心组件与模块 2. 布局与容器 3. 弹出层与提示框;1. 数据表格与数据表单 2. 表单验证与提交 3. 图片轮播与导航菜单)
79 0
会议OA项目-其它页面->自定义组件应用,其它界面的布局
会议OA项目-其它页面->自定义组件应用,其它界面的布局
44 0
|
前端开发 数据库 容器
ivx页面(4)下拉菜单的页面
ivx页面(4)下拉菜单的页面
98 0
|
前端开发
前端工作总结149-封装一个带有对话框的button组件
前端工作总结149-封装一个带有对话框的button组件
90 0
|
JSON JavaScript 区块链
实例|APICloud AVM框架封装省市区级联选择弹框
今天介绍用APICloud AVM框架封装省市区级联选择弹框。
181 0
|
前端开发
前端的小玩意(5)——用dojo写的二级下拉菜单自动添加功能
先上DEMO, 虽然丑,那是因为零级按钮的界面太丑了,图标也丑┑( ̄Д  ̄)┍ 这两个优化后会好很多,毕竟美观不是我的特长嘛 DEMO链接: http://download.csdn.net/detail/qq20004604/9568685 (83)二级下拉菜单 ①过程描述: 【1】数据来源:一个数组,具体格式为: var dataArr = [{text
1860 0