Oracle Apex 23.1.1:基于A页Display_Type动态设置B页列为LOV
纯PL/SQL实现方案
不用新建函数,直接在A页的保存逻辑里加PL/SQL代码修改B页页面项属性,步骤如下:
1. 在A页提交处理中加入属性更新代码
假设A页的提交按钮(或保存流程)的PL/SQL处理块里,添加以下逻辑:当用户创建的数据点Display_Type选了LOV,直接修改B页对应页面项的显示类型为LOV:
DECLARE l_target_item_id NUMBER; BEGIN -- 替换成你A页的实际页面项名称 IF :P_A_DISPLAY_TYPE = 'LOV' THEN -- 获取B页对应页面项的ID(这里假设B页页面项命名是P_B_加上数据点名称,比如数据点叫USER_ROLE,项就是P_B_USER_ROLE) SELECT item_id INTO l_target_item_id FROM apex_application_page_items WHERE application_id = :APP_ID AND page_id = 2 -- 替换成B页的实际页面ID AND item_name = 'P_B_' || :P_A_DATA_POINT_NAME; -- 更新页面项为LOV类型,并配置LOV来源 UPDATE apex_application_page_items SET display_as = 'LIST_OF_VALUES' -- 替换成你的LOV查询语句,或者用共享LOV的话设置lov_name字段 , lov_definition = 'SELECT role_name d, role_id r FROM user_roles ORDER BY role_name' , lov_display_null = 'YES' -- 根据需要设置是否显示空选项 WHERE item_id = l_target_item_id; COMMIT; -- 提交元数据修改 END IF; END;
2. 确保B页加载最新配置
修改Apex元数据后,B页下次加载时会自动应用新的页面项属性。如果用户在A页保存后直接跳转到B页,在A页的提交后分支设置跳转到B页即可,此时B页会显示更新后的LOV列。
关键注意点
- 替换代码中
page_id = 2、:P_A_DATA_POINT_NAME、:P_A_DISPLAY_TYPE为你实际的页面ID和页面项名称 - 执行代码的用户需要有修改Apex元数据的权限(工作区管理员权限足够)
- 如果用共享组件里的LOV,把
lov_definition改成lov_name = '你的共享LOV名称'即可,不用写查询语句
内容的提问来源于stack exchange,提问作者Rahul Amruthaluri
相关产品推荐
相关产品推荐

