Hooked on Classic (Reports): learn tips & techniques to make them sing
-
Upload
jorge-rimblas -
Category
Software
-
view
122 -
download
1
Transcript of Hooked on Classic (Reports): learn tips & techniques to make them sing
Jorge RimblasSenior APEX Consultant
@rimblasrimblas.com/blog
Oracle Database since 1995APEX since it was HTMLDB in 2004Kscope16 APEX Track Content Leadjrimblas in OTN Forums
Co-author of"Expert Oracle Application Express, 2nd Edition"with "Themes & Templates" chapter
1 . 2
North America’s largest APEX consulting firm
12 years working with Oracle APEX
80 employees and growing
Committed to APEX innovation
Our services: application development,
coaching, consulting, EBS extensions, and
Forms migration
Learn more at insum.ca
1 . 3
AgendaWhy?Template TypesGeneric Column Templates
Analytic FunctionsLimitationsResources
Named Column Templates
2
The "Manual" Approachhtp.p('<ul>');for t in ( select id , todo , decode(completed_by , null, '' , 'check' || '-') checked from app_todos)loop htp.p('<li>' || t.todo || ' <i class="fa fa-' || t.checked || 'square-o">' || '</i>' || '</li>'); end loop;htp.p('</ul>');
3 . 1
Every column looks the same <td class="t-Report-cell" #ALIGNMENT# headers="#COLUMN_HEADER_NAME#"> #COLUMN_VALUE#</td>
5 . 3
Column Template ConditionsFour Column TemplatesCondition for each templateCondition types: PL/SQL Expression, even or oddrows
5 . 4
Step by step detailsrimblas.com/blog/2014/05/using-conditions-with-column-templates/
5 . 9
SQL Named Columnsselect PRODUCT_ID , PRODUCT_NAME , PRODUCT_DESCRIPTION , CATEGORY , PRODUCT_AVAIL , LIST_PRICE from PRODUCTS
#PRODUCT_ID##PRODUCT_NAME##PRODUCT_DESCRIPTION##CATEGORY##PRODUCT_AVAIL##LIST_PRICE#
#COLUMN_VALUE#
Generic Columns
6 . 2
SQL Named Columnsselect PRODUCT_ID , PRODUCT_NAME , PRODUCT_DESCRIPTION , CATEGORY , PRODUCT_AVAIL , LIST_PRICE from PRODUCTS
#1##2##3##4##5##6#
Positional Columns
6 . 3
Simple List<ul> <li>Orange Juice <i class="fa fa-check-square-o"></i></li> <li>Milk <i class="fa fa-check-square-o"></i></li> <li>Eggs <i class="fa fa-square-o"></i></li> <li>Bread <i class="fa fa-square-o"></i></li> <li>Cornflakes <i class="fa fa-square-o"></i></li></ul>
<li>#TODO# <i class="fa fa-#CHECKED#square-o"></i></li>
<ul>
</ul>
Before Rows
After Rows
6 . 5
Simple List <li>#TODO# <i class="fa fa-#CHECKED#square-o"></i></li>
select id , todo , decode(completed_by , null, '' , 'check' || '-') checked , completed_by , completed_onfrom app_todos
Demo p220
6 . 7
Two types of rows
<tr> <td colspan="2"> <a href="#LINK#">&EDIT_BUTTON.</a> #PARTY_NAME# - #ROLE# <i class="fa"></i> </td></tr>
<tr> <td align="right">#TYPE_NAME#</td> <td>#ENTRY#</td></tr>
7 . 3
<tr> <td colspan="2"> <a href="#LINK#">&EDIT_BUTTON.</a> #PARTY_NAME# - #ROLE# <i class="fa"></i> </td></tr>
<tr> <td align="right">#TYPE_NAME#</td> <td>#ENTRY#</td></tr>
select party_id , party_name , role , type_name , entry , active_ind from parties
7 . 4
<tr> <td colspan="2"> <a href="#LINK#">&EDIT_BUTTON.</a> #PARTY_NAME# - #ROLE# <i class="fa"></i> </td></tr>
<tr> <td align="right">#TYPE_NAME#</td> <td>#ENTRY#</td></tr>
select party_id , party_name , role , type_name , entry , active_ind from parties where party_id = 41
For a single rowOr the 1st Party Row
Use both types of rows
Special Case
7 . 5
Analytics Syntax<function> (<arg1>, <arg2>, ) OVER ( < partition clause > < sorting clause > < windowing clause > )
row_number() over ( partition by party_id order by party_name, entry )
8 . 2
Analyticsselect party_id , party_name , entry , row_number() over ( partition by party_id order by party_name, entry) rn from parties
PARTY_ID PARTY_NAME ENTRY RN--------- ------------------ -------------------------------- -------1 Scott, Michael 800 555-1212 11 Scott, Michael 952 555-1212 21 Scott, Michael [email protected] 321 Schrute, Dwight 800 555-1212 121 Schrute, Dwight [email protected] 221 Schrute, Dwight [email protected] 321 Schrute, Dwight [email protected] 441 Halpert, James D. 800 555-1212 1
8 rows selected.
8 . 3
count(*) as analyticselect party_id , party_name , row_number() over ( partition by party_id order by party_name, entry) rn , count(*) over ( partition by party_id ) total_rows from parties
PARTY_ID PARTY_NAME RN TOTAL_ROWS--------- ------------------ --- -----------1 Scott, Michael 1 31 Scott, Michael 2 31 Scott, Michael 3 321 Schrute, Dwight 1 421 Schrute, Dwight 2 421 Schrute, Dwight 3 421 Schrute, Dwight 4 441 Halpert, James D. 1 1
8 rows selected.
8 . 4
KISS series on Analyticsby Connor McDonald
youtu.be/nk4I4ta4ZuU8 . 5
select party_id , party_name , role , type_name , entry , row_number() over (partition by party_id order by party_name, entry) rn from parties
:RN = 18 . 6
<tr> <td colspan="2"> <a href="#LINK#">&EDIT_BUTTON.</a> #PARTY_NAME# - #ROLE# <i class="fa"></i> </td></tr>
<tr> <td align="right">#TYPE_NAME#</td> <td>#ENTRY#</td></tr>
<tr> <td align="right">#TYPE_NAME#</td> <td>#ENTRY#</td></tr>
Column Template 1 Column Template 2
9 . 3
:RN = 1<tr> <td colspan="2"> <a href="#LINK#">&EDIT_BUTTON.</a> #PARTY_NAME# - #ROLE# <i class="fa"></i> </td></tr><tr> <td align="right">#TYPE_NAME#</td> <td>#ENTRY#</td></tr>
Column Template 1
Adding some markup
9 . 4
<tr class="newContact rowStatus_#ACTIVE_IND#"> <td colspan="2" class="t-Report-cell heading"> <a href="#LINK#" class="contactEdit" data-id="#PARTY_ID#">&EDIT_BUTTON.</a> <span class="name">#PARTY_NAME#</span> - <span class="roleName">#ROLE#</span> <i class="fa cfa-check_#ACTIVE_IND# cfa-1_5x" title="#ACTIVE_IND#"></i> </td></tr><tr> <td align="right" class="t-Report-cell contactType">#TYPE_NAME#</td> <td class="t-Report-cell contactEntry">#ENTRY#</td></tr>
<tr> <td colspan="2"> <a href="#LINK#">&EDIT_BUTTON.</a> #PARTY_NAME# - #ROLE# <i class="fa"></i> </td></tr><tr> <td align="right">#TYPE_NAME#</td> <td>#ENTRY#</td></tr>
Column Template 1
Adding some markup
:RN = 1
9 . 5
Some HTML knowledgeTemplates are not that re-usableNew columns require template changesOnly 4 template conditionsPotential Pagination IssuesLimited support for Interactive Reports
10 . 2
Blogs & ReferencesDemo App [ ]Demo Video Series
Using Conditions with Column Templates
KISS Analytics playlist
APEX Reports: Color Row Based On Column Value
APEX Reports: Custom Layout with Named Column (Row Template)
Reinventing APEX Reporting
Oracle APEX 5 Classic Report Templates
apex.oracle.com/pls/apex/f?p=89361 Download
http://rimblas.com/blog/videos/
rimblas.com/blog/2014/05/using-conditions-with-column-templates/
https://www.youtube.com/playlist?list=PLJMaoEWvHwFJDyhMLCkNSSUQWw9waFkIj
ww.eberapp.com/pls/apex/f?p=BLOG:READ:0::::ARTICLE:5983100346022749
ww.eberapp.com/pls/apex/f?p=BLOG:READ:0::::ARTICLE:5976400346831048
morneau.me/reinventing-apex-reporting/
storm-petrel.com/orablog/2015/12/20/oracle-apex-5-classic-report-templates/
11
Q&AHooked on Classic (Reports)
@rimblasJorge Rimblas
12