Differences between APEX 20.2 and 21.1

Oracle APEX 21.1.0 was released on May 12, 2021.
Here is the shortcut link to the download: apex.oracle.com/download/ and don’t forget to apply the Patch Set Bundle for Oracle APEX 21.1

As you already know from my previous comparison posts (e.g. this one), I always start by looking at the changes on APEX View’s and API’s. This will reveal all the important fundamental changes.
Of course we won’t catch UI changes this way, but most features are based on Metadata/View/API changes, so this approach will give us a good overview of changes.

This will most likely be the last detailed blog post of version changes. I’m working on a new tool to list and visualize changes between APEX versions, which will be made public as a free service for everyone. Stay tuned…

General Changes

Several Views have been enhanced with a “comments” column for developer comments, helping us to document our work better.

The Data-Generator (Blueprint) feature already snuck into this release, although it isn’t documented, yet, and will be made public with APEX 21.2 (according to the APEX SOD).

Data Loading has been overhauled / replaced, thus we have some changed/new views and APIs.

And, of course, the fabulous map region was released with APEX 21.1.


Views

APEX_APPLICATIONS
+ created_by – APEX developer who created the application
+ created_on – Date of creation
+ referrer_policy – Determines the referrer-policy HTTP response header

APEX_APPLICATION_ITEMS
+ escape_on_http_output – If Yes values will be escaped when they are used in substitutions.

APEX_APPLICATION_PAGE_BUTTONS
+ grid_row_css_classes – Additional CSS classes which are substituted if the grid row template contains the substitution string #CSS_CLASSES#

APEX_APPLICATION_PAGE_DA_ACTS
+ client_condition_type – Identifies the client-side condition that can be used to control when the Action fires
+ client_condition_type_code – Internal code of CLIENT_CONDITION_TYPE
+ client_condition_element_type – Identifies the type of element used for the client-side Condition
+ client_condition_element – Identifies the element that will be used for the client-side Condition
+ client_condition_expression – Identifies the client-side condition expression used to control when the Action fires
+ server_condition_type – Identifies a server-side condition that must be met in order for this Action of a Dynamic Action to be processed
+ server_condition_type_code – Internal code of SERVER_CONDITION_TYPE
+ server_condition_expression1 – Specifies an expression based on the specific server condition type selected.
+ server_condition_expression2 – Specifies an expression based on the specific server condition type selected.
+ build_option – Dynamic Action will be processed if the Build Option is enabled
+ build_option_id – Foreign Key
+ authorization_scheme – An authorization scheme must evaluate to TRUE in order for this Action of a Dynamic Action to be processed
+ authorization_scheme_id – Foreign Key

removed: APEX_APPLICATION_PAGE_FLASH5

removed: APEX_APPLICATION_PAGE_FLASH5_S

APEX_APPLICATION_PAGE_IR_COL
+ rich_text_format – Identifies the format of a Rich Text column.

APEX_APPLICATION_PAGE_IR
+ lazy_loading – Identifies whether to defer getting initial set of data from the server until needed

APEX_APPLICATION_PAGE_ITEMS
+ grid_row_css_classes – Additional CSS classes which are substituted if the grid row template contains the substitution string #CSS_CLASSES#

APEX_APPLICATION_PAGE_REGIONS
+ grid_row_css_classes – Additional CSS classes which are substituted if the grid row template contains the substitution string #CSS_CLASSES#

APEX_APPLICATION_THEME_STYLES
+ css_classes – Identifies CSS classes to be applied to all pages

new: APEX_APPL_DATA_LOADS – Identifies Application Data Load definitions

APEX_APPL_DATA_PROFILES
+ csv_separator – The column delimiter character
+ csv_enclosed – The column enclosed by character
+ default_xlsx_sheet_name – The name of the XLSX worksheet to parse by default
+ skip_rows – The number of rows to skip from the first row when parsing
+ has_header_row – Indicates if the data contains column names in the first row
+ comments – Developer comments

APEX_APPL_DATA_PROFILE_COLS
+ column_type – Identifies the column type
+ decimal_char – Decimal character for NUMBER type
+ group_char – Group separator for NUMBER type
+ column_selector_type – Identifies if column expression is based on name or sequence for CSV and XLSX data format
+ transform_type – Identifies the type of column transformation rule
+ expression1 – Specifies an expression 1 based on the specific transformation type selected
+ expression2 – Specifies an expression 2 based on the specific transformation type selected
+ lookup_owner – Identifies the name of the schema to which the lookup table belongs to
+ lookup_table – Identifies the name of the table name for which the lookup will be defined
+ lookup_column1 – Identifies the first column name to be used to retrieve the return column from the lookup table
+ lookup_value1 – Identifies the data profile column that matches the first lookup table column value
+ lookup_column2 – Identifies the second column name to be used to retrieve the return column from the lookup table
+ lookup_value2 – Identifies the data profile column that matches the second lookup table column value
+ lookup_column3 – Identifies the third column name to be used to retrieve the return column from the lookup table
+ lookup_value3 – Identifies the data profile column that matches the third lookup table column value
+ lookup_key_column – Identifies the name of the return column in the lookup table
+ lookup_where_clause – Identifies the lookup where clause
+ comments – Developer comments

APEX_APPL_PAGE_FACETS
+ is_toggleable – Identifies whether end-users can toggle the visibility of the facet
+ is_initial_toggled – Identifies whether the facet is displayed by default

APEX_APPL_PAGE_ITEM_GROUPS
+ show_chart – Identifies whether the facet values can be shown as a chart.
+ initial_chart – Identifies whether the chart displaying facet values is initially shown.
+ is_toggleable – Identifies whether end-users can toggle the visibility of the facet group
+ is_initial_toggled – Identifies whether the facet group is displayed by default

new: APEX_APPL_PAGE_MAPS

new: APEX_APPL_PAGE_MAP_LAYERS

APEX_APPL_WEB_SRC_OPERATIONS
+ force_error_for_http_404 – Whether to always raise an error if the REST API responds with HTTP-404
+ comments – Developer comments

APEX_APPL_WEB_SRC_PARAMETERS
+ array_separator_char – Character to separate values when IS_ARRAY is enabled.
+ comments – Developer comments

new views (36!!) for APEX 21.2 (!) feature for Blueprints: APEX_DG_*

removed: APEX_INST_RESTADM_CLIENTS

removed: APEX_INST_RESTADM_CLIENT_ROLES

removed 10 views for deprecated Forms/APEX Migrations: APEX_MIGRATION_*

APEX_PATCHES
+ images_version – Identifies the version of the images for the patch

removed 6 views for deprecated Packaged Applications: APEX_PKG_*

APEX_REST_SOURCE_SYNC_LOG
+ synchronization_run_id – Internal ID of this synchronization run; used to group multiple synchronization steps

APEX_WORKSPACES
– allow_packaged_app_ins_yn – Controls availability of identified component


PL/SQL API’s

APEX_APPLICATION

  • removed: Apps_Only_Workspace
  • Js_Messages
    • remove p_operation

APEX_APP_SETTING

  • Get_Value / Set_Value
    • + p_raise_error

APEX_DATA_LOAD

  • removed: Validate_Plsql_Expressions

new: APEX_DATA_LOADING – Implementation for the new data loading process type

APEX_DATA_PARSER

  • new: Assert_File_Type

new: APEX_DG_DATA_GEN – not, yet, public feature for data generation (Enable intelligent generation of sample data) -> wait for APEX 21.2

new: APEX_DG_OUTPUT not, yet, public feature for data generation (Enable intelligent generation of sample data) -> wait for APEX 21.2

APEX_EXEC

  • new function overloads for add_filter, add_parameter, set_value
  • new: Get_Sdo_Geometry
  • new: Set_Current_Row

APEX_JSON

  • new: Get_Sdo_Geometry
  • new function overloads for Stringify and Write/Write_Raw

removed: APEX_MIG_PROJECTS_UPDATE

new: APEX_MARKDOWN – convert Markdown to HTML directly in the database

removed: APEX_PKG_APP_INSTALL

APEX_SPATIAL

  • new: Spatial_Is_Available

APEX_STRING

  • new: Plist_Get_Key

APEX_UTIL

  • Count_Click
    • + p_referrer_policy
  • new: Prn – to output a CLOB

WWV_FLOW_UTILITIES

  • new: Striphtml_Clob

The Oracle APEX Reverse Proxy Guide using NGINX

Just recently I talked about changing the /ords URL to something else, now I want to show another way to manipulate the URL.

I always disliked deploying multiple ORDS instances, just to provide different paths to the same DB. This happened out of legacy or SEO purposes so far.

Now let’s set up a simple reverse proxy to achieve any URL structure you want for your APEX server.

Continue reading

Deploy ORDS on tomcat in a subdirectory

Usually ORDS is deployed on Tomcat simply as /ords, right?

What do you do, if you want a different name than ords, let’s say you would like to see “bruce” in the URL? Simple solution: just rename ords.war to bruce.war before deploying to Tomcat.

But what if you want to have “mod/plsql“, as in http://myserver.tld:8080/mod/plsql ?

Continue reading

New APEX conference: APEX Alpe Adria

During the recent SIOUG and HrOUG conferences past October, my friends Dario Bilić, Aljaž Mali and Dietmar Gabauer had a great Idea: why not establish a proper APEX conference for our neighborly region?

As soon as Dietmar returned to our office after the conferences, we set up a meeting with Dario and Aljaž and instantly agreed that we want to do this.

Our goal is to have a first class APEX conference, with top speakers from abroad and from the neighborhood. All that for a minimum cost. This conference should be accessible for every APEX fan in the region, even if they are not sponsored by their respective bosses and pay everything out of their own pocket.

There it is: April 20, 2018, will feature the first APEX Alpe Adria conference in Graz, Austria.

We picked Graz as first location as it is fairly easy to reach from a number of surrounding countries. So no matter if you want to come by plane, train, bus, or car, everyone will be able to get a connection.

Call for Papers is still open until January 9th, but we already pre-confirmed two top speakers: Patrick Wolf and Joel Kallman from the Oracle APEX Development Team.

I want to encourage all APEX speakers from anywhere in or around the Adriatic region to submit an abstract to this conference. Together we can provide a fantastic lineup and and interesting program.
We would like to see submissions from Italy, Slovenia, Croatia, Hungary, Serbia, Austria, Bosnia, Switzerland, and everyone else who wants to visit a beautiful town and be part of the best APEX conference in the region.

Lots of fun, a great community and new friends are guaranteed.

Did I mention the low cost of just EUR 30,- for the Early Bird tickets? Go and get your ticket right now, there is a limited number available.

 

Oracle APEX Events in Vienna/Austria

In my Opinion Vienna (Austria) is growing into one of the most important Places for APEX Enthusiasts to be. Not only are 2 Developers of the international APEX Development Team situated in Vienna (Patrick and Chris), but also is there a growing number of Events, Workshops and APEX Users (as Developer or as End User) in the local APEX Community. Continue reading

Follow Up to APEX for Mobile Development Webinar

Two weeks ago my Webinar on APEX for Mobile Phones took place with many interested attendees. If you missed the webinar, you can view the recording over here.

With this post i give you a listing of links to all ressources mentioned in the webinar, as well as some F.A.Q. regarding mobile on APEX.

There will also be information on a 1-day training on mobile Applications with Oracle APEX, given by me in Oct 2011.

Continue reading