More transparent system for page order

This commit is contained in:
Jan Kvetina 2021-12-24 22:00:10 +01:00
parent 6f99e15b3f
commit 35a98478bc
5 changed files with 107 additions and 141 deletions

View File

@ -21,8 +21,8 @@ wwv_flow_api.create_page(
,p_group_id=>wwv_flow_api.id(9240371448352386)
,p_page_template_options=>'#DEFAULT#'
,p_required_role=>wwv_flow_api.id(9556407311505078)
,p_last_updated_by=>'DEV'
,p_last_upd_yyyymmddhh24miss=>'20211223214227'
,p_last_updated_by=>'DEV_ID'
,p_last_upd_yyyymmddhh24miss=>'20211224202455'
);
wwv_flow_api.create_page_plug(
p_id=>wwv_flow_api.id(9192009232668637)
@ -290,7 +290,7 @@ wwv_flow_api.create_region_column(
,p_item_type=>'NATIVE_SINGLE_CHECKBOX'
,p_heading=>'Hide in Menu'
,p_heading_alignment=>'CENTER'
,p_display_sequence=>120
,p_display_sequence=>150
,p_value_alignment=>'CENTER'
,p_attribute_01=>'N'
,p_attribute_02=>'Y'
@ -319,7 +319,7 @@ wwv_flow_api.create_region_column(
,p_item_type=>'NATIVE_SINGLE_CHECKBOX'
,p_heading=>'Clear Items'
,p_heading_alignment=>'CENTER'
,p_display_sequence=>130
,p_display_sequence=>160
,p_value_alignment=>'CENTER'
,p_attribute_01=>'N'
,p_attribute_02=>'Y'
@ -345,17 +345,13 @@ wwv_flow_api.create_region_column(
,p_source_expression=>'PAGE_GROUP'
,p_data_type=>'VARCHAR2'
,p_is_query_only=>true
,p_item_type=>'NATIVE_TEXTAREA'
,p_item_type=>'NATIVE_DISPLAY_ONLY'
,p_heading=>'Page Group'
,p_heading_alignment=>'LEFT'
,p_display_sequence=>140
,p_display_sequence=>120
,p_value_alignment=>'LEFT'
,p_attribute_01=>'Y'
,p_attribute_02=>'N'
,p_attribute_03=>'N'
,p_attribute_04=>'BOTH'
,p_is_required=>false
,p_max_length=>255
,p_attribute_02=>'VALUE'
,p_attribute_05=>'PLAIN'
,p_enable_filter=>true
,p_filter_operators=>'C:S:CASE_INSENSITIVE:REGEXP'
,p_filter_is_required=>false
@ -378,7 +374,7 @@ wwv_flow_api.create_region_column(
,p_item_type=>'NATIVE_DISPLAY_ONLY'
,p_heading=>'Css Class'
,p_heading_alignment=>'LEFT'
,p_display_sequence=>150
,p_display_sequence=>170
,p_value_alignment=>'LEFT'
,p_attribute_02=>'VALUE'
,p_attribute_05=>'PLAIN'
@ -404,7 +400,7 @@ wwv_flow_api.create_region_column(
,p_item_type=>'NATIVE_DISPLAY_ONLY'
,p_heading=>'Auth Scheme'
,p_heading_alignment=>'LEFT'
,p_display_sequence=>160
,p_display_sequence=>180
,p_value_alignment=>'LEFT'
,p_attribute_02=>'VALUE'
,p_attribute_05=>'PLAIN'
@ -422,22 +418,6 @@ wwv_flow_api.create_region_column(
,p_is_primary_key=>false
,p_include_in_export=>true
);
wwv_flow_api.create_region_column(
p_id=>wwv_flow_api.id(9260595592429006)
,p_name=>'ALLOW_CHANGES'
,p_source_type=>'DB_COLUMN'
,p_source_expression=>'ALLOW_CHANGES'
,p_data_type=>'VARCHAR2'
,p_is_query_only=>true
,p_item_type=>'NATIVE_HIDDEN'
,p_display_sequence=>200
,p_attribute_01=>'Y'
,p_use_as_row_header=>false
,p_enable_sort_group=>true
,p_enable_control_break=>true
,p_is_primary_key=>false
,p_include_in_export=>false
);
wwv_flow_api.create_region_column(
p_id=>wwv_flow_api.id(9260665969429007)
,p_name=>'APEX$ROW_ACTION'
@ -468,33 +448,6 @@ wwv_flow_api.create_region_column(
,p_is_primary_key=>false
,p_include_in_export=>false
);
wwv_flow_api.create_region_column(
p_id=>wwv_flow_api.id(9261697069429017)
,p_name=>'SORT_ORDER'
,p_source_type=>'DB_COLUMN'
,p_source_expression=>'SORT_ORDER'
,p_data_type=>'VARCHAR2'
,p_is_query_only=>true
,p_item_type=>'NATIVE_DISPLAY_ONLY'
,p_heading=>'SORT_ORDER'
,p_heading_alignment=>'LEFT'
,p_display_sequence=>210
,p_value_alignment=>'LEFT'
,p_attribute_02=>'VALUE'
,p_attribute_05=>'PLAIN'
,p_enable_filter=>true
,p_filter_operators=>'C:S:CASE_INSENSITIVE:REGEXP'
,p_filter_is_required=>false
,p_filter_text_case=>'MIXED'
,p_filter_exact_match=>true
,p_filter_lov_type=>'DISTINCT'
,p_use_as_row_header=>false
,p_enable_sort_group=>true
,p_enable_control_break=>true
,p_enable_hide=>true
,p_is_primary_key=>false
,p_include_in_export=>false
);
wwv_flow_api.create_region_column(
p_id=>wwv_flow_api.id(9262032305429021)
,p_name=>'PAGE_URL'
@ -503,7 +456,7 @@ wwv_flow_api.create_region_column(
,p_data_type=>'VARCHAR2'
,p_is_query_only=>true
,p_item_type=>'NATIVE_HIDDEN'
,p_display_sequence=>220
,p_display_sequence=>140
,p_attribute_01=>'Y'
,p_filter_is_required=>false
,p_use_as_row_header=>false
@ -512,21 +465,39 @@ wwv_flow_api.create_region_column(
,p_include_in_export=>false
);
wwv_flow_api.create_region_column(
p_id=>wwv_flow_api.id(9614758870237533)
,p_name=>'GROUP#'
p_id=>wwv_flow_api.id(10245325096410342)
,p_name=>'ALLOW_CHANGES'
,p_source_type=>'DB_COLUMN'
,p_source_expression=>'GROUP#'
,p_data_type=>'NUMBER'
,p_source_expression=>'ALLOW_CHANGES'
,p_data_type=>'VARCHAR2'
,p_is_query_only=>true
,p_item_type=>'NATIVE_NUMBER_FIELD'
,p_heading=>'Group#'
,p_heading_alignment=>'RIGHT'
,p_display_sequence=>230
,p_value_alignment=>'RIGHT'
,p_attribute_03=>'right'
,p_is_required=>false
,p_item_type=>'NATIVE_HIDDEN'
,p_display_sequence=>190
,p_attribute_01=>'Y'
,p_use_as_row_header=>false
,p_enable_sort_group=>true
,p_enable_control_break=>true
,p_is_primary_key=>false
,p_include_in_export=>false
);
wwv_flow_api.create_region_column(
p_id=>wwv_flow_api.id(10245444031410343)
,p_name=>'SORT_ORDER'
,p_source_type=>'DB_COLUMN'
,p_source_expression=>'SORT_ORDER'
,p_data_type=>'VARCHAR2'
,p_is_query_only=>true
,p_item_type=>'NATIVE_DISPLAY_ONLY'
,p_heading=>'Sort Order'
,p_heading_alignment=>'LEFT'
,p_display_sequence=>200
,p_value_alignment=>'LEFT'
,p_attribute_02=>'VALUE'
,p_attribute_05=>'PLAIN'
,p_enable_filter=>true
,p_filter_operators=>'C:S:CASE_INSENSITIVE:REGEXP'
,p_filter_is_required=>false
,p_filter_text_case=>'MIXED'
,p_filter_lov_type=>'NONE'
,p_use_as_row_header=>false
,p_enable_sort_group=>true
@ -581,6 +552,25 @@ wwv_flow_api.create_ig_report_view(
,p_srv_only_display_columns=>true
,p_edit_mode=>false
);
wwv_flow_api.create_ig_report_column(
p_id=>wwv_flow_api.id(2414095157086)
,p_view_id=>wwv_flow_api.id(9266000528438793)
,p_display_seq=>23
,p_column_id=>wwv_flow_api.id(10245325096410342)
,p_is_visible=>true
,p_is_frozen=>false
);
wwv_flow_api.create_ig_report_column(
p_id=>wwv_flow_api.id(3864884157089)
,p_view_id=>wwv_flow_api.id(9266000528438793)
,p_display_seq=>14
,p_column_id=>wwv_flow_api.id(10245444031410343)
,p_is_visible=>false
,p_is_frozen=>false
,p_sort_order=>1
,p_sort_direction=>'ASC'
,p_sort_nulls=>'LAST'
);
wwv_flow_api.create_ig_report_column(
p_id=>wwv_flow_api.id(9266572449438797)
,p_view_id=>wwv_flow_api.id(9266000528438793)
@ -671,7 +661,7 @@ wwv_flow_api.create_ig_report_column(
wwv_flow_api.create_ig_report_column(
p_id=>wwv_flow_api.id(9275579147438822)
,p_view_id=>wwv_flow_api.id(9266000528438793)
,p_display_seq=>12
,p_display_seq=>11
,p_column_id=>wwv_flow_api.id(9193367637668650)
,p_is_visible=>false
,p_is_frozen=>false
@ -697,14 +687,6 @@ wwv_flow_api.create_ig_report_column(
,p_is_frozen=>false
,p_width=>223
);
wwv_flow_api.create_ig_report_column(
p_id=>wwv_flow_api.id(9280967303438836)
,p_view_id=>wwv_flow_api.id(9266000528438793)
,p_display_seq=>17
,p_column_id=>wwv_flow_api.id(9260595592429006)
,p_is_visible=>true
,p_is_frozen=>false
);
wwv_flow_api.create_ig_report_column(
p_id=>wwv_flow_api.id(9283483209443170)
,p_view_id=>wwv_flow_api.id(9266000528438793)
@ -721,17 +703,6 @@ wwv_flow_api.create_ig_report_column(
,p_is_visible=>true
,p_is_frozen=>false
);
wwv_flow_api.create_ig_report_column(
p_id=>wwv_flow_api.id(9351843409293730)
,p_view_id=>wwv_flow_api.id(9266000528438793)
,p_display_seq=>16
,p_column_id=>wwv_flow_api.id(9261697069429017)
,p_is_visible=>false
,p_is_frozen=>false
,p_sort_order=>1
,p_sort_direction=>'ASC'
,p_sort_nulls=>'LAST'
);
wwv_flow_api.create_ig_report_column(
p_id=>wwv_flow_api.id(9396282696456439)
,p_view_id=>wwv_flow_api.id(9266000528438793)
@ -740,18 +711,6 @@ wwv_flow_api.create_ig_report_column(
,p_is_visible=>true
,p_is_frozen=>false
);
wwv_flow_api.create_ig_report_column(
p_id=>wwv_flow_api.id(9677328618706358)
,p_view_id=>wwv_flow_api.id(9266000528438793)
,p_display_seq=>19
,p_column_id=>wwv_flow_api.id(9614758870237533)
,p_is_visible=>false
,p_is_frozen=>false
,p_break_order=>2.5
,p_break_is_enabled=>true
,p_break_sort_direction=>'ASC'
,p_break_sort_nulls=>'LAST'
);
wwv_flow_api.create_page_button(
p_id=>wwv_flow_api.id(10238277616352483)
,p_button_sequence=>10

View File

@ -35,8 +35,7 @@ wwv_flow_api.create_list(
' attribute09,',
' attribute10',
'FROM nav_top',
'ORDER BY group#, sort_order NULLS LAST;',
''))
'ORDER BY page_group, sort_order;'))
,p_list_status=>'PUBLIC'
);
wwv_flow_api.component_end;

View File

@ -8,9 +8,8 @@ WITH t AS (
p.page_group,
p.authorization_scheme,
p.page_css_classes,
LEVEL - 1 AS depth,
SYS_CONNECT_BY_PATH(NVL(TO_CHAR(n.order#), 'Z') || '.' || TO_CHAR(n.page_id), '/') AS order#,
CONNECT_BY_ROOT NVL(n.order#, FLOOR(n.page_id / 10)) AS page_root
LEVEL - 1 AS depth,
CONNECT_BY_ROOT NVL(n.order#, n.page_id) AS page_root
FROM navigation n
LEFT JOIN apex_application_pages p
ON p.application_id = n.app_id
@ -37,15 +36,15 @@ SELECT
n.page_id,
n.parent_id,
n.order#,
--
COALESCE(t.page_group, (SELECT page_group FROM t WHERE t.page_id = n.parent_id)) AS page_group,
--
t.page_root AS group#,
--
t.page_root || ' ' || COALESCE(t.page_group, (SELECT page_group FROM t WHERE t.page_id = n.parent_id)) AS page_group,
t.page_alias,
REPLACE(LTRIM(RPAD('-', t.depth * 4), '-'), ' ', '&' || 'nbsp; ') || app.get_page_name(in_name => t.page_name) AS page_name,
--
CASE WHEN r.page_id IS NULL
THEN REPLACE(LTRIM(RPAD('-', t.depth * 4), '-'), ' ', '&' || 'nbsp; ') || app.get_page_name(in_name => t.page_name)
END AS page_name,
--
t.page_title,
t.page_css_classes AS css_class,
t.page_css_classes AS css_class,
--
n.is_hidden,
n.is_reset,
@ -59,8 +58,8 @@ SELECT
THEN app.get_page_link(n.page_id, in_session_id => CASE WHEN n.page_id = 9999 THEN 0 END)
END AS page_url,
--
'UD' AS allow_changes, -- U = update, D = delete
t.order# AS sort_order
'UD' AS allow_changes, -- U = update, D = delete
t.page_root || '.' || t.depth || '.' || NVL(n.order#, n.page_id) AS sort_order
FROM navigation n
LEFT JOIN t
ON t.page_id = n.page_id
@ -82,10 +81,7 @@ SELECT
n.page_id,
n.parent_id,
n.order#,
--
n.page_group,
COALESCE(n.order#, FLOOR(t.page_root / 10)) AS group#,
--
t.page_root || ' ' || n.page_group AS page_group,
n.page_alias,
CASE WHEN n.parent_id IS NOT NULL THEN REPLACE(LTRIM(RPAD('-', 4), '-'), ' ', '&' || 'nbsp; ') END || app.get_page_name(in_name => n.page_name) AS page_name,
n.page_title,
@ -99,9 +95,9 @@ SELECT
ELSE n.auth_scheme
END AS auth_scheme,
--
app.get_page_link(n.page_id) AS page_url,
NULL AS allow_changes, -- no changes allowed
TO_CHAR(t.order#) || '/Z.' || TO_CHAR(n.page_id) AS sort_order
app.get_page_link(n.page_id) AS page_url,
NULL AS allow_changes, -- no changes allowed
t.page_root || '.' || (t.depth + 1) || '.' || NVL(n.order#, n.page_id) AS sort_order
FROM nav_pages_to_add n
LEFT JOIN t
ON t.page_id = n.parent_id;
@ -114,8 +110,7 @@ COMMENT ON COLUMN nav_overview.app_id IS 'Application id';
COMMENT ON COLUMN nav_overview.page_id IS 'Page id';
COMMENT ON COLUMN nav_overview.parent_id IS 'Parent page id to build a hierarchy, adjustable by the user/admin';
COMMENT ON COLUMN nav_overview.order# IS 'Order of the siblings, adjustable by the user/admin';
COMMENT ON COLUMN nav_overview.page_group IS 'Page group from APEX page specification';
COMMENT ON COLUMN nav_overview.group# IS 'Group number derived as (page_id / 10) if order# is empty';
COMMENT ON COLUMN nav_overview.page_group IS 'Page group from APEX page specification; sorted';
COMMENT ON COLUMN nav_overview.page_alias IS 'Page alis from APEX page specification';
COMMENT ON COLUMN nav_overview.page_name IS 'Page name from APEX page specification';
COMMENT ON COLUMN nav_overview.page_title IS 'Page title from APEX page specification';

View File

@ -1,12 +1,37 @@
CREATE OR REPLACE VIEW nav_pages_to_add AS
WITH g AS (
SELECT
p.page_group,
n.page_id,
n.parent_id,
n.order#
FROM navigation n
JOIN apex_application_pages p
ON p.application_id = n.app_id
AND p.page_id = n.page_id
WHERE n.app_id = app.get_app_id()
)
SELECT
p.application_id AS app_id,
p.application_id AS app_id,
p.page_id,
g.parent_id,
--
(
SELECT MIN(g.parent_id)
FROM g
WHERE g.page_group = p.page_group
) AS parent_id,
--
p.page_alias,
p.page_name,
p.page_title,
NULL AS order#,
--
(
SELECT MAX(g.order#)
FROM g
WHERE g.page_group = p.page_group
AND g.page_id < p.page_id
) AS order#,
--
p.page_css_classes AS css_class,
--
'Y' AS is_hidden, -- hide page on default
@ -19,17 +44,5 @@ FROM apex_application_pages p
LEFT JOIN navigation n
ON n.app_id = p.application_id
AND n.page_id = p.page_id
LEFT JOIN (
-- find parent in the same group
SELECT
p.page_group,
NVL(MIN(n.parent_id), MAX(n.page_id)) AS parent_id
FROM navigation n
JOIN apex_application_pages p
ON p.application_id = n.app_id
AND p.page_id = n.page_id
GROUP BY p.page_group
) g
ON g.page_group = p.page_group
WHERE p.application_id = app.get_app_id()
AND n.page_id IS NULL;

View File

@ -66,7 +66,7 @@ SELECT
NULL AS attribute09,
NULL AS attribute10,
--
n.group#,
n.page_group,
n.sort_order
FROM nav_overview n
CROSS JOIN curr
@ -108,5 +108,5 @@ SELECT
attribute09,
attribute10
FROM nav_top
ORDER BY group#, sort_order NULLS LAST;
ORDER BY page_group, sort_order;