Add is_private to settings, move to app package

This commit is contained in:
Jan Kvetina 2022-02-05 14:25:45 +01:00
parent c318833b4d
commit 84ed895a92
7 changed files with 183 additions and 144 deletions

View File

@ -23,7 +23,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=>'20220129093705'
,p_last_upd_yyyymmddhh24miss=>'20220205130844'
);
wwv_flow_api.create_page_plug(
p_id=>wwv_flow_api.id(11853608143169127)
@ -163,11 +163,11 @@ wwv_flow_api.create_region_column(
,p_source_type=>'DB_COLUMN'
,p_source_expression=>'DESCRIPTION_'
,p_data_type=>'VARCHAR2'
,p_is_query_only=>true
,p_is_query_only=>false
,p_item_type=>'NATIVE_TEXT_FIELD'
,p_heading=>'Description'
,p_heading_alignment=>'LEFT'
,p_display_sequence=>140
,p_display_sequence=>150
,p_value_alignment=>'LEFT'
,p_attribute_05=>'BOTH'
,p_is_required=>false
@ -181,6 +181,7 @@ wwv_flow_api.create_region_column(
,p_enable_sort_group=>false
,p_enable_hide=>true
,p_is_primary_key=>false
,p_duplicate_value=>true
,p_include_in_export=>true
);
wwv_flow_api.create_region_column(
@ -255,7 +256,7 @@ wwv_flow_api.create_region_column(
,p_item_type=>'NATIVE_DISPLAY_ONLY'
,p_heading=>'Updated By'
,p_heading_alignment=>'LEFT'
,p_display_sequence=>150
,p_display_sequence=>160
,p_value_alignment=>'LEFT'
,p_attribute_02=>'VALUE'
,p_attribute_05=>'PLAIN'
@ -282,7 +283,7 @@ wwv_flow_api.create_region_column(
,p_item_type=>'NATIVE_DISPLAY_ONLY'
,p_heading=>'Updated At'
,p_heading_alignment=>'LEFT'
,p_display_sequence=>160
,p_display_sequence=>170
,p_value_alignment=>'LEFT'
,p_attribute_02=>'VALUE'
,p_attribute_05=>'PLAIN'
@ -452,7 +453,7 @@ wwv_flow_api.create_region_column(
,p_item_type=>'NATIVE_DISPLAY_ONLY'
,p_heading=>'Procedures'
,p_heading_alignment=>'RIGHT'
,p_display_sequence=>120
,p_display_sequence=>130
,p_value_alignment=>'RIGHT'
,p_group_id=>wwv_flow_api.id(12335175952960920)
,p_use_group_for=>'BOTH'
@ -478,7 +479,7 @@ wwv_flow_api.create_region_column(
,p_item_type=>'NATIVE_DISPLAY_ONLY'
,p_heading=>'Views'
,p_heading_alignment=>'RIGHT'
,p_display_sequence=>130
,p_display_sequence=>140
,p_value_alignment=>'RIGHT'
,p_group_id=>wwv_flow_api.id(12335175952960920)
,p_use_group_for=>'BOTH'
@ -494,6 +495,35 @@ 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(22942157447325326)
,p_name=>'IS_PRIVATE'
,p_source_type=>'DB_COLUMN'
,p_source_expression=>'IS_PRIVATE'
,p_data_type=>'VARCHAR2'
,p_is_query_only=>false
,p_item_type=>'NATIVE_SINGLE_CHECKBOX'
,p_heading=>'Private'
,p_heading_alignment=>'CENTER'
,p_display_sequence=>120
,p_value_alignment=>'CENTER'
,p_attribute_01=>'Y'
,p_is_required=>false
,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_duplicate_value=>true
,p_include_in_export=>true
,p_security_scheme=>wwv_flow_api.id(9556407311505078)
);
wwv_flow_api.create_interactive_grid(
p_id=>wwv_flow_api.id(11853821618169129)
,p_internal_uid=>11853821618169129
@ -548,7 +578,7 @@ wwv_flow_api.create_ig_report_view(
wwv_flow_api.create_ig_report_column(
p_id=>wwv_flow_api.id(28500165388036)
,p_view_id=>wwv_flow_api.id(12011273108679405)
,p_display_seq=>4
,p_display_seq=>3
,p_column_id=>wwv_flow_api.id(12112180628376320)
,p_is_visible=>true
,p_is_frozen=>false
@ -560,11 +590,11 @@ wwv_flow_api.create_ig_report_column(
wwv_flow_api.create_ig_report_column(
p_id=>wwv_flow_api.id(29930996388039)
,p_view_id=>wwv_flow_api.id(12011273108679405)
,p_display_seq=>3
,p_display_seq=>2
,p_column_id=>wwv_flow_api.id(12112213333376321)
,p_is_visible=>true
,p_is_frozen=>false
,p_width=>90
,p_width=>80
);
wwv_flow_api.create_ig_report_column(
p_id=>wwv_flow_api.id(12014468263679422)
@ -582,7 +612,7 @@ wwv_flow_api.create_ig_report_column(
wwv_flow_api.create_ig_report_column(
p_id=>wwv_flow_api.id(12015320331679424)
,p_view_id=>wwv_flow_api.id(12011273108679405)
,p_display_seq=>5
,p_display_seq=>4
,p_column_id=>wwv_flow_api.id(11854302395169134)
,p_is_visible=>true
,p_is_frozen=>false
@ -599,25 +629,25 @@ wwv_flow_api.create_ig_report_column(
wwv_flow_api.create_ig_report_column(
p_id=>wwv_flow_api.id(12017110360679428)
,p_view_id=>wwv_flow_api.id(12011273108679405)
,p_display_seq=>6
,p_display_seq=>5
,p_column_id=>wwv_flow_api.id(11854519035169136)
,p_is_visible=>true
,p_is_frozen=>false
,p_width=>90
,p_width=>80
);
wwv_flow_api.create_ig_report_column(
p_id=>wwv_flow_api.id(12018068358679430)
,p_view_id=>wwv_flow_api.id(12011273108679405)
,p_display_seq=>7
,p_display_seq=>6
,p_column_id=>wwv_flow_api.id(11854640901169137)
,p_is_visible=>true
,p_is_frozen=>false
,p_width=>90
,p_width=>80
);
wwv_flow_api.create_ig_report_column(
p_id=>wwv_flow_api.id(12018933623679432)
,p_view_id=>wwv_flow_api.id(12011273108679405)
,p_display_seq=>12
,p_display_seq=>13
,p_column_id=>wwv_flow_api.id(11854730854169138)
,p_is_visible=>false
,p_is_frozen=>false
@ -626,7 +656,7 @@ wwv_flow_api.create_ig_report_column(
wwv_flow_api.create_ig_report_column(
p_id=>wwv_flow_api.id(12019830036679434)
,p_view_id=>wwv_flow_api.id(12011273108679405)
,p_display_seq=>13
,p_display_seq=>14
,p_column_id=>wwv_flow_api.id(11854883294169139)
,p_is_visible=>false
,p_is_frozen=>false
@ -643,7 +673,7 @@ wwv_flow_api.create_ig_report_column(
wwv_flow_api.create_ig_report_column(
p_id=>wwv_flow_api.id(12104857120371283)
,p_view_id=>wwv_flow_api.id(12011273108679405)
,p_display_seq=>8
,p_display_seq=>7
,p_column_id=>wwv_flow_api.id(11855718811169148)
,p_is_visible=>false
,p_is_frozen=>false
@ -652,7 +682,7 @@ wwv_flow_api.create_ig_report_column(
wwv_flow_api.create_ig_report_column(
p_id=>wwv_flow_api.id(12105782280371287)
,p_view_id=>wwv_flow_api.id(12011273108679405)
,p_display_seq=>9
,p_display_seq=>8
,p_column_id=>wwv_flow_api.id(11855803111169149)
,p_is_visible=>false
,p_is_frozen=>false
@ -669,20 +699,29 @@ wwv_flow_api.create_ig_report_column(
wwv_flow_api.create_ig_report_column(
p_id=>wwv_flow_api.id(12576610446394335)
,p_view_id=>wwv_flow_api.id(12011273108679405)
,p_display_seq=>10
,p_display_seq=>9
,p_column_id=>wwv_flow_api.id(12335871532960927)
,p_is_visible=>true
,p_is_frozen=>false
,p_width=>90
,p_width=>80
);
wwv_flow_api.create_ig_report_column(
p_id=>wwv_flow_api.id(12577576446394339)
,p_view_id=>wwv_flow_api.id(12011273108679405)
,p_display_seq=>11
,p_display_seq=>10
,p_column_id=>wwv_flow_api.id(12335937642960928)
,p_is_visible=>true
,p_is_frozen=>false
,p_width=>90
,p_width=>80
);
wwv_flow_api.create_ig_report_column(
p_id=>wwv_flow_api.id(23102454673132420)
,p_view_id=>wwv_flow_api.id(12011273108679405)
,p_display_seq=>11
,p_column_id=>wwv_flow_api.id(22942157447325326)
,p_is_visible=>true
,p_is_frozen=>false
,p_width=>80
);
wwv_flow_api.create_page_plug(
p_id=>wwv_flow_api.id(12110948961376308)
@ -4487,7 +4526,7 @@ wwv_flow_api.create_page_process(
,p_attribute_04=>wwv_flow_string.join(wwv_flow_t_varchar2(
'app.log_action(''SAVE_SETTINGS'');',
'--',
'app_actions.set_setting (',
'app_actions.save_setting (',
' in_action => :APEX$ROW_STATUS,',
' in_setting_name => :SETTING_NAME,',
' in_setting_name_old => :SETTING_NAME_OLD,',
@ -4495,6 +4534,7 @@ wwv_flow_api.create_page_process(
' in_setting_group => :SETTING_GROUP,',
' in_is_numeric => :IS_NUMERIC,',
' in_is_date => :IS_DATE,',
' in_is_private => :IS_PRIVATE,',
' in_description => :DESCRIPTION_',
');',
'',

View File

@ -1455,6 +1455,13 @@ CREATE OR REPLACE PACKAGE app AS
--
-- Rebuild package containing function matching Settings table
--
PROCEDURE rebuild_settings;

View File

@ -3581,6 +3581,99 @@ CREATE OR REPLACE PACKAGE BODY app AS
PROCEDURE rebuild_settings
AS
q VARCHAR2(32767);
b VARCHAR2(32767);
BEGIN
app.log_module();
--
IF app.get_settings_package() IS NULL THEN
RETURN;
END IF;
--
app.refresh_user_source_views();
--
q := 'CREATE OR REPLACE PACKAGE ' || LOWER(app.get_settings_package()) || ' AS' || CHR(10);
b := 'CREATE OR REPLACE PACKAGE BODY ' || LOWER(app.get_settings_package()) || ' AS' || CHR(10);
--
FOR c IN (
SELECT DISTINCT
s.setting_name,
s.is_numeric,
s.is_date
FROM settings s
WHERE s.app_id = app.get_app_id()
AND s.setting_context IS NULL
AND s.is_private IS NULL
ORDER BY s.setting_name
) LOOP
-- create specification
q := q || CHR(10);
q := q || ' FUNCTION ' || LOWER(app.settings_prefix) || LOWER(c.setting_name) || ' (' || CHR(10);
q := q || ' in_context settings.setting_context%TYPE := NULL' || CHR(10);
q := q || ' )' || CHR(10);
q := q || ' RETURN ' || CASE
WHEN c.is_numeric = 'Y' THEN 'NUMBER'
WHEN c.is_date = 'Y' THEN 'DATE'
ELSE 'VARCHAR2' END || CHR(10);
q := q || ' RESULT_CACHE;' || CHR(10);
-- create package body
b := b || CHR(10);
b := b || ' FUNCTION ' || LOWER(app.settings_prefix) || LOWER(c.setting_name) || ' (' || CHR(10);
b := b || ' in_context settings.setting_context%TYPE := NULL' || CHR(10);
b := b || ' )' || CHR(10);
b := b || ' RETURN ' || CASE
WHEN c.is_numeric = 'Y' THEN 'NUMBER'
WHEN c.is_date = 'Y' THEN 'DATE'
ELSE 'VARCHAR2' END || CHR(10);
b := b || ' RESULT_CACHE AS' || CHR(10);
b := b || ' BEGIN' || CHR(10);
b := b || ' RETURN ' || CASE
WHEN c.is_numeric = 'Y' THEN 'TO_NUMBER('
WHEN c.is_date = 'Y' THEN 'app.get_date('
END || 'app.get_setting (' || CHR(10);
b := b || ' in_name => ''' || c.setting_name || ''',' || CHR(10);
b := b || ' in_context => in_context' || CHR(10);
b := b || ' ' || CASE
WHEN NVL(c.is_numeric, c.is_date) = 'Y' THEN ')'
END || ');' || CHR(10);
b := b || ' EXCEPTION' || CHR(10);
b := b || ' WHEN NO_DATA_FOUND THEN' || CHR(10);
b := b || ' RETURN NULL;' || CHR(10);
b := b || ' END;' || CHR(10);
END LOOP;
--
q := q || CHR(10) || 'END;';
b := b || CHR(10) || 'END;';
--
EXECUTE IMMEDIATE q;
EXECUTE IMMEDIATE b;
--
recompile (
in_name => app.get_settings_package(),
in_force => TRUE
);
--
/*
DBMS_RESULT_CACHE.INVALIDATE (
owner => app.schema_owner,
name => app_actions.settings_package
);
*/
EXCEPTION
WHEN app.app_exception THEN
RAISE;
WHEN OTHERS THEN
app.log_debug(q); -- trimmed
app.log_debug(b); -- trimmed
--
app.raise_error();
END;

View File

@ -29,20 +29,6 @@ CREATE OR REPLACE PACKAGE app_actions AS
*
*/
-- for sending emails
smtp_from CONSTANT VARCHAR2(200) := '';
smtp_username CONSTANT VARCHAR2(50) := NULL;
smtp_password CONSTANT VARCHAR2(50) := NULL;
smtp_host CONSTANT VARCHAR2(50) := '';
smtp_port CONSTANT NUMBER(4) := 25;
smtp_timeout CONSTANT NUMBER(2) := 20;
-- ### Help functions
--
@ -196,7 +182,7 @@ CREATE OR REPLACE PACKAGE app_actions AS
--
-- Store/update settings
--
PROCEDURE set_setting (
PROCEDURE save_setting (
in_action CHAR,
in_setting_name_old settings.setting_name%TYPE,
in_setting_name settings.setting_name%TYPE,
@ -204,6 +190,7 @@ CREATE OR REPLACE PACKAGE app_actions AS
in_setting_value settings.setting_value%TYPE := NULL,
in_is_numeric settings.is_numeric%TYPE := NULL,
in_is_date settings.is_date%TYPE := NULL,
in_is_private settings.is_private%TYPE := NULL,
in_description settings.description_%TYPE := NULL
);
@ -267,13 +254,6 @@ CREATE OR REPLACE PACKAGE app_actions AS
--
-- Rebuild package containing function matching Settings table
--
PROCEDURE rebuild_settings;
--
-- Prepare pivot for Settings page
--

View File

@ -412,7 +412,7 @@ CREATE OR REPLACE PACKAGE BODY app_actions AS
PROCEDURE set_setting (
PROCEDURE save_setting (
in_action CHAR,
in_setting_name_old settings.setting_name%TYPE,
in_setting_name settings.setting_name%TYPE,
@ -420,6 +420,7 @@ CREATE OR REPLACE PACKAGE BODY app_actions AS
in_setting_value settings.setting_value%TYPE := NULL,
in_is_numeric settings.is_numeric%TYPE := NULL,
in_is_date settings.is_date%TYPE := NULL,
in_is_private settings.is_private%TYPE := NULL,
in_description settings.description_%TYPE := NULL
)
AS
@ -432,7 +433,8 @@ CREATE OR REPLACE PACKAGE BODY app_actions AS
'value', in_setting_value,
'group', in_setting_group,
'is_numeric', in_is_numeric,
'is_date', in_is_date
'is_date', in_is_date,
'is_private', in_is_private
);
--
rec.app_id := app.get_app_id();
@ -442,6 +444,7 @@ CREATE OR REPLACE PACKAGE BODY app_actions AS
rec.setting_group := in_setting_group;
rec.is_numeric := in_is_numeric;
rec.is_date := in_is_date;
rec.is_private := in_is_private;
rec.description_ := in_description;
rec.updated_by := app.get_user_id();
rec.updated_at := SYSDATE;
@ -644,98 +647,6 @@ CREATE OR REPLACE PACKAGE BODY app_actions AS
PROCEDURE rebuild_settings
AS
q VARCHAR2(32767);
b VARCHAR2(32767);
BEGIN
app.log_module();
--
IF app.get_settings_package() IS NULL THEN
RETURN;
END IF;
--
app.refresh_user_source_views();
--
q := 'CREATE OR REPLACE PACKAGE ' || LOWER(app.get_settings_package()) || ' AS' || CHR(10);
b := 'CREATE OR REPLACE PACKAGE BODY ' || LOWER(app.get_settings_package()) || ' AS' || CHR(10);
--
FOR c IN (
SELECT DISTINCT
s.setting_name,
s.is_numeric,
s.is_date
FROM settings s
WHERE s.app_id = app.get_app_id()
AND s.setting_context IS NULL
ORDER BY s.setting_name
) LOOP
-- create specification
q := q || CHR(10);
q := q || ' FUNCTION ' || LOWER(app.settings_prefix) || LOWER(c.setting_name) || ' (' || CHR(10);
q := q || ' in_context settings.setting_context%TYPE := NULL' || CHR(10);
q := q || ' )' || CHR(10);
q := q || ' RETURN ' || CASE
WHEN c.is_numeric = 'Y' THEN 'NUMBER'
WHEN c.is_date = 'Y' THEN 'DATE'
ELSE 'VARCHAR2' END || CHR(10);
q := q || ' RESULT_CACHE;' || CHR(10);
-- create package body
b := b || CHR(10);
b := b || ' FUNCTION ' || LOWER(app.settings_prefix) || LOWER(c.setting_name) || ' (' || CHR(10);
b := b || ' in_context settings.setting_context%TYPE := NULL' || CHR(10);
b := b || ' )' || CHR(10);
b := b || ' RETURN ' || CASE
WHEN c.is_numeric = 'Y' THEN 'NUMBER'
WHEN c.is_date = 'Y' THEN 'DATE'
ELSE 'VARCHAR2' END || CHR(10);
b := b || ' RESULT_CACHE AS' || CHR(10);
b := b || ' BEGIN' || CHR(10);
b := b || ' RETURN ' || CASE
WHEN c.is_numeric = 'Y' THEN 'TO_NUMBER('
WHEN c.is_date = 'Y' THEN 'app.get_date('
END || 'app.get_setting (' || CHR(10);
b := b || ' in_name => ''' || c.setting_name || ''',' || CHR(10);
b := b || ' in_context => in_context' || CHR(10);
b := b || ' ' || CASE
WHEN NVL(c.is_numeric, c.is_date) = 'Y' THEN ')'
END || ');' || CHR(10);
b := b || ' EXCEPTION' || CHR(10);
b := b || ' WHEN NO_DATA_FOUND THEN' || CHR(10);
b := b || ' RETURN NULL;' || CHR(10);
b := b || ' END;' || CHR(10);
END LOOP;
--
q := q || CHR(10) || 'END;';
b := b || CHR(10) || 'END;';
--
EXECUTE IMMEDIATE q;
EXECUTE IMMEDIATE b;
--
recompile (
in_name => app.get_settings_package(),
in_force => TRUE
);
--
/*
DBMS_RESULT_CACHE.INVALIDATE (
owner => app.schema_owner,
name => app_actions.settings_package
);
*/
EXCEPTION
WHEN app.app_exception THEN
RAISE;
WHEN OTHERS THEN
app.log_debug(q); -- trimmed
app.log_debug(b); -- trimmed
--
app.raise_error();
END;
PROCEDURE prep_settings_pivot (
in_page_id apex_application_pages.page_id%TYPE
) AS

View File

@ -9,6 +9,7 @@ CREATE TABLE settings (
--
is_numeric CHAR(1),
is_date CHAR(1),
is_private CHAR(1),
--
description_ VARCHAR2(1000),
--
@ -26,7 +27,10 @@ CREATE TABLE settings (
CHECK ((is_numeric = 'Y' AND is_date IS NULL) OR is_numeric IS NULL),
--
CONSTRAINT ch_settings_is_date
CHECK ((is_date = 'Y' AND is_numeric IS NULL) OR is_date IS NULL)
CHECK ((is_date = 'Y' AND is_numeric IS NULL) OR is_date IS NULL),
--
CONSTRAINT ch_settings_is_private
CHECK (is_private = 'Y' OR is_private IS NULL)
)
STORAGE (BUFFER_POOL KEEP);
--
@ -39,5 +43,6 @@ COMMENT ON COLUMN settings.setting_context IS 'To allow multiple values dep
COMMENT ON COLUMN settings.setting_group IS 'Group just for grouping set in APEX';
COMMENT ON COLUMN settings.is_numeric IS 'Flag to convert value to number';
COMMENT ON COLUMN settings.is_date IS 'Flag to convert value to date';
COMMENT ON COLUMN settings.is_private IS 'Visible for Developers only on Settings page';
COMMENT ON COLUMN settings.description_ IS 'Description';

View File

@ -4,7 +4,8 @@ WITH x AS (
app.get_settings_package() AS package_name,
app.get_settings_prefix() AS prefix,
app.get_item('$SETTING_NAME') AS setting_name,
app.get_app_id() AS app_id
app.get_app_id() AS app_id,
app.is_developer_y() AS is_dev
FROM DUAL
),
p AS (
@ -48,6 +49,7 @@ SELECT
s.setting_value,
s.is_numeric,
s.is_date,
s.is_private,
--
p.procedure_name,
p.data_type,
@ -79,7 +81,8 @@ LEFT JOIN r
LEFT JOIN v
ON v.procedure_name = x.prefix || s.setting_name
WHERE s.setting_name = NVL(x.setting_name, s.setting_name)
AND s.setting_context IS NULL;
AND s.setting_context IS NULL
AND (s.is_private IS NULL OR x.is_dev = 'Y');
--
COMMENT ON TABLE settings_overview IS '[CORE - DASHBOARD] Settings';