APEX and AJAX – Where to Start June 2010 Tim St. Hilaire.

38
APEX and AJAX – Where to Start June 2010 Tim St. Hilaire

Transcript of APEX and AJAX – Where to Start June 2010 Tim St. Hilaire.

Page 1: APEX and AJAX – Where to Start June 2010 Tim St. Hilaire.

APEX and AJAX – Where to StartJune 2010Tim St. Hilaire

Page 2: APEX and AJAX – Where to Start June 2010 Tim St. Hilaire.

Story – Why I Love ODTUG

Page 3: APEX and AJAX – Where to Start June 2010 Tim St. Hilaire.

Introduction

We will walk through a series of examples that achieve the basic components of dynamic actions within APEX

• Partial Page Refresh reports• Calling On Demand Processes• Setting Session Variables with AJAX• APEX 4.0 options• Consuming Pages• Consuming Partial Pages• Debugging Notes

Page 4: APEX and AJAX – Where to Start June 2010 Tim St. Hilaire.

Note Taking

Page 5: APEX and AJAX – Where to Start June 2010 Tim St. Hilaire.

Reference

Page 6: APEX and AJAX – Where to Start June 2010 Tim St. Hilaire.

Report Refresh – Current Behavior

• Every standard button press will submit the entire page• When a page is submitted, it re-draws the entire content

• NOTE – As APEX continues to improve, other components employ sophisticated partial page and dynamic refresh capabilities. Example – Pagination in Partial Page Refresh template reports and Interactive reports

Page 7: APEX and AJAX – Where to Start June 2010 Tim St. Hilaire.

Demonstration

Page 8: APEX and AJAX – Where to Start June 2010 Tim St. Hilaire.

Report Refresh – Basic Refresh

• Using a feature that is provided with APEX to support partial page refresh capabilities for pagination.

• The example shows how a java script call can re-query a report region.• Two important pieces are required

1. Definition of the Refresh Capability

2. Initializing an Instance of the Object

Definition

Page 9: APEX and AJAX – Where to Start June 2010 Tim St. Hilaire.

Report Refresh – Basic Refresh

• Note: The initialize is easiest to place in the region header

Why?• The Template Substitution Variable #REGION_ID# will only work within

the APEX region you are in.

Initialize the Object

Calling the Refresh

Page 10: APEX and AJAX – Where to Start June 2010 Tim St. Hilaire.

Report Refresh – Basic Refresh

• Issue: The report is refreshed, but the SEARCH box is not used in the report

Page 11: APEX and AJAX – Where to Start June 2010 Tim St. Hilaire.

Demonstration

Page 12: APEX and AJAX – Where to Start June 2010 Tim St. Hilaire.

Report Refresh – Session Variable

• Understanding the values of session variables is very important with AJAX inside of APEX. The frameworks session variable construct is very powerful and flexible.

• Using an ON DEMAND process as a simple request to allow the session variable to be set

Page 13: APEX and AJAX – Where to Start June 2010 Tim St. Hilaire.

Note on JS Sources

• The sources for this code is available on the APEX installation media

• Note: a_report actually calls htmldb_Get

• APEX 4.0 file located: apex\images\javascript\uncompressed\apex_4_0.js

• APEX 3.2.1 – the $a_report and the htmldb_get function are in two filesapex\images\javascript\uncompressed\apex_get_3_1.jsapex\images\javascript\uncompressed\apex_3_1.js

Page 14: APEX and AJAX – Where to Start June 2010 Tim St. Hilaire.

On Demand Processes – Basic Example

• An On Demand Process are officially located under Application Processes and can be called as part of page processing, but are defined at the APPLICATION level as a Shared Component

Page 15: APEX and AJAX – Where to Start June 2010 Tim St. Hilaire.

On Demand Processes – APEX 4.0 Note

• In APEX 4.0 – On Demand Processes can be defined at the PAGE level

• This allows encapsulation of code on a page• This MAY also require duplication depending on application design• To Avoid the need for duplication of business logic

• Use Packages

• Continue to use Application Level Processes

• Use descriptive names wherever possible• 255 characters…..

Page 16: APEX and AJAX – Where to Start June 2010 Tim St. Hilaire.

On Demand Processes – Basic Example

• The On Demand Process is an easy gateway for the PL/SQL developer to access their PL/SQL code

Page 17: APEX and AJAX – Where to Start June 2010 Tim St. Hilaire.

Demonstration of On-Demand Usage

Page 18: APEX and AJAX – Where to Start June 2010 Tim St. Hilaire.

Page, Application, or Global Session Variables?

You may have noticed, in the last example, that the On-Demand Process used an undeclared type of variable.

• In PL/SQL wwv_flow.g_x01 through wwv_flow.g_x10

• In JavaScript Parameter name x01 through x10

• Handy, but use carefully – generic placeholders with complex logic can get confusing

• Page or Application items serve the same purpose, but need to be declared. A little extra time up front, but clarity in where and how used.

• Compare to:

Page 19: APEX and AJAX – Where to Start June 2010 Tim St. Hilaire.

On Demand Processes – Naming

• As part of the design activity, keep in mind that you may have multiple On Demand Processes in an application. Take some time to name them in a way that is easy to understand and manage as your application grows.

• Example Process name = AJAX_MULTI_INSERT• Example Process name = AJAX_MULTI_DELETE

How could these names be improved?

Page 20: APEX and AJAX – Where to Start June 2010 Tim St. Hilaire.

On Demand Processes

The flow used in the example shown is as follows:

• The JavaScript call initiates the On Demand Process call

• The On Demand process – contains the logic required to gather the session parameters and pass them to the PL/SQL layer

• The PL/SQL layer contains the business logic to interact with the table data

• After the On Demand process is completed, the previously shown feature to refresh the report in initiated by the JavaScript

JavaScript

On Demand Process

PL/SQL

Tables

AJAX – Report Refresh

Page 21: APEX and AJAX – Where to Start June 2010 Tim St. Hilaire.

Dynamic Actions – 4.0

Using similar logic, the same can be accomplished using Dynamic Actions

• First - Bind the Dynamic Action to an event

• Second – Define the steps to take place in Action Sets• Set Value – for PL/SQL to act on a

parameter value, it needs to be in session state

• Execute PL/SQL – Using the newly set value in session state

• Refresh the report

Page 22: APEX and AJAX – Where to Start June 2010 Tim St. Hilaire.

APEX 4.0 – Dynamic Actions

Page 23: APEX and AJAX – Where to Start June 2010 Tim St. Hilaire.

Dynamic Actions – 4.0

Action Binding - Preparations

In order to get the event to BIND to each row, a jQuery selector will be used. In order to easily identify the rows, a CLASS is applied to the LINK attribute. (Thanks Dimitri Gielis)

An aditional attribute (my_attribute) is also added to the link. This will be used for easy and consistent retrieval of the value needed for PL/SQL to act on

Page 24: APEX and AJAX – Where to Start June 2010 Tim St. Hilaire.

Dynamic Actions – 4.0

Action Binding

The binding of the Dynamic Action is using the Selection Type of jQuery Selector

This allows the use of the simple dot syntax to reference all DOM elements with the class “bind_to_me_for_delete”

Page 25: APEX and AJAX – Where to Start June 2010 Tim St. Hilaire.

Dynamic Actions – 4.0

Action Binding

Special Note – because the region for “removals” is dynamically refreshed per the design, the data bindings to the “removal” Dynamic Action needs to be classified as LIVE. The default of BIND will cause the bindings to be lost when the region is refreshed the first time.

Page 26: APEX and AJAX – Where to Start June 2010 Tim St. Hilaire.

Dynamic Actions – 4.0

Action Steps

Set Value

A small bit of JavaScript is used to retrieve the attribute value we set in the report. This attribute is retrieved, then set to the session variable we defined to allow the PL/SQL to act on the value.

Note: This is NOT in session state, only on the client.

Page 27: APEX and AJAX – Where to Start June 2010 Tim St. Hilaire.

Dynamic Actions – 4.0

JavaScripting Note

The APEX Framework places wrappers on the Dynamic Action bind objects

This provides additional details and functionality for use.

This enables the code: $(this.triggeringElement).attr('my_attribute');

(Thank you Patrick Wolf)

Page 28: APEX and AJAX – Where to Start June 2010 Tim St. Hilaire.

Dynamic Actions – 4.0

Action Steps

Execute PL/SQL

Like the on demand processes at the application level, PL/SQL packages can be called using session parameters.

The “Items to Submit” sets the session state on the server prior to executing the PL/SQL code. (as explicitly done in the previous example)

Page 29: APEX and AJAX – Where to Start June 2010 Tim St. Hilaire.

Debug Notes

On Demand processes are not the easiest thing to debug…

Using the NET feature of Firebug makes the job much easier:

Page 30: APEX and AJAX – Where to Start June 2010 Tim St. Hilaire.

AJAX HTML Injection

• No – Not Hacking• Modification of the DOM to change the user interface is the primary goal• It is necessary to understand where you desire the HTML injected into

I want my HTML to go here

Page 31: APEX and AJAX – Where to Start June 2010 Tim St. Hilaire.

Demonstration

Page 32: APEX and AJAX – Where to Start June 2010 Tim St. Hilaire.

Consuming APEX Pages

• Using the HTMLDB_GET, it is possible to consume entire APEX pages.

• Although you can, doesn’t mean you should…. There are issues with branching and processing using this method

• Additional features inside the HTMLDB_GET package allows the partial retrieval of pages

Page 33: APEX and AJAX – Where to Start June 2010 Tim St. Hilaire.

Consuming APEX Pages (partial)

Two settings helped make this example work

1. Custom Page Template

2. Option on the .get method

Page 34: APEX and AJAX – Where to Start June 2010 Tim St. Hilaire.

On Demand Processes – Design Notes

• As with any programming, it is easy to get caught up in the multiple places to put variables and code• Where is JavaScript code placed?

• Per Page in the Header• Page 0• Region Source with no template• Region Header• Region Footer

• Where is business Logic?• PL/SQL Packages• Page Processes• On Demand Processes

• Where is UI Logic?

• Come up with a practice that works for you / your organization• Document it• Communicate it• Follow it

Page 35: APEX and AJAX – Where to Start June 2010 Tim St. Hilaire.

Supportability Note

Please Note –JavaScript outlined here is available – but not openly supported

http://download.oracle.com/docs/cd/E17556_01/doc/apirefs.40/e15519/toc.htm

Page 36: APEX and AJAX – Where to Start June 2010 Tim St. Hilaire.

Questions?

Page 37: APEX and AJAX – Where to Start June 2010 Tim St. Hilaire.

References

Many thanks to all those that have come before me, and for those that take the time to help others grow and improve their skills by sharing their time an knowledge.

APEX• http://apex.oracle.com – Forum, Docs, Hosted Workspace• http://apex.oracle.com/pls/otn/f?p=38462 - Carl Backstrom JSON & AJAX• http://apex.oracle.com/pls/otn/f?p=11933 – Carl Backstrom Variety Examples • http://apex.oracle.com/pls/otn/f?p=31517 – Denes Kubicek – Everything!

Other Notes• Syntax Highlighter

• http://code.google.com/p/syntaxhighlighter/

AuthorUpdated and corrected presentation will be available on my blog http://wphilltech.comhttp://apex.oracle.com/pls/otn/f?p=226 – This example application

Tim St. Hilaire - [email protected]

Page 38: APEX and AJAX – Where to Start June 2010 Tim St. Hilaire.

Disclaimer• Marks and Brands are the property of their respective owners. Usage is for discussion

purposes only. No ownership assumed or implied.• The comments and opinions expressed here are sole responsibility of the author and not

of his employer or any other party• No trees were harmed during the creation of this presentation. However, a great number

of electrons were terribly inconvenienced.