Skip to main content

Live demo

You can play with the plug-in without installing it using the sample application available online.

The sample application enables you to learn about the plug-in capabilities, Oracle APEX APEX integration, and simple examples of how to use the United Codes Interactive JET Charts Pro plug-in.

The plug-in sample application can be downloaded and installed in your APEX scheme for free using the Trial License.

The plug-in sample application is one way to install the plug-in. Learn more in the section Getting Started \ Installation.

image-20230303135652378

Sample App

Interactive JET Charts Pro is delivered with a sample application which describes all of the plug-in’s features with example implementations. Install the application on APEX 19.2 (or above) and learn about the plug-in capabilities on live examples.

Supporting Objects

The sample application uses additional objects such as a table, UC_JET_CHANGES, to store the end-users chart customizations and the UC_JET_CHART_API package provides 3 procedures to handle the table and the plug-in package.

Installation scripts

While installing the application you will be asked to install supporting objects. Supporting objects are required to successfully run the sample application. See the table below to learn what will be installed after installing supporting objects.

Script nameDescription
Create table UC_JET_CHANGESThe script creates table UC_JET_CHANGES which is used by the sample application to store the end-user chart settings as chart reports, table sequence, and the table trigger.
Create package UC_JET_CHART_APIThe script creates package UC_JET_CHART_API which is used by the sample application plug-in to save, delete and fetch chart reports. The sample application plug-in uses procedures from this package.
Create package UC_INTERACTIVE_JET_CHARTSThe script creates the plug-in package UC_INTERACTIVE_JET_CHARTS.

Package UC_JET_CHART_API

create or replace package body "UC_JET_CHART_API" is 
/*
Sample application is available for all users without loging into application.
Because of that APP_SESSION is used to identify the current user.

Important notes:
- use static id for charts if the end-user charts will be transferred between different environments.
- you can use APP_PAGE_ID to distinguish charts with same static id

*/

g_app_session varchar2(100) default v('APP_SESSION');

procedure saveReport(
pi_user IN VARCHAR2,
pi_region_id IN VARCHAR2,
pi_report_name IN VARCHAR2,
pi_keys IN VARCHAR2,
pi_values IN VARCHAR2,
po_message OUT VARCHAR2,
po_status OUT BOOLEAN
)
is
v_keys WWV_FLOW_GLOBAL.VC_ARR2;
v_values WWV_FLOW_GLOBAL.VC_ARR2;

v_out_message varchar2(32767);
v_out_status boolean := false;
begin
apex_debug.info( '%s Execute "saveReport" ', '###' );
apex_debug.info( '%s ... (in) user = "%s" ', '###', pi_user );
apex_debug.info( '%s ... (in) region_id = "%s" ', '###', pi_region_id );
apex_debug.info( '%s ... (in) report_name = "%s" ', '###', pi_report_name );
apex_debug.info( '%s ... (in) keys = "%s" ', '###', pi_keys );
apex_debug.info( '%s ... (in) values = "%s" ', '###', pi_values );

v_keys := apex_string.string_to_table( pi_keys );
v_values := apex_string.string_to_table( pi_values );

--delete all for current chart
delete from
UC_JET_CHANGES
where
username = g_app_session
and REPORT_NAME = pi_report_name
and region_id = pi_region_id
;

--insert new settings
for i in 1..v_keys.count LOOP

insert into UC_JET_CHANGES(
USERNAME,
REGION_ID,
REPORT_NAME,
PROPERTY_NAME,
PROPERTY_VALUE
) values(
g_app_session,
pi_region_id,
pi_report_name,
v_keys(i),
v_values(i)
);

end loop;

v_out_status := true;
v_out_message := 'Report "'||pi_report_name||'" saved.';

apex_debug.info( '%s ... (out) status = "%s" ', '###', apex_debug.tochar( v_out_status ) );
apex_debug.info( '%s ... (out) message = "%s" ', '###', v_out_message );

po_message := v_out_message;
po_status := v_out_status;

apex_debug.info( '%s End of "saveReport" ', '###');
end saveReport;

procedure deleteReport(
pi_user IN VARCHAR2,
pi_region_id IN VARCHAR2,
pi_report_name IN VARCHAR2,
po_message OUT VARCHAR2,
po_status OUT BOOLEAN
)
is
v_out_message varchar2(32767);
v_out_status boolean := false;
begin

apex_debug.info( '%s Execute "deleteReport" ', '###' );
apex_debug.info( '%s ... (in) user = "%s" ', '###', pi_user );
apex_debug.info( '%s ... (in) region_id = "%s" ', '###', pi_region_id );
apex_debug.info( '%s ... (in) report_name = "%s" ', '###', pi_report_name );

--delete all for current chart
delete from
UC_JET_CHANGES
where
username = g_app_session
and REPORT_NAME = pi_report_name
and region_id = pi_region_id
;

v_out_message := 'Report "'||pi_report_name||'" deleted.';
v_out_status := true;

apex_debug.info( '%s ... (out) status = "%s" ', '###', apex_debug.tochar( v_out_status ) );
apex_debug.info( '%s ... (out) message = "%s" ', '###', v_out_message );

po_message := v_out_message;
po_status := v_out_status;

apex_debug.info( '%s End of "deleteReport" ', '###');
end deleteReport;

procedure getReports(
pi_user IN VARCHAR2,
pi_region_id IN VARCHAR2,
po_reports OUT VARCHAR2,
po_keys OUT VARCHAR2,
po_values OUT VARCHAR2
)
is
v_keys WWV_FLOW_GLOBAL.VC_ARR2;
v_values WWV_FLOW_GLOBAL.VC_ARR2;
v_reports WWV_FLOW_GLOBAL.VC_ARR2;
begin

apex_debug.info( '%s Execute "getReports" ', '###' );
apex_debug.info( '%s ... (in) user = "%s" ', '###', pi_user );
apex_debug.info( '%s ... (in) region_id = "%s" ', '###', pi_region_id );

select
REPORT_NAME,
PROPERTY_NAME,
PROPERTY_VALUE
BULK COLLECT INTO
v_reports,
v_keys,
v_values
from
UC_JET_CHANGES
where
1 = 1
and (
username = g_app_session
or username = 'ADMIN_DEFINED'
)
and region_id = pi_region_id
;

apex_debug.info( '%s ... Rows cnt = "%s" ', '###', v_keys.count );
apex_debug.info( '%s ...... reports cnt = "%s" ', '###', v_reports.count );
apex_debug.info( '%s ...... keys cnt = "%s" ', '###', v_keys.count );
apex_debug.info( '%s ...... values cnt = "%s" ', '###', v_values.count );

po_reports := apex_string.table_to_string( v_reports , ':' );
po_keys := apex_string.table_to_string( v_keys , ':' );
po_values := apex_string.table_to_string( v_values , ':' );

apex_debug.info( '%s ...... (out) reports = "%s" ', '###', po_reports );
apex_debug.info( '%s ...... (out) keys = "%s" ', '###', po_keys );
apex_debug.info( '%s ...... (out) values = "%s" ', '###', po_values );

apex_debug.info( '%s End of "getReports" ', '###');
end getReports;

end "UC_JET_CHART_API";

Pages

Home

The home page describes the plug-in in general and highlights the plug-in features at a glance.

Overview

The overview page describes the plug-in functionalities and presents all the Oracle JET chart attributes exposed via the plug-in interface in the context of supported chart types.

Translations

The translations page describes all translatable Text Message codes that are used to fully translate the plug-in interface. Additionally, the page describes how Oracle APEX debug mode can be used to simplify the translation process by clearly showing the text message code is used.

Live Demo

The live demo page implements the plug-in and describes the plug-in related topics such as exposed events and saving chart reports.