Oracle Apex:实现只读字段基于其他字段自动填充并保存
问题描述
现有两张数据表:
select emp_id,dept_name,emp_name,commision from employee_dets; select emp_id,dept_name, bu,org from emp_profile;
基于EMP_PROFILE表创建了交互式网格,其中EMP_ID字段设为选择列表,对应的SQL语句为:
select emp_name d,emp_id r from employee_Dets;
DEPT_NAME原本是依赖EMP_ID的选择列表,SQL语句为:
select dept_name d, dept_name r from employee_Dets where emp_id= :EMP_ID;
需求是将DEPT_NAME设为只读状态,同时在选择EMP_ID后自动填充对应值并能保存到数据库,但设置为“Always只读”时无法自动填充,需要解决这个问题。
解决方案
方法1:用条件只读替代全局只读
- 进入交互式网格的
DEPT_NAME字段属性设置,把只读模式改成Conditional Read Only - 设置只读条件为
1=1(始终满足,等效全局只读),这种模式下不会阻断字段依赖EMP_ID的自动赋值逻辑 - 保存设置后测试:选择
EMP_ID时DEPT_NAME会自动填充,且处于只读状态,提交时能正常写入数据库
方法2:通过动态动作实现填充+只读
- 先把
DEPT_NAME的字段类型改成Text Field,暂不设置只读 - 创建第一个动态动作:
- 触发条件:
EMP_ID字段值发生变化时 - 执行动作:选择Set Value,目标设为
DEPT_NAME字段 - 值来源选SQL Query,输入语句:
select dept_name from employee_Dets where emp_id = :EMP_ID
- 触发条件:
- 创建第二个动态动作:
- 触发条件:页面加载完成或
DEPT_NAME字段值变化后 - 执行动作:选择Set Property,将
DEPT_NAME的readonly属性设为true
- 触发条件:页面加载完成或
- 保存后测试:选
EMP_ID时DEPT_NAME自动填充并锁定,提交可正常保存
方法3:修改交互式网格源查询(推荐)
直接调整网格的基础查询,关联表自动带出DEPT_NAME,再设置字段只读:
- 修改交互式网格的源SQL为:
select ep.emp_id, ed.dept_name, ep.bu, ep.org from emp_profile ep left join employee_dets ed on ep.emp_id = ed.emp_id - 进入
DEPT_NAME字段属性,设置为Always只读 - 保留
EMP_ID的选择列表设置,选择EMP_ID时,网格会通过关联查询自动带出对应DEPT_NAME,字段只读且提交时正常写入数据库
内容的提问来源于stack exchange,提问作者Velocity
相关产品推荐
相关产品推荐

