Oracle APEX 22.1树形结构:无文件子节点时隐藏父节点方案咨询
解决方案:过滤无文件的树形分支
核心思路
仅保留存在有效Files数据的DEPT_NAME节点,以及这些节点对应的上级ORG_UNIT_NAME、BU_NAME路径。通过先筛选出有文件的记录,再基于这些记录构建树形结构,避免生成无意义的空分支。
修改后的树形结构查询SQL
SELECT CASE WHEN connect_by_isleaf = 1 THEN 0 WHEN level = 1 THEN 1 ELSE -1 END AS status, LEVEL, child AS title, NULL AS icon, NULL as tooltip, 'javascript:$s("P1_SELECTED_NODE","' || CASE LEVEL WHEN 1 THEN child WHEN 2 THEN parent || '|' || child WHEN 3 THEN CONNECT_BY_ROOT child || '|' || parent || '|' || child END || '")' AS link FROM ( -- 先过滤出有有效文件的记录,再提取层级关系 SELECT DISTINCT bu_name, parent, child, depth FROM ( SELECT d.*, NULL AS root FROM DEPT_BU_LIST d WHERE Files IS NOT NULL AND TRIM(Files) != '' -- 排除无文件的部门 ) UNPIVOT ( (bu_name, parent, child) FOR depth IN ( (bu_name, root, bu_name) AS 1, (bu_name, bu_name, org_unit_name) AS 2, (bu_name, org_unit_name, dept_name) AS 3 ) ) ) START WITH DEPTH = 1 CONNECT BY PRIOR child = parent AND PRIOR depth + 1 = depth AND PRIOR bu_name = bu_name ORDER SIBLINGS BY child
关键修改说明
- 过滤无文件记录:在子查询中添加
WHERE Files IS NOT NULL AND TRIM(Files) != '',确保只有包含有效文件的部门会被纳入树形结构的生成逻辑。 - 层级生成逻辑:UNPIVOT仅基于过滤后的记录生成三层节点,上级节点(BU、ORG)只会因为存在有文件的子部门而被保留。例如C_BU->CX_ORG下仅A4_DEPT有文件时,该路径会正常显示,而无文件的A3_DEPT不会出现在树中。
- 原有功能保留:节点的展开/折叠状态(
status字段)、页面项赋值逻辑(link字段)保持不变,不影响原有交互功能。
交互式网格查询修正
原查询中存在字段名笔误(org_name应为表结构中的ORG_UNIT_NAME),同时建议添加文件过滤条件,避免返回空结果:
SELECT Files FROM dept_bu_list WHERE Files IS NOT NULL AND TRIM(Files) != '' AND (:P1_BU_NAME IS NULL OR bu_name = :P1_BU_NAME) AND (:P1_ORG_NAME IS NULL OR org_unit_name = :P1_ORG_NAME) AND (:P1_DEPT_NAME IS NULL OR dept_name = :P1_DEPT_NAME)
内容的提问来源于stack exchange,提问作者Velocity
相关产品推荐
相关产品推荐

