From fbfec00d7d45f61b638f9bd1dfbd4c2339694d53 Mon Sep 17 00:00:00 2001 From: Jan Kvetina Date: Thu, 23 Dec 2021 23:12:47 +0100 Subject: [PATCH] Store user_roles from pivot to table --- apex/f770/application/pages/page_00920.sql | 123 ++++++++--------- packages/app_actions.spec.sql | 59 ++++++++ packages/app_actions.sql | 149 +++++++++++++++++++++ 3 files changed, 263 insertions(+), 68 deletions(-) diff --git a/apex/f770/application/pages/page_00920.sql b/apex/f770/application/pages/page_00920.sql index edefe3e..9548437 100644 --- a/apex/f770/application/pages/page_00920.sql +++ b/apex/f770/application/pages/page_00920.sql @@ -22,7 +22,7 @@ wwv_flow_api.create_page( ,p_page_template_options=>'#DEFAULT#' ,p_required_role=>wwv_flow_api.id(9823062898204869) ,p_last_updated_by=>'DEV' -,p_last_upd_yyyymmddhh24miss=>'20211223214132' +,p_last_upd_yyyymmddhh24miss=>'20211223220954' ); wwv_flow_api.create_page_plug( p_id=>wwv_flow_api.id(9563395243581646) @@ -2668,9 +2668,8 @@ wwv_flow_api.create_interactive_grid( p_id=>wwv_flow_api.id(9904128360658833) ,p_internal_uid=>9904128360658833 ,p_is_editable=>true -,p_edit_operations=>'i:u:d' +,p_edit_operations=>'u:d' ,p_lost_update_check_type=>'VALUES' -,p_add_row_if_empty=>false ,p_submit_checked_rows=>false ,p_lazy_loading=>false ,p_requires_filter=>false @@ -5148,71 +5147,59 @@ wwv_flow_api.create_page_process( ,p_process_name=>'User Roles (DYNAMIC PIVOT)' ,p_attribute_01=>'PLSQL_CODE' ,p_attribute_04=>wwv_flow_string.join(wwv_flow_t_varchar2( -'DECLARE', -' PROCEDURE save_user_roles (', -' in_action CHAR,', -' in_c001 VARCHAR2 := NULL,', -' in_c002 VARCHAR2 := NULL,', -' in_c003 VARCHAR2 := NULL,', -' in_c004 VARCHAR2 := NULL,', -' in_c005 VARCHAR2 := NULL,', -' in_c006 VARCHAR2 := NULL', -' ) AS', -' rec user_roles%ROWTYPE;', -' BEGIN', -' app.log_module(app.get_json_list(in_action, in_c001, in_c002, in_c003, in_c004, in_c005, in_c006));', -' --', -' rec.app_id := app.get_app_id();', -' rec.user_id := in_c001;', -' rec.role_id := NULL;', -' rec.updated_by := app.get_user_id();', -' rec.updated_at := SYSDATE;', -'', -' -- cleanup all roles', -' DELETE FROM user_roles t', -' WHERE t.app_id = rec.app_id', -' AND t.user_id = rec.user_id;', -'', -' -- match order with view on page', -' FOR r IN (', -' SELECT', -' r.role_id,', -' ''C'' || SUBSTR(1001 + ROW_NUMBER() OVER(ORDER BY r.role_group NULLS LAST, r.order# NULLS LAST, r.role_id), 2, 3) AS arg', -' FROM roles r', -' WHERE r.app_id = rec.app_id', -' ) LOOP', -' rec.role_id := CASE', -' WHEN r.arg = ''C002'' AND in_c002 = ''Y'' THEN r.role_id', -' WHEN r.arg = ''C003'' AND in_c003 = ''Y'' THEN r.role_id', -' WHEN r.arg = ''C004'' AND in_c004 = ''Y'' THEN r.role_id', -' WHEN r.arg = ''C005'' AND in_c005 = ''Y'' THEN r.role_id', -' WHEN r.arg = ''C006'' AND in_c006 = ''Y'' THEN r.role_id', -' END;', -' --', -' IF rec.role_id IS NOT NULL THEN', -' INSERT INTO user_roles', -' VALUES rec;', -' END IF;', -' END LOOP;', -' --', -' app.log_success();', -' EXCEPTION', -' WHEN app.app_exception THEN', -' RAISE;', -' WHEN OTHERS THEN', -' app.raise_error();', -' END;', -'BEGIN', -' save_user_roles (', -' in_action => :APEX$ROW_STATUS,', -' in_c001 => :C001,', -' in_c002 => :C002,', -' in_c003 => :C003,', -' in_c004 => :C004,', -' in_c005 => :C005,', -' in_c006 => :C006', -' );', -'END;', +'app_actions.save_user_roles (', +' in_action => :APEX$ROW_STATUS,', +' in_c001 => :C001,', +' in_c002 => :C002,', +' in_c003 => :C003,', +' in_c004 => :C004,', +' in_c005 => :C005,', +' in_c006 => :C006,', +' in_c007 => :C007,', +' in_c008 => :C008,', +' in_c009 => :C009,', +' in_c010 => :C010,', +' in_c011 => :C011,', +' in_c012 => :C012,', +' in_c013 => :C013,', +' in_c014 => :C014,', +' in_c015 => :C015,', +' in_c016 => :C016,', +' in_c017 => :C017,', +' in_c018 => :C018,', +' in_c019 => :C019,', +' in_c020 => :C020,', +' in_c021 => :C021,', +' in_c022 => :C022,', +' in_c023 => :C023,', +' in_c024 => :C024,', +' in_c025 => :C025,', +' in_c026 => :C026,', +' in_c027 => :C027,', +' in_c028 => :C028,', +' in_c029 => :C029,', +' in_c030 => :C030,', +' in_c031 => :C031,', +' in_c032 => :C032,', +' in_c033 => :C033,', +' in_c034 => :C034,', +' in_c035 => :C035,', +' in_c036 => :C036,', +' in_c037 => :C037,', +' in_c038 => :C038,', +' in_c039 => :C039,', +' in_c040 => :C040,', +' in_c041 => :C041,', +' in_c042 => :C042,', +' in_c043 => :C043,', +' in_c044 => :C044,', +' in_c045 => :C045,', +' in_c046 => :C046,', +' in_c047 => :C047,', +' in_c048 => :C048,', +' in_c049 => :C049,', +' in_c050 => :C050', +');', '')) ,p_attribute_05=>'Y' ,p_attribute_06=>'N' diff --git a/packages/app_actions.spec.sql b/packages/app_actions.spec.sql index e29a22d..4f8ca41 100644 --- a/packages/app_actions.spec.sql +++ b/packages/app_actions.spec.sql @@ -71,5 +71,64 @@ CREATE OR REPLACE PACKAGE app_actions AS in_page_id apex_application_pages.page_id%TYPE ); + + + -- + -- + -- + PROCEDURE save_user_roles ( + in_action CHAR, + in_c001 VARCHAR2 := NULL, + in_c002 VARCHAR2 := NULL, + in_c003 VARCHAR2 := NULL, + in_c004 VARCHAR2 := NULL, + in_c005 VARCHAR2 := NULL, + in_c006 VARCHAR2 := NULL, + in_c007 VARCHAR2 := NULL, + in_c008 VARCHAR2 := NULL, + in_c009 VARCHAR2 := NULL, + in_c010 VARCHAR2 := NULL, + in_c011 VARCHAR2 := NULL, + in_c012 VARCHAR2 := NULL, + in_c013 VARCHAR2 := NULL, + in_c014 VARCHAR2 := NULL, + in_c015 VARCHAR2 := NULL, + in_c016 VARCHAR2 := NULL, + in_c017 VARCHAR2 := NULL, + in_c018 VARCHAR2 := NULL, + in_c019 VARCHAR2 := NULL, + in_c020 VARCHAR2 := NULL, + in_c021 VARCHAR2 := NULL, + in_c022 VARCHAR2 := NULL, + in_c023 VARCHAR2 := NULL, + in_c024 VARCHAR2 := NULL, + in_c025 VARCHAR2 := NULL, + in_c026 VARCHAR2 := NULL, + in_c027 VARCHAR2 := NULL, + in_c028 VARCHAR2 := NULL, + in_c029 VARCHAR2 := NULL, + in_c030 VARCHAR2 := NULL, + in_c031 VARCHAR2 := NULL, + in_c032 VARCHAR2 := NULL, + in_c033 VARCHAR2 := NULL, + in_c034 VARCHAR2 := NULL, + in_c035 VARCHAR2 := NULL, + in_c036 VARCHAR2 := NULL, + in_c037 VARCHAR2 := NULL, + in_c038 VARCHAR2 := NULL, + in_c039 VARCHAR2 := NULL, + in_c040 VARCHAR2 := NULL, + in_c041 VARCHAR2 := NULL, + in_c042 VARCHAR2 := NULL, + in_c043 VARCHAR2 := NULL, + in_c044 VARCHAR2 := NULL, + in_c045 VARCHAR2 := NULL, + in_c046 VARCHAR2 := NULL, + in_c047 VARCHAR2 := NULL, + in_c048 VARCHAR2 := NULL, + in_c049 VARCHAR2 := NULL, + in_c050 VARCHAR2 := NULL + ); + END; / diff --git a/packages/app_actions.sql b/packages/app_actions.sql index 903fbb6..4fb12ea 100644 --- a/packages/app_actions.sql +++ b/packages/app_actions.sql @@ -161,5 +161,154 @@ CREATE OR REPLACE PACKAGE BODY app_actions AS END LOOP; END; + + + PROCEDURE save_user_roles ( + in_action CHAR, + in_c001 VARCHAR2 := NULL, + in_c002 VARCHAR2 := NULL, + in_c003 VARCHAR2 := NULL, + in_c004 VARCHAR2 := NULL, + in_c005 VARCHAR2 := NULL, + in_c006 VARCHAR2 := NULL, + in_c007 VARCHAR2 := NULL, + in_c008 VARCHAR2 := NULL, + in_c009 VARCHAR2 := NULL, + in_c010 VARCHAR2 := NULL, + in_c011 VARCHAR2 := NULL, + in_c012 VARCHAR2 := NULL, + in_c013 VARCHAR2 := NULL, + in_c014 VARCHAR2 := NULL, + in_c015 VARCHAR2 := NULL, + in_c016 VARCHAR2 := NULL, + in_c017 VARCHAR2 := NULL, + in_c018 VARCHAR2 := NULL, + in_c019 VARCHAR2 := NULL, + in_c020 VARCHAR2 := NULL, + in_c021 VARCHAR2 := NULL, + in_c022 VARCHAR2 := NULL, + in_c023 VARCHAR2 := NULL, + in_c024 VARCHAR2 := NULL, + in_c025 VARCHAR2 := NULL, + in_c026 VARCHAR2 := NULL, + in_c027 VARCHAR2 := NULL, + in_c028 VARCHAR2 := NULL, + in_c029 VARCHAR2 := NULL, + in_c030 VARCHAR2 := NULL, + in_c031 VARCHAR2 := NULL, + in_c032 VARCHAR2 := NULL, + in_c033 VARCHAR2 := NULL, + in_c034 VARCHAR2 := NULL, + in_c035 VARCHAR2 := NULL, + in_c036 VARCHAR2 := NULL, + in_c037 VARCHAR2 := NULL, + in_c038 VARCHAR2 := NULL, + in_c039 VARCHAR2 := NULL, + in_c040 VARCHAR2 := NULL, + in_c041 VARCHAR2 := NULL, + in_c042 VARCHAR2 := NULL, + in_c043 VARCHAR2 := NULL, + in_c044 VARCHAR2 := NULL, + in_c045 VARCHAR2 := NULL, + in_c046 VARCHAR2 := NULL, + in_c047 VARCHAR2 := NULL, + in_c048 VARCHAR2 := NULL, + in_c049 VARCHAR2 := NULL, + in_c050 VARCHAR2 := NULL + ) AS + rec user_roles%ROWTYPE; + BEGIN + app.log_module(app.get_json_list(in_action, in_c001)); + -- + rec.app_id := app.get_app_id(); + rec.user_id := in_c001; + rec.role_id := NULL; + rec.updated_by := app.get_user_id(); + rec.updated_at := SYSDATE; + + -- cleanup all roles + DELETE FROM user_roles t + WHERE t.app_id = rec.app_id + AND t.user_id = rec.user_id; + -- + IF in_action = 'D' THEN + app.log_success(); + RETURN; + END IF; + + -- match order with view on page + FOR r IN ( + SELECT + r.role_id, + 'C' || SUBSTR(1001 + ROW_NUMBER() OVER(ORDER BY r.role_group NULLS LAST, r.order# NULLS LAST, r.role_id), 2, 3) AS arg + FROM roles r + WHERE r.app_id = rec.app_id + ) LOOP + rec.role_id := CASE + WHEN r.arg = 'C002' AND in_c002 = 'Y' THEN r.role_id + WHEN r.arg = 'C003' AND in_c003 = 'Y' THEN r.role_id + WHEN r.arg = 'C004' AND in_c004 = 'Y' THEN r.role_id + WHEN r.arg = 'C005' AND in_c005 = 'Y' THEN r.role_id + WHEN r.arg = 'C006' AND in_c006 = 'Y' THEN r.role_id + WHEN r.arg = 'C007' AND in_c007 = 'Y' THEN r.role_id + WHEN r.arg = 'C008' AND in_c008 = 'Y' THEN r.role_id + WHEN r.arg = 'C009' AND in_c009 = 'Y' THEN r.role_id + WHEN r.arg = 'C010' AND in_c010 = 'Y' THEN r.role_id + WHEN r.arg = 'C011' AND in_c011 = 'Y' THEN r.role_id + WHEN r.arg = 'C012' AND in_c012 = 'Y' THEN r.role_id + WHEN r.arg = 'C013' AND in_c013 = 'Y' THEN r.role_id + WHEN r.arg = 'C014' AND in_c014 = 'Y' THEN r.role_id + WHEN r.arg = 'C015' AND in_c015 = 'Y' THEN r.role_id + WHEN r.arg = 'C016' AND in_c016 = 'Y' THEN r.role_id + WHEN r.arg = 'C017' AND in_c017 = 'Y' THEN r.role_id + WHEN r.arg = 'C018' AND in_c018 = 'Y' THEN r.role_id + WHEN r.arg = 'C019' AND in_c019 = 'Y' THEN r.role_id + WHEN r.arg = 'C020' AND in_c020 = 'Y' THEN r.role_id + WHEN r.arg = 'C021' AND in_c021 = 'Y' THEN r.role_id + WHEN r.arg = 'C022' AND in_c022 = 'Y' THEN r.role_id + WHEN r.arg = 'C023' AND in_c023 = 'Y' THEN r.role_id + WHEN r.arg = 'C024' AND in_c024 = 'Y' THEN r.role_id + WHEN r.arg = 'C025' AND in_c025 = 'Y' THEN r.role_id + WHEN r.arg = 'C026' AND in_c026 = 'Y' THEN r.role_id + WHEN r.arg = 'C027' AND in_c027 = 'Y' THEN r.role_id + WHEN r.arg = 'C028' AND in_c028 = 'Y' THEN r.role_id + WHEN r.arg = 'C029' AND in_c029 = 'Y' THEN r.role_id + WHEN r.arg = 'C030' AND in_c030 = 'Y' THEN r.role_id + WHEN r.arg = 'C031' AND in_c031 = 'Y' THEN r.role_id + WHEN r.arg = 'C032' AND in_c032 = 'Y' THEN r.role_id + WHEN r.arg = 'C033' AND in_c033 = 'Y' THEN r.role_id + WHEN r.arg = 'C034' AND in_c034 = 'Y' THEN r.role_id + WHEN r.arg = 'C035' AND in_c035 = 'Y' THEN r.role_id + WHEN r.arg = 'C036' AND in_c036 = 'Y' THEN r.role_id + WHEN r.arg = 'C037' AND in_c037 = 'Y' THEN r.role_id + WHEN r.arg = 'C038' AND in_c038 = 'Y' THEN r.role_id + WHEN r.arg = 'C039' AND in_c039 = 'Y' THEN r.role_id + WHEN r.arg = 'C040' AND in_c040 = 'Y' THEN r.role_id + WHEN r.arg = 'C041' AND in_c041 = 'Y' THEN r.role_id + WHEN r.arg = 'C042' AND in_c042 = 'Y' THEN r.role_id + WHEN r.arg = 'C043' AND in_c043 = 'Y' THEN r.role_id + WHEN r.arg = 'C044' AND in_c044 = 'Y' THEN r.role_id + WHEN r.arg = 'C045' AND in_c045 = 'Y' THEN r.role_id + WHEN r.arg = 'C046' AND in_c046 = 'Y' THEN r.role_id + WHEN r.arg = 'C047' AND in_c047 = 'Y' THEN r.role_id + WHEN r.arg = 'C048' AND in_c048 = 'Y' THEN r.role_id + WHEN r.arg = 'C049' AND in_c049 = 'Y' THEN r.role_id + WHEN r.arg = 'C050' AND in_c050 = 'Y' THEN r.role_id + END; + -- + IF rec.role_id IS NOT NULL THEN + INSERT INTO user_roles + VALUES rec; + END IF; + END LOOP; + -- + app.log_success(); + EXCEPTION + WHEN app.app_exception THEN + RAISE; + WHEN OTHERS THEN + app.raise_error(); + END; + END; /