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.

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 name | Description | 
|---|---|
| Create table UC_JET_CHANGES | The script creates table UC_JET_CHANGESwhich 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_API | The script creates package UC_JET_CHART_APIwhich 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_CHARTS | The 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.


