Generic settings feature for any app

This commit is contained in:
Jan Kvetina 2021-12-29 19:49:53 +01:00
parent d3f96fe357
commit 6e8c851bb7
7 changed files with 1210 additions and 0 deletions

View File

@ -0,0 +1,783 @@
prompt --application/pages/page_00970
begin
-- Manifest
-- PAGE: 00970
-- Manifest End
wwv_flow_api.component_begin (
p_version_yyyy_mm_dd=>'2021.04.15'
,p_release=>'21.1.6'
,p_default_workspace_id=>9014660246496943
,p_default_application_id=>770
,p_default_id_offset=>0
,p_default_owner=>'CORE'
);
wwv_flow_api.create_page(
p_id=>970
,p_user_interface_id=>wwv_flow_api.id(9169746885570061)
,p_name=>'#fa-wrench Settings'
,p_alias=>'SETTINGS'
,p_step_title=>'Settings'
,p_warn_on_unsaved_changes=>'N'
,p_autocomplete_on_off=>'OFF'
,p_group_id=>wwv_flow_api.id(9240371448352386)
,p_page_template_options=>'#DEFAULT#'
,p_required_role=>wwv_flow_api.id(9823062898204869)
,p_last_updated_by=>'DEV'
,p_last_upd_yyyymmddhh24miss=>'20211229183932'
);
wwv_flow_api.create_page_plug(
p_id=>wwv_flow_api.id(11853608143169127)
,p_plug_name=>'Settings'
,p_icon_css_classes=>'fa-wrench'
,p_region_template_options=>'#DEFAULT#'
,p_plug_template=>wwv_flow_api.id(9070356145569920)
,p_plug_display_sequence=>10
,p_include_in_reg_disp_sel_yn=>'Y'
,p_plug_display_point=>'BODY'
,p_plug_query_options=>'DERIVED_REPORT_COLUMNS'
,p_attribute_01=>'N'
,p_attribute_02=>'HTML'
);
wwv_flow_api.create_page_plug(
p_id=>wwv_flow_api.id(11853720141169128)
,p_plug_name=>'Settings [GRID]'
,p_region_name=>'SETTINGS'
,p_region_template_options=>'#DEFAULT#'
,p_component_template_options=>'#DEFAULT#'
,p_plug_template=>wwv_flow_api.id(9078290074569925)
,p_plug_display_sequence=>20
,p_include_in_reg_disp_sel_yn=>'Y'
,p_plug_display_point=>'BODY'
,p_query_type=>'TABLE'
,p_query_table=>'SETTINGS_OVERVIEW'
,p_include_rowid_column=>false
,p_plug_source_type=>'NATIVE_IG'
,p_plug_query_options=>'DERIVED_REPORT_COLUMNS'
,p_prn_units=>'MILLIMETERS'
,p_prn_paper_size=>'A4'
,p_prn_width=>297
,p_prn_height=>210
,p_prn_orientation=>'HORIZONTAL'
,p_prn_page_header=>'Settings [GRID]'
,p_prn_page_header_font_color=>'#000000'
,p_prn_page_header_font_family=>'Helvetica'
,p_prn_page_header_font_weight=>'normal'
,p_prn_page_header_font_size=>'12'
,p_prn_page_footer_font_color=>'#000000'
,p_prn_page_footer_font_family=>'Helvetica'
,p_prn_page_footer_font_weight=>'normal'
,p_prn_page_footer_font_size=>'12'
,p_prn_header_bg_color=>'#EEEEEE'
,p_prn_header_font_color=>'#000000'
,p_prn_header_font_family=>'Helvetica'
,p_prn_header_font_weight=>'bold'
,p_prn_header_font_size=>'10'
,p_prn_body_bg_color=>'#FFFFFF'
,p_prn_body_font_color=>'#000000'
,p_prn_body_font_family=>'Helvetica'
,p_prn_body_font_weight=>'normal'
,p_prn_body_font_size=>'10'
,p_prn_border_width=>.5
,p_prn_page_header_alignment=>'CENTER'
,p_prn_page_footer_alignment=>'CENTER'
,p_prn_border_color=>'#666666'
);
wwv_flow_api.create_region_column(
p_id=>wwv_flow_api.id(11854065725169131)
,p_name=>'SETTING_ID'
,p_source_type=>'DB_COLUMN'
,p_source_expression=>'SETTING_ID'
,p_data_type=>'VARCHAR2'
,p_is_query_only=>false
,p_item_type=>'NATIVE_TEXT_FIELD'
,p_heading=>'Setting Id'
,p_heading_alignment=>'LEFT'
,p_display_sequence=>40
,p_value_alignment=>'LEFT'
,p_attribute_05=>'BOTH'
,p_is_required=>true
,p_max_length=>30
,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
);
wwv_flow_api.create_region_column(
p_id=>wwv_flow_api.id(11854121944169132)
,p_name=>'SETTING_CONTEXT'
,p_source_type=>'DB_COLUMN'
,p_source_expression=>'SETTING_CONTEXT'
,p_data_type=>'VARCHAR2'
,p_is_query_only=>false
,p_item_type=>'NATIVE_TEXT_FIELD'
,p_heading=>'Context'
,p_heading_alignment=>'LEFT'
,p_display_sequence=>50
,p_value_alignment=>'LEFT'
,p_attribute_05=>'BOTH'
,p_is_required=>false
,p_max_length=>64
,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
);
wwv_flow_api.create_region_column(
p_id=>wwv_flow_api.id(11854239797169133)
,p_name=>'SETTING_GROUP'
,p_source_type=>'DB_COLUMN'
,p_source_expression=>'SETTING_GROUP'
,p_data_type=>'VARCHAR2'
,p_is_query_only=>false
,p_item_type=>'NATIVE_TEXT_FIELD'
,p_heading=>'Group'
,p_heading_alignment=>'LEFT'
,p_display_sequence=>60
,p_value_alignment=>'LEFT'
,p_attribute_05=>'BOTH'
,p_is_required=>false
,p_max_length=>64
,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
);
wwv_flow_api.create_region_column(
p_id=>wwv_flow_api.id(11854302395169134)
,p_name=>'SETTING_VALUE'
,p_source_type=>'DB_COLUMN'
,p_source_expression=>'SETTING_VALUE'
,p_data_type=>'VARCHAR2'
,p_is_query_only=>false
,p_item_type=>'NATIVE_TEXT_FIELD'
,p_heading=>'Value'
,p_heading_alignment=>'LEFT'
,p_display_sequence=>70
,p_value_alignment=>'LEFT'
,p_attribute_05=>'BOTH'
,p_is_required=>false
,p_max_length=>256
,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=>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(
p_id=>wwv_flow_api.id(11854401801169135)
,p_name=>'DESCRIPTION_'
,p_source_type=>'DB_COLUMN'
,p_source_expression=>'DESCRIPTION_'
,p_data_type=>'VARCHAR2'
,p_is_query_only=>false
,p_item_type=>'NATIVE_TEXT_FIELD'
,p_heading=>'Description'
,p_heading_alignment=>'LEFT'
,p_display_sequence=>80
,p_value_alignment=>'LEFT'
,p_attribute_05=>'BOTH'
,p_is_required=>false
,p_max_length=>1000
,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=>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(
p_id=>wwv_flow_api.id(11854519035169136)
,p_name=>'IS_NUMERIC'
,p_source_type=>'DB_COLUMN'
,p_source_expression=>'IS_NUMERIC'
,p_data_type=>'VARCHAR2'
,p_is_query_only=>false
,p_item_type=>'NATIVE_SINGLE_CHECKBOX'
,p_heading=>'Is Numeric'
,p_heading_alignment=>'CENTER'
,p_display_sequence=>90
,p_value_alignment=>'CENTER'
,p_attribute_01=>'N'
,p_attribute_02=>'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
);
wwv_flow_api.create_region_column(
p_id=>wwv_flow_api.id(11854640901169137)
,p_name=>'IS_DATE'
,p_source_type=>'DB_COLUMN'
,p_source_expression=>'IS_DATE'
,p_data_type=>'VARCHAR2'
,p_is_query_only=>false
,p_item_type=>'NATIVE_SINGLE_CHECKBOX'
,p_heading=>'Is Date'
,p_heading_alignment=>'CENTER'
,p_display_sequence=>100
,p_value_alignment=>'CENTER'
,p_attribute_01=>'N'
,p_attribute_02=>'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
);
wwv_flow_api.create_region_column(
p_id=>wwv_flow_api.id(11854730854169138)
,p_name=>'UPDATED_BY'
,p_source_type=>'DB_COLUMN'
,p_source_expression=>'UPDATED_BY'
,p_data_type=>'VARCHAR2'
,p_is_query_only=>true
,p_item_type=>'NATIVE_DISPLAY_ONLY'
,p_heading=>'Updated By'
,p_heading_alignment=>'LEFT'
,p_display_sequence=>150
,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=>true
);
wwv_flow_api.create_region_column(
p_id=>wwv_flow_api.id(11854883294169139)
,p_name=>'UPDATED_AT'
,p_source_type=>'DB_COLUMN'
,p_source_expression=>'UPDATED_AT'
,p_data_type=>'DATE'
,p_is_query_only=>true
,p_item_type=>'NATIVE_DISPLAY_ONLY'
,p_heading=>'Updated At'
,p_heading_alignment=>'LEFT'
,p_display_sequence=>160
,p_value_alignment=>'LEFT'
,p_attribute_02=>'VALUE'
,p_attribute_05=>'PLAIN'
,p_format_mask=>'YYYY-MM-DD HH24:MI'
,p_enable_filter=>true
,p_filter_is_required=>false
,p_filter_date_ranges=>'ALL'
,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=>true
);
wwv_flow_api.create_region_column(
p_id=>wwv_flow_api.id(11855045700169141)
,p_name=>'APEX$ROW_ACTION'
,p_item_type=>'NATIVE_ROW_ACTION'
,p_display_sequence=>20
);
wwv_flow_api.create_region_column(
p_id=>wwv_flow_api.id(11855121825169142)
,p_name=>'APEX$ROW_SELECTOR'
,p_item_type=>'NATIVE_ROW_SELECTOR'
,p_display_sequence=>10
,p_attribute_01=>'Y'
,p_attribute_02=>'Y'
,p_attribute_03=>'N'
);
wwv_flow_api.create_region_column(
p_id=>wwv_flow_api.id(11855718811169148)
,p_name=>'PROCEDURE_NAME'
,p_source_type=>'DB_COLUMN'
,p_source_expression=>'PROCEDURE_NAME'
,p_data_type=>'VARCHAR2'
,p_is_query_only=>true
,p_item_type=>'NATIVE_DISPLAY_ONLY'
,p_heading=>'Procedure Name'
,p_heading_alignment=>'LEFT'
,p_display_sequence=>110
,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=>true
);
wwv_flow_api.create_region_column(
p_id=>wwv_flow_api.id(11855803111169149)
,p_name=>'DATA_TYPE'
,p_source_type=>'DB_COLUMN'
,p_source_expression=>'DATA_TYPE'
,p_data_type=>'VARCHAR2'
,p_is_query_only=>true
,p_item_type=>'NATIVE_DISPLAY_ONLY'
,p_heading=>'Data Type'
,p_heading_alignment=>'LEFT'
,p_display_sequence=>120
,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=>true
);
wwv_flow_api.create_region_column(
p_id=>wwv_flow_api.id(11855953367169150)
,p_name=>'REFERENCES'
,p_source_type=>'DB_COLUMN'
,p_source_expression=>'REFERENCES'
,p_data_type=>'NUMBER'
,p_is_query_only=>true
,p_item_type=>'NATIVE_DISPLAY_ONLY'
,p_heading=>'References'
,p_heading_alignment=>'RIGHT'
,p_display_sequence=>140
,p_value_alignment=>'RIGHT'
,p_attribute_02=>'VALUE'
,p_attribute_05=>'PLAIN'
,p_enable_filter=>true
,p_filter_is_required=>false
,p_filter_lov_type=>'NONE'
,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=>true
);
wwv_flow_api.create_region_column(
p_id=>wwv_flow_api.id(12110240050376301)
,p_name=>'RID'
,p_source_type=>'DB_COLUMN'
,p_source_expression=>'RID'
,p_data_type=>'ROWID'
,p_item_type=>'NATIVE_HIDDEN'
,p_display_sequence=>30
,p_attribute_01=>'Y'
,p_use_as_row_header=>false
,p_enable_sort_group=>false
,p_is_primary_key=>true
,p_include_in_export=>false
);
wwv_flow_api.create_region_column(
p_id=>wwv_flow_api.id(12110307179376302)
,p_name=>'ACTION'
,p_source_type=>'DB_COLUMN'
,p_source_expression=>'ACTION'
,p_data_type=>'VARCHAR2'
,p_is_query_only=>true
,p_item_type=>'NATIVE_HTML_EXPRESSION'
,p_heading=>'Action'
,p_heading_alignment=>'CENTER'
,p_display_sequence=>130
,p_value_alignment=>'CENTER'
,p_attribute_01=>'&ACTION.'
,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=>true
);
wwv_flow_api.create_interactive_grid(
p_id=>wwv_flow_api.id(11853821618169129)
,p_internal_uid=>11853821618169129
,p_is_editable=>true
,p_edit_operations=>'i: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
,p_select_first_row=>false
,p_fixed_row_height=>true
,p_pagination_type=>'SET'
,p_show_total_row_count=>true
,p_show_toolbar=>true
,p_toolbar_buttons=>'SEARCH_COLUMN:SEARCH_FIELD:ACTIONS_MENU:SAVE'
,p_enable_save_public_report=>false
,p_enable_subscriptions=>true
,p_enable_flashback=>true
,p_define_chart_view=>true
,p_enable_download=>true
,p_download_formats=>'CSV:HTML:XLSX:PDF'
,p_enable_mail_download=>true
,p_fixed_header=>'PAGE'
,p_show_icon_view=>false
,p_show_detail_view=>false
,p_javascript_code=>wwv_flow_string.join(wwv_flow_t_varchar2(
'function(config) {',
' return unified_ig_toolbar(config);',
'}',
''))
);
wwv_flow_api.create_ig_report(
p_id=>wwv_flow_api.id(12011021825679405)
,p_interactive_grid_id=>wwv_flow_api.id(11853821618169129)
,p_static_id=>'120111'
,p_type=>'PRIMARY'
,p_default_view=>'GRID'
,p_rows_per_page=>100
,p_show_row_number=>false
,p_settings_area_expanded=>false
);
wwv_flow_api.create_ig_report_view(
p_id=>wwv_flow_api.id(12011273108679405)
,p_report_id=>wwv_flow_api.id(12011021825679405)
,p_view_type=>'GRID'
,p_stretch_columns=>true
,p_srv_exclude_null_values=>false
,p_srv_only_display_columns=>true
,p_edit_mode=>false
);
wwv_flow_api.create_ig_report_column(
p_id=>wwv_flow_api.id(12012657244679414)
,p_view_id=>wwv_flow_api.id(12011273108679405)
,p_display_seq=>5
,p_column_id=>wwv_flow_api.id(11854065725169131)
,p_is_visible=>true
,p_is_frozen=>false
,p_width=>240
,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(12013523886679418)
,p_view_id=>wwv_flow_api.id(12011273108679405)
,p_display_seq=>4
,p_column_id=>wwv_flow_api.id(11854121944169132)
,p_is_visible=>true
,p_is_frozen=>false
,p_width=>180
,p_sort_order=>2
,p_sort_direction=>'ASC'
,p_sort_nulls=>'LAST'
);
wwv_flow_api.create_ig_report_column(
p_id=>wwv_flow_api.id(12014468263679422)
,p_view_id=>wwv_flow_api.id(12011273108679405)
,p_display_seq=>1
,p_column_id=>wwv_flow_api.id(11854239797169133)
,p_is_visible=>true
,p_is_frozen=>false
,p_width=>180
,p_break_order=>5
,p_break_is_enabled=>true
,p_break_sort_direction=>'ASC'
,p_break_sort_nulls=>'LAST'
);
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=>6
,p_column_id=>wwv_flow_api.id(11854302395169134)
,p_is_visible=>true
,p_is_frozen=>false
,p_width=>240
);
wwv_flow_api.create_ig_report_column(
p_id=>wwv_flow_api.id(12016200262679426)
,p_view_id=>wwv_flow_api.id(12011273108679405)
,p_display_seq=>7
,p_column_id=>wwv_flow_api.id(11854401801169135)
,p_is_visible=>true
,p_is_frozen=>false
);
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=>8
,p_column_id=>wwv_flow_api.id(11854519035169136)
,p_is_visible=>true
,p_is_frozen=>false
,p_width=>100
);
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=>9
,p_column_id=>wwv_flow_api.id(11854640901169137)
,p_is_visible=>true
,p_is_frozen=>false
,p_width=>100
);
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_column_id=>wwv_flow_api.id(11854730854169138)
,p_is_visible=>false
,p_is_frozen=>false
,p_width=>200
);
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_column_id=>wwv_flow_api.id(11854883294169139)
,p_is_visible=>false
,p_is_frozen=>false
,p_width=>160
);
wwv_flow_api.create_ig_report_column(
p_id=>wwv_flow_api.id(12021675404679438)
,p_view_id=>wwv_flow_api.id(12011273108679405)
,p_display_seq=>0
,p_column_id=>wwv_flow_api.id(11855045700169141)
,p_is_visible=>true
,p_is_frozen=>true
);
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=>10
,p_column_id=>wwv_flow_api.id(11855718811169148)
,p_is_visible=>false
,p_is_frozen=>false
,p_width=>240
);
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=>11
,p_column_id=>wwv_flow_api.id(11855803111169149)
,p_is_visible=>false
,p_is_frozen=>false
,p_width=>160
);
wwv_flow_api.create_ig_report_column(
p_id=>wwv_flow_api.id(12106513784371290)
,p_view_id=>wwv_flow_api.id(12011273108679405)
,p_display_seq=>11
,p_column_id=>wwv_flow_api.id(11855953367169150)
,p_is_visible=>true
,p_is_frozen=>false
,p_width=>100
);
wwv_flow_api.create_ig_report_column(
p_id=>wwv_flow_api.id(12116219450377419)
,p_view_id=>wwv_flow_api.id(12011273108679405)
,p_display_seq=>16
,p_column_id=>wwv_flow_api.id(12110240050376301)
,p_is_visible=>true
,p_is_frozen=>false
);
wwv_flow_api.create_ig_report_column(
p_id=>wwv_flow_api.id(12125527954437069)
,p_view_id=>wwv_flow_api.id(12011273108679405)
,p_display_seq=>3
,p_column_id=>wwv_flow_api.id(12110307179376302)
,p_is_visible=>true
,p_is_frozen=>false
,p_width=>100
);
wwv_flow_api.create_page_button(
p_id=>wwv_flow_api.id(12090595745282902)
,p_button_sequence=>10
,p_button_plug_id=>wwv_flow_api.id(11853608143169127)
,p_button_name=>'REFRESH'
,p_button_action=>'REDIRECT_PAGE'
,p_button_template_options=>'#DEFAULT#'
,p_button_template_id=>wwv_flow_api.id(9144574670569995)
,p_button_image_alt=>'Refresh'
,p_button_position=>'RIGHT_OF_TITLE'
,p_button_redirect_url=>'f?p=&APP_ID.:970:&SESSION.::&DEBUG.:970::'
,p_icon_css_classes=>'fa-refresh'
);
wwv_flow_api.create_page_button(
p_id=>wwv_flow_api.id(11855360615169144)
,p_button_sequence=>20
,p_button_plug_id=>wwv_flow_api.id(11853608143169127)
,p_button_name=>'REBUILD'
,p_button_action=>'REDIRECT_PAGE'
,p_button_template_options=>'#DEFAULT#'
,p_button_template_id=>wwv_flow_api.id(9145249029569999)
,p_button_image_alt=>'Rebuild'
,p_button_position=>'RIGHT_OF_TITLE'
,p_button_redirect_url=>'f?p=&APP_ID.:970:&SESSION.::&DEBUG.:970:P970_REBUILD:Y'
,p_button_cattributes=>'title="&P970_REBUILD_TITLE."'
);
wwv_flow_api.create_page_item(
p_id=>wwv_flow_api.id(11855448034169145)
,p_name=>'P970_REBUILD'
,p_item_sequence=>10
,p_item_plug_id=>wwv_flow_api.id(11853608143169127)
,p_use_cache_before_default=>'NO'
,p_display_as=>'NATIVE_HIDDEN'
,p_attribute_01=>'Y'
);
wwv_flow_api.create_page_item(
p_id=>wwv_flow_api.id(12110581452376304)
,p_name=>'P970_REBUILD_TITLE'
,p_item_sequence=>20
,p_item_plug_id=>wwv_flow_api.id(11853608143169127)
,p_display_as=>'NATIVE_HIDDEN'
,p_attribute_01=>'Y'
);
wwv_flow_api.create_page_da_event(
p_id=>wwv_flow_api.id(12065683402897749)
,p_name=>'SAVE_SETTINGS'
,p_event_sequence=>10
,p_triggering_element_type=>'REGION'
,p_triggering_region_id=>wwv_flow_api.id(11853720141169128)
,p_bind_type=>'bind'
,p_bind_event_type=>'NATIVE_IG|REGION TYPE|interactivegridsave'
);
wwv_flow_api.create_page_da_action(
p_id=>wwv_flow_api.id(12066015388897750)
,p_event_id=>wwv_flow_api.id(12065683402897749)
,p_event_result=>'TRUE'
,p_action_sequence=>10
,p_execute_on_page_init=>'N'
,p_action=>'NATIVE_JAVASCRIPT_CODE'
,p_affected_elements_type=>'REGION'
,p_affected_region_id=>wwv_flow_api.id(11853720141169128)
,p_attribute_01=>wwv_flow_string.join(wwv_flow_t_varchar2(
'apex.region(''SETTINGS'').widget().interactiveGrid(''getActions'').invoke(''save'');',
''))
);
wwv_flow_api.create_page_da_action(
p_id=>wwv_flow_api.id(12066546327897751)
,p_event_id=>wwv_flow_api.id(12065683402897749)
,p_event_result=>'TRUE'
,p_action_sequence=>20
,p_execute_on_page_init=>'N'
,p_action=>'NATIVE_REFRESH'
,p_affected_elements_type=>'REGION'
,p_affected_region_id=>wwv_flow_api.id(11853720141169128)
);
wwv_flow_api.create_page_process(
p_id=>wwv_flow_api.id(11855259982169143)
,p_process_sequence=>10
,p_process_point=>'AFTER_SUBMIT'
,p_region_id=>wwv_flow_api.id(11853720141169128)
,p_process_type=>'NATIVE_IG_DML'
,p_process_name=>'SETTINGS'
,p_attribute_01=>'PLSQL_CODE'
,p_attribute_04=>wwv_flow_string.join(wwv_flow_t_varchar2(
'app_actions.set_setting (',
' in_action => :APEX$ROW_STATUS,',
' in_out_rowid => :RID,',
' in_name => :SETTING_ID,',
' in_context => :SETTING_CONTEXT,',
' in_group => :SETTING_GROUP,',
' in_value => :SETTING_VALUE,',
' in_description => :DESCRIPTION_,',
' in_is_numeric => :IS_NUMERIC,',
' in_is_date => :IS_DATE',
');',
''))
,p_attribute_05=>'Y'
,p_attribute_06=>'N'
,p_error_display_location=>'INLINE_IN_NOTIFICATION'
);
wwv_flow_api.create_page_process(
p_id=>wwv_flow_api.id(11855629070169147)
,p_process_sequence=>10
,p_process_point=>'BEFORE_HEADER'
,p_process_type=>'NATIVE_PLSQL'
,p_process_name=>'REBUILD_PACKAGE'
,p_process_sql_clob=>wwv_flow_string.join(wwv_flow_t_varchar2(
'app_actions.rebuild_settings();',
''))
,p_process_clob_language=>'PLSQL'
,p_error_display_location=>'INLINE_IN_NOTIFICATION'
,p_process_when=>'P970_REBUILD'
,p_process_when_type=>'ITEM_IS_NOT_NULL'
);
wwv_flow_api.create_page_process(
p_id=>wwv_flow_api.id(12110449828376303)
,p_process_sequence=>20
,p_process_point=>'BEFORE_HEADER'
,p_process_type=>'NATIVE_PLSQL'
,p_process_name=>'INIT_DEFAULTS'
,p_process_sql_clob=>':P970_REBUILD_TITLE := ''Rebuild '' || UPPER(app_actions.in_settings_package) || '' package with '' || UPPER(app_actions.in_settings_prefix) || ''* functions'';'
,p_process_clob_language=>'PLSQL'
,p_error_display_location=>'INLINE_IN_NOTIFICATION'
);
wwv_flow_api.component_end;
end;
/

View File

@ -121,6 +121,7 @@ prompt --install
@@application/pages/page_00920.sql
@@application/pages/page_00925.sql
@@application/pages/page_00940.sql
@@application/pages/page_00970.sql
@@application/pages/page_00990.sql
@@application/pages/page_09999.sql
@@application/end_environment.sql

View File

@ -29,6 +29,13 @@ CREATE OR REPLACE PACKAGE app_actions AS
*
*/
in_settings_package CONSTANT VARCHAR2(30) := 'SETT';
in_settings_prefix CONSTANT VARCHAR2(30) := 'get_';
--
-- Remove missing pages from NAVIGATION table
--
@ -130,5 +137,40 @@ CREATE OR REPLACE PACKAGE app_actions AS
in_c050 VARCHAR2 := NULL
);
--
-- Get value from Settings table
--
FUNCTION get_setting (
in_name settings.setting_id%TYPE,
in_context settings.setting_context%TYPE := NULL
)
RETURN settings.setting_value%TYPE;
--
-- Store/update settings
--
PROCEDURE set_setting (
in_action CHAR,
in_out_rowid IN OUT NOCOPY VARCHAR2,
in_name settings.setting_id%TYPE,
in_context settings.setting_context%TYPE := NULL,
in_group settings.setting_group%TYPE := NULL,
in_value settings.setting_value%TYPE := NULL,
in_description settings.description_%TYPE := NULL,
in_is_numeric settings.is_numeric%TYPE := NULL,
in_is_date settings.is_date%TYPE := NULL
);
--
-- Rebuild package containing function matching Settings table
--
PROCEDURE rebuild_settings;
END;
/

View File

@ -333,5 +333,193 @@ CREATE OR REPLACE PACKAGE BODY app_actions AS
app.raise_error();
END;
FUNCTION get_setting (
in_name settings.setting_id%TYPE,
in_context settings.setting_context%TYPE := NULL
)
RETURN settings.setting_value%TYPE
AS
out_value settings.setting_value%TYPE;
BEGIN
SELECT s.setting_value INTO out_value
FROM settings s
WHERE s.app_id = app.get_app_id()
AND s.setting_id = in_name
AND s.setting_context = in_context;
--
RETURN out_value;
EXCEPTION
WHEN NO_DATA_FOUND THEN
BEGIN
SELECT s.setting_value INTO out_value
FROM settings s
WHERE s.app_id = app.get_app_id()
AND s.setting_id = in_name
AND s.setting_context IS NULL;
--
RETURN out_value;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RETURN NULL;
END;
END;
PROCEDURE set_setting (
in_action CHAR,
in_out_rowid IN OUT NOCOPY VARCHAR2,
in_name settings.setting_id%TYPE,
in_context settings.setting_context%TYPE := NULL,
in_group settings.setting_group%TYPE := NULL,
in_value settings.setting_value%TYPE := NULL,
in_description settings.description_%TYPE := NULL,
in_is_numeric settings.is_numeric%TYPE := NULL,
in_is_date settings.is_date%TYPE := NULL
)
AS
rec settings%ROWTYPE;
BEGIN
app.log_module(app.get_json_object(
'in_action', in_action,
'in_rowid', in_out_rowid,
'in_name', in_name,
'in_context', in_context,
'in_value', in_value,
'in_is_numeric', in_is_numeric,
'in_is_date', in_is_date
));
--
rec.app_id := app.get_app_id();
rec.setting_id := RTRIM(RTRIM(UPPER(in_name)));
rec.setting_context := RTRIM(RTRIM(in_context));
rec.setting_group := in_group;
rec.setting_value := in_value;
rec.description_ := in_description;
rec.is_numeric := in_is_numeric;
rec.is_date := in_is_date;
rec.updated_by := app.get_user_id();
rec.updated_at := SYSDATE;
--
CASE in_action
WHEN 'D' THEN
DELETE FROM settings s
WHERE s.app_id = rec.app_id
AND ROWID = in_out_rowid;
--
WHEN 'U' THEN
UPDATE settings s
SET ROW = rec
WHERE s.app_id = rec.app_id
AND ROWID = in_out_rowid;
--
IF SQL%ROWCOUNT = 0 THEN
app.raise_error('SETTINGS_UPDATE_FAILED');
END IF;
--
ELSE
BEGIN
INSERT INTO settings VALUES rec
RETURNING ROWID INTO in_out_rowid;
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
app.raise_error('SETTINGS_EXISTS');
END;
END CASE;
EXCEPTION
WHEN app.app_exception THEN
RAISE;
WHEN OTHERS THEN
app.raise_error();
END;
PROCEDURE rebuild_settings AS
q VARCHAR2(32767);
BEGIN
app.log_module();
-- create specification
q := 'CREATE OR REPLACE PACKAGE ' || LOWER(in_settings_package) || ' AS' || CHR(10);
--
FOR c IN (
SELECT
s.setting_id,
MAX(s.is_numeric) AS is_numeric,
MAX(s.is_date) AS is_date
FROM settings s
WHERE s.app_id = app.get_app_id()
GROUP BY s.setting_id
ORDER BY s.setting_id
) LOOP
q := q || CHR(10);
q := q || ' FUNCTION ' || LOWER(in_settings_prefix) || LOWER(c.setting_id) || ' (' || 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); ---------- howto invalidate RESULT_CACHE ???
END LOOP;
--
q := q || CHR(10) || 'END;';
--
EXECUTE IMMEDIATE q;
-- create package body
q := 'CREATE OR REPLACE PACKAGE BODY ' || LOWER(in_settings_package) || ' AS' || CHR(10);
--
FOR c IN (
SELECT
s.setting_id,
MAX(s.is_numeric) AS is_numeric,
MAX(s.is_date) AS is_date
FROM settings s
WHERE s.app_id = app.get_app_id()
GROUP BY s.setting_id
ORDER BY s.setting_id
) LOOP
q := q || CHR(10);
q := q || ' FUNCTION ' || LOWER(in_settings_prefix) || LOWER(c.setting_id) || ' (' || 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 AS' || CHR(10);
q := q || ' BEGIN' || CHR(10);
q := q || ' RETURN ' || CASE
WHEN c.is_numeric = 'Y' THEN 'TO_NUMBER('
WHEN c.is_date = 'Y' THEN 'app.get_date('
END || 'app_actions.get_setting (' || CHR(10);
q := q || ' in_name => ''' || c.setting_id || ''',' || CHR(10);
q := q || ' in_context => in_context' || CHR(10);
q := q || ' ' || CASE
WHEN NVL(c.is_numeric, c.is_date) = 'Y' THEN ')'
END || ');' || CHR(10);
q := q || ' EXCEPTION' || CHR(10);
q := q || ' WHEN NO_DATA_FOUND THEN' || CHR(10);
q := q || ' RETURN NULL;' || CHR(10);
q := q || ' END;' || CHR(10);
END LOOP;
--
q := q || CHR(10) || 'END;';
--
DBMS_OUTPUT.PUT_LINE(q);
EXECUTE IMMEDIATE q;
--
recompile();
EXCEPTION
WHEN app.app_exception THEN
RAISE;
WHEN OTHERS THEN
app.raise_error();
END;
END;
/

43
tables/settings.sql Normal file
View File

@ -0,0 +1,43 @@
--DROP TABLE settings PURGE;
CREATE TABLE settings (
app_id NUMBER(4) CONSTRAINT nn_settings_app_id NOT NULL,
setting_id VARCHAR2(30) CONSTRAINT nn_settings_id NOT NULL,
--
setting_context VARCHAR2(64),
setting_group VARCHAR2(64),
setting_value VARCHAR2(256),
--
description_ VARCHAR2(1000),
--
is_numeric CHAR(1),
is_date CHAR(1),
--
updated_by VARCHAR2(30),
updated_at DATE,
--
CONSTRAINT uq_settings
UNIQUE (app_id, setting_id, setting_context),
--
CONSTRAINT fk_settings_app_id
FOREIGN KEY (app_id)
REFERENCES apps (app_id),
--
CONSTRAINT ch_settings_is_active
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)
)
STORAGE (BUFFER_POOL KEEP);
--
COMMENT ON TABLE settings IS 'List of settings shared through whole app';
--
COMMENT ON COLUMN settings.app_id IS 'Application ID';
COMMENT ON COLUMN settings.setting_id IS 'Setting ID';
COMMENT ON COLUMN settings.setting_context IS 'To allow multiple values depending on context value';
COMMENT ON COLUMN settings.setting_group IS 'Group just for grouping set in APEX';
COMMENT ON COLUMN settings.setting_value IS 'Value stored as string';
COMMENT ON COLUMN settings.description_ IS 'Description';
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';

91
triggers/settings__.sql Normal file
View File

@ -0,0 +1,91 @@
CREATE OR REPLACE TRIGGER settings__
FOR UPDATE OR INSERT OR DELETE ON settings
COMPOUND TRIGGER
in_table_name CONSTANT user_tables.table_name%TYPE := 'SETTINGS';
--
curr_log_id logs.log_id%TYPE;
curr_event_id log_events.log_id%TYPE;
curr_updated_by settings.updated_by%TYPE;
curr_updated_at settings.updated_at%TYPE;
--
rows_inserted PLS_INTEGER := 0;
rows_updated PLS_INTEGER := 0;
rows_deleted PLS_INTEGER := 0;
--
last_rowid ROWID;
BEFORE STATEMENT IS
BEGIN
curr_log_id := app.log_trigger(in_table_name);
curr_updated_by := app.get_user_id();
curr_updated_at := SYSDATE;
EXCEPTION
WHEN app.app_exception THEN
RAISE;
WHEN OTHERS THEN
app.raise_error('TRIGGER_FAILED', in_table_name);
END BEFORE STATEMENT;
BEFORE EACH ROW IS
BEGIN
IF NOT DELETING THEN
:NEW.updated_by := curr_updated_by;
:NEW.updated_at := curr_updated_at;
END IF;
--
curr_event_id := app.log_event('SETTINGS_CHANGED');
EXCEPTION
WHEN app.app_exception THEN
RAISE;
WHEN OTHERS THEN
app.raise_error('TRIGGER_FAILED', in_table_name);
END BEFORE EACH ROW;
AFTER EACH ROW IS
new_json VARCHAR2(32767);
old_json VARCHAR2(32767);
BEGIN
IF INSERTING THEN
rows_inserted := rows_inserted + 1;
last_rowid := :NEW.ROWID;
ELSIF UPDATING THEN
rows_updated := rows_updated + 1;
last_rowid := :OLD.ROWID;
ELSIF DELETING THEN
rows_deleted := rows_deleted + 1;
last_rowid := :OLD.ROWID;
END IF;
EXCEPTION
WHEN app.app_exception THEN
RAISE;
WHEN OTHERS THEN
app.raise_error('TRIGGER_FAILED', in_table_name);
END AFTER EACH ROW;
AFTER STATEMENT IS
BEGIN
app.log_success (
in_log_id => curr_log_id,
in_rows_inserted => rows_inserted,
in_rows_updated => rows_updated,
in_rows_deleted => rows_deleted,
in_last_rowid => last_rowid
);
EXCEPTION
WHEN app.app_exception THEN
RAISE;
WHEN OTHERS THEN
app.raise_error('TRIGGER_FAILED', in_table_name);
END AFTER STATEMENT;
END;
/

View File

@ -0,0 +1,62 @@
CREATE OR REPLACE VIEW settings_overview AS
WITH x AS (
SELECT
UPPER('SETT') AS package_name, -- app_actions spec
UPPER('GET_') AS prefix
FROM DUAL
),
p AS (
SELECT p.procedure_name, a.data_type
FROM user_procedures p
JOIN user_arguments a
ON a.package_name = p.object_name
AND a.object_name = p.procedure_name
AND a.position = 0
JOIN x
ON x.package_name = p.object_name
),
r AS (
SELECT
r.procedure_name,
COUNT(*) AS references
FROM (
SELECT REPLACE(RTRIM(REGEXP_SUBSTR(UPPER(s.text), x.package_name || '\.' || REPLACE(x.prefix, '_', '\_') || '[^(]*')), x.package_name || '.', '') AS procedure_name
FROM user_source s
CROSS JOIN x
WHERE UPPER(s.text) LIKE '%' || x.package_name || '.' || x.prefix || '%'
) r
GROUP BY r.procedure_name
)
SELECT
s.ROWID AS rid,
s.setting_id,
s.setting_context,
s.setting_group,
s.setting_value,
s.description_,
s.is_numeric,
s.is_date,
--
p.procedure_name,
p.data_type,
--
CASE
WHEN (p.procedure_name IS NULL
OR (s.is_numeric = 'Y' AND p.data_type != 'NUMBER')
OR (s.is_date = 'Y' AND p.data_type != 'DATE')
)
THEN app.get_icon('fa-warning', 'Rebuild needed')
END AS action,
--
r.references,
--
s.updated_by,
s.updated_at
FROM settings s
CROSS JOIN x
LEFT JOIN p
ON p.procedure_name = x.prefix || s.setting_id
LEFT JOIN r
ON r.procedure_name = x.prefix || s.setting_id
WHERE s.app_id = app.get_app_id();