Building A User-Definable,
                Flexible UI
     with Oracle Application Express (ApEx)
  By Bradley D. Brown, InteliVideo
Who am I?

•   Bradley D. Brown                     •   Today
     http://bradleydbrown.blogspot.com       • InteliVideo in April 2012
•   Founder                                  • Video Monetization Platform
     • TUSC in 1988                          • Built it to sell training online
          • Sold to Rolta in 2008            • Focused on mid and long tail and
                                               corporate deals
     • IntelliReal in 2005
                                             • ApEx provides a “quick turns”
          • Sold to Equifax in 2011
                                               approach to our offering
     • 10+ other companies, boards           • Founders Institute
•   Professor – DU
•   Advisor for Founders Institute
•   Author – 6 technical books
My Interests

•   Making a difference
•   Helping people – teaching,
    advising, …
•   Building companies
•   Using my talents with
    technology
•   The outdoors
Agenda
• User Definable
• Flexible UI
• Project / POC Goals
• Application Specifics
• Application Design
• Database Specifics
    • ERD
    • Tables
    • Functions
    • Materialized views
User Definable


• Data Driven                              • Trade-offs
   • Drive code based on data                 • Performance
     rather than hard coded
                                              • “Readability” of code
   • Examples
                                              • Too many choices
       • ES valuation model at
         IntelliReal                       • Advantages
       • Partners “turning off” partners      • Quick Turns
         on InteliVideo site
                                              • Testing 100s of models,
• Flexible Database                             variable changes, etc. can all
                                                be done programmatically
   • Do you need the ability to add
                                                (perfect value)
     “columns” without “adding
     columns?”
Flexible UI


• Data Driven                       • My bottom line
   • What page to start at (after      • If I’m doing the original
     login)                              coding or I’m going to make
                                         a change to my code and
   • What partners to show
                                         there is an assumption (i.e.
   • Colors to display                   a hard coded number that I
                                         might put into my code), I
• Easy with Apex                         stop and think
   • Authorization rules                   • Should I add a column to a
                                             table and should I change
   • Display rules at all levels             the code so it points at the
                                             column?
                                           • What level? Per user? Per
                                             customer?
Independent Nation – POC Goals
• Dave read the book
• Called the author – Fipp (John
  Avalon)
• Met with him and discussed the
  concepts
• We met with numerous political
  campaign target market experts
• I developed the software,
  secured data,…
• We did demos to politicians,
  target market people, etc.
• EC2 platform
Political Premise
• Politicians want to share their views with targeted groups of people who
  are voting
• Key target groups (lobstermen, working moms, first time home owners)
    • Identify and find those people
    • Invite them to custom events (per group)
    • Drive custom messages (reduced taxes for lobster, better day care options,
      incentives for buying your first home) – email, text, phone
    • Visit the networkers
Project / POC Goals
• Provide intelligence to political campaigns
• Build a GUI and GIS application (with ApEx)
• Application for Independent Nation, but wanted something we
  could use for any customer with Google map needs
• Application that is dynamic and flexible
• Design and develop application that allows customization by
  changing data, not code.
• Data about people, their properties or addresses they live at, and
  other information about them – yet, stay open for others
Application Specifics
• Independent Nation is a company that specializes in provide
  intelligence about voters to political campaigns
• Data sourcing - merged voter registration, voter contribution and
  numerous other data sources as the starting data set
• Goal was to provide a flexible database design that will allow for
  SIMPLE attribute additions without new coding. New data feeds
  won’t require DB changes.
Application Design
• Developed for Independent Nation
• Every user
   • Starts in a different part of the world
   • Has their own color scheme and search criteria
• Uses Google Maps
   • Could integrate other mapping solutions in
• Database
   • Generic driving table with attributes
   • Not many tables (i.e. simple design)




                                                      12
Political contributors in NJ
• Contributors by party contributed to…




                                          13
Other Visual Searches
Age – Education, Income
Key Tables
• Application Data      • User Driven Data
   • Attribute             • User
   • Category              • User Attribute
   • People                • User Attribute Color
   • People Attribute      • User Option
   • Property              • User Option User
   • People Property
ERD
Attribute Table
• Attributes (fields)     • Parent Attribute

    • Short Description   • Text 1,2

    • Long Description    • Data 1,2
    • Category            • Number 1,2
Category Table
• Categories of          • Add a new category, assign
  Windows/Tabs             it to attribute(s) and it
                           shows up for all of the
   • Category ID
                           people…
   • Short Description
   • Full Description
   • Parent Category
People
• People
   • ID
   • First, Last Name
   • Voter ID
   • Property ID
• People Attribute
   • People ID
   • Attribute ID
   • Start and End Date
   • Source, Integrity
   • Text, Number, Date Values
Properties and People
• Property
   • ID
   • Address
   • Phone, Cell
   • Valuation
   • Lat and Long
• People Property
   • People ID
   • Property ID
   • Start and End Date
User Specific Data
• User Attribute Color
    • Colorization
    • Limiting data
• User Option
    • Saved Filters
    • Descriptions, Include, Exclude
    • Starting map location
• User Option User
    • Users who share a filter
    • Default filter
Functions
• Get_Desc                           • Get_People
   • Gets the description for a         • Brains for everything here
     specific attribute for a
                                        • Pipeline (or table-based)
     specific user
                                          function
• Get_Option
                                        • Finds the people that live
   • Gets the default filter for a        within the lat/long range
     user                                 on the map, matching the
                                          filters
Let’s Add a New Category
• Add the category
• Change attributes to be in the category
• Refresh the Materialized View
• Test it out in the UI
Let’s Create a New Filter
• Education of Too Youngs…
• Color by education level
• Include <18 year olds
• Exclude other age categories
• Save it
List of People Matching
• Uses the same service as the map
• Shows the details
• Can be exported
Search
• Person’s name
• Municipality
• Address
• District
Finds People
• Clicking View shows them on the map
Performance

• Created materialized             • Faster Spatial
  view                               Options
  • PEOPLE_MV                         • Change from
                                        lat/long to spatial
  • Indexed search
                                        column
    columns
                                         • sdo_geometry
• Turned on query re-
                                      • Change query to
  write
                                        use sdo functions
  • ALTER SESSION SET
    query_rewrite_enabled=TRUE;
  • Or…I could have just changed
    queries (people_mv)
How the Maps Works
• AJAX                                 •   select * from
                                           table(cast(get_people(:P6_SW
   • var url = "f?p=&APP_ID.:6:'           _LAT, :P6_NE_LAT,
     || v('app_session') ||                :P6_SW_LONG, :P6_NE_LONG,
     '::::P6_SW_LAT,P6_SW_LO               :P1_COLOR_ATTRIBUTE_ID,
     NG,P6_NE_LAT,P6_NE_LO                 independent_authentication.g
     NG,P6_ZOOM,P6_MAPTYP                  et_user_id(:APP_USER),:P1_IN
     E:" + sw.lat() + "," +                CLUDE_LIST,
     sw.lng() + "," + ne.lat() + ","       :P1_REMOVE_LIST,
     + ne.lng() + "," + zm + "," +         :P1_SHOW_UNCOLORED,
     mt;                                   :P1_PEOPLE_ID,
• See Page 6 in my                         nvl(:P1_ROWS,1000)) as
                                           people_Table))
  application
   • XML Report
   • Cast function as if it’s a
     table
Other Options
• Could use a Cloud provider   • Yahoo Pipes requires data
                                 in XML format
    • Yahoo Pipes
                                  • Can come from ApEx too
    • Google App Engine
                                  • iPerspective
• We put this in a hosted
  environment
    • Amazon EC2
    • MaxApex
BTW – Political Reality
• Politicians don’t decide much of anything
    • Their interns and experts do
• They don’t want to pay for anything
• They do know what groups they want to get to
• They cannot craft a message to them – for fear one
  person will get the wrong message and spread it
• They want to deliver generic messages
• This killed Independent Nation in the end…
Getting Started, then Other Mapping I’ve Done
• Heat Maps
• GeoSearch
• Highlight and Visual Search
• Test Scores within a Radius


• Get Creative!
Google Map Integration
• Easy integration Starts At:
    • http://www.google.com/apis/maps/
• Simple Pushpins:
Heat Maps
• A look at different neighborhood trends in home values
GeoSearch
• Grouping of properties
• Colorized and customizable
Highlight and Visual Search
• Highlight it
• Build your search, see it
Test Scores within a radius
• Visual results
Summary – Building a Flexible UI
• Flexible Database and UI – can overdue it
• Project / POC Goals – sales engine
• Application Specifics – functional
• Application Design - flexible reuse
• Demo for Customers – cool UI
• Database Specifics – data driven app
Questions?
Brad’s Papers and Presentations
• Java-based Oracle Web       • Practical Portal Practices
  Development                 • Implementing JSP in Portal
• Java Server Pages           • UltraSearch
• JavaMail                    • Search Engines
• Java for the PL/SQL         • Utl_smtp and Utl_http
  Developer
                              • iFS
• Web Cache – achieving 150
  the performance             • JavaScript

• 9iAS Installation,          • Top DBA scripts for Web
  Configuration, and Tuning     Developers

• Wireless                    • Security
Copyright Information

• Neither InteliVideo, Rolta TUSC nor the author guarantee this
  document to be error-free. Please provide comments/questions
  to brownb@tusc.com.
• InteliVideo, Rolta TUSC © 2012. This document cannot be
  reproduced without expressed written consent from an officer of
  Rolta or InteliVideo.

Building a Flexible UI with Oracle ApEx

  • 1.
    Building A User-Definable, Flexible UI with Oracle Application Express (ApEx) By Bradley D. Brown, InteliVideo
  • 2.
    Who am I? • Bradley D. Brown • Today http://bradleydbrown.blogspot.com • InteliVideo in April 2012 • Founder • Video Monetization Platform • TUSC in 1988 • Built it to sell training online • Sold to Rolta in 2008 • Focused on mid and long tail and corporate deals • IntelliReal in 2005 • ApEx provides a “quick turns” • Sold to Equifax in 2011 approach to our offering • 10+ other companies, boards • Founders Institute • Professor – DU • Advisor for Founders Institute • Author – 6 technical books
  • 3.
    My Interests • Making a difference • Helping people – teaching, advising, … • Building companies • Using my talents with technology • The outdoors
  • 4.
    Agenda • User Definable •Flexible UI • Project / POC Goals • Application Specifics • Application Design • Database Specifics • ERD • Tables • Functions • Materialized views
  • 5.
    User Definable • DataDriven • Trade-offs • Drive code based on data • Performance rather than hard coded • “Readability” of code • Examples • Too many choices • ES valuation model at IntelliReal • Advantages • Partners “turning off” partners • Quick Turns on InteliVideo site • Testing 100s of models, • Flexible Database variable changes, etc. can all be done programmatically • Do you need the ability to add (perfect value) “columns” without “adding columns?”
  • 6.
    Flexible UI • DataDriven • My bottom line • What page to start at (after • If I’m doing the original login) coding or I’m going to make a change to my code and • What partners to show there is an assumption (i.e. • Colors to display a hard coded number that I might put into my code), I • Easy with Apex stop and think • Authorization rules • Should I add a column to a table and should I change • Display rules at all levels the code so it points at the column? • What level? Per user? Per customer?
  • 7.
    Independent Nation –POC Goals • Dave read the book • Called the author – Fipp (John Avalon) • Met with him and discussed the concepts • We met with numerous political campaign target market experts • I developed the software, secured data,… • We did demos to politicians, target market people, etc. • EC2 platform
  • 8.
    Political Premise • Politicianswant to share their views with targeted groups of people who are voting • Key target groups (lobstermen, working moms, first time home owners) • Identify and find those people • Invite them to custom events (per group) • Drive custom messages (reduced taxes for lobster, better day care options, incentives for buying your first home) – email, text, phone • Visit the networkers
  • 9.
    Project / POCGoals • Provide intelligence to political campaigns • Build a GUI and GIS application (with ApEx) • Application for Independent Nation, but wanted something we could use for any customer with Google map needs • Application that is dynamic and flexible • Design and develop application that allows customization by changing data, not code. • Data about people, their properties or addresses they live at, and other information about them – yet, stay open for others
  • 10.
    Application Specifics • IndependentNation is a company that specializes in provide intelligence about voters to political campaigns • Data sourcing - merged voter registration, voter contribution and numerous other data sources as the starting data set • Goal was to provide a flexible database design that will allow for SIMPLE attribute additions without new coding. New data feeds won’t require DB changes.
  • 11.
    Application Design • Developedfor Independent Nation • Every user • Starts in a different part of the world • Has their own color scheme and search criteria • Uses Google Maps • Could integrate other mapping solutions in • Database • Generic driving table with attributes • Not many tables (i.e. simple design) 12
  • 12.
    Political contributors inNJ • Contributors by party contributed to… 13
  • 13.
    Other Visual Searches Age– Education, Income
  • 14.
    Key Tables • ApplicationData • User Driven Data • Attribute • User • Category • User Attribute • People • User Attribute Color • People Attribute • User Option • Property • User Option User • People Property
  • 15.
  • 16.
    Attribute Table • Attributes(fields) • Parent Attribute • Short Description • Text 1,2 • Long Description • Data 1,2 • Category • Number 1,2
  • 17.
    Category Table • Categoriesof • Add a new category, assign Windows/Tabs it to attribute(s) and it shows up for all of the • Category ID people… • Short Description • Full Description • Parent Category
  • 18.
    People • People • ID • First, Last Name • Voter ID • Property ID • People Attribute • People ID • Attribute ID • Start and End Date • Source, Integrity • Text, Number, Date Values
  • 19.
    Properties and People •Property • ID • Address • Phone, Cell • Valuation • Lat and Long • People Property • People ID • Property ID • Start and End Date
  • 20.
    User Specific Data •User Attribute Color • Colorization • Limiting data • User Option • Saved Filters • Descriptions, Include, Exclude • Starting map location • User Option User • Users who share a filter • Default filter
  • 21.
    Functions • Get_Desc • Get_People • Gets the description for a • Brains for everything here specific attribute for a • Pipeline (or table-based) specific user function • Get_Option • Finds the people that live • Gets the default filter for a within the lat/long range user on the map, matching the filters
  • 22.
    Let’s Add aNew Category • Add the category • Change attributes to be in the category • Refresh the Materialized View • Test it out in the UI
  • 23.
    Let’s Create aNew Filter • Education of Too Youngs… • Color by education level • Include <18 year olds • Exclude other age categories • Save it
  • 24.
    List of PeopleMatching • Uses the same service as the map • Shows the details • Can be exported
  • 25.
    Search • Person’s name •Municipality • Address • District
  • 26.
    Finds People • ClickingView shows them on the map
  • 27.
    Performance • Created materialized • Faster Spatial view Options • PEOPLE_MV • Change from lat/long to spatial • Indexed search column columns • sdo_geometry • Turned on query re- • Change query to write use sdo functions • ALTER SESSION SET query_rewrite_enabled=TRUE; • Or…I could have just changed queries (people_mv)
  • 28.
    How the MapsWorks • AJAX • select * from table(cast(get_people(:P6_SW • var url = "f?p=&APP_ID.:6:' _LAT, :P6_NE_LAT, || v('app_session') || :P6_SW_LONG, :P6_NE_LONG, '::::P6_SW_LAT,P6_SW_LO :P1_COLOR_ATTRIBUTE_ID, NG,P6_NE_LAT,P6_NE_LO independent_authentication.g NG,P6_ZOOM,P6_MAPTYP et_user_id(:APP_USER),:P1_IN E:" + sw.lat() + "," + CLUDE_LIST, sw.lng() + "," + ne.lat() + "," :P1_REMOVE_LIST, + ne.lng() + "," + zm + "," + :P1_SHOW_UNCOLORED, mt; :P1_PEOPLE_ID, • See Page 6 in my nvl(:P1_ROWS,1000)) as people_Table)) application • XML Report • Cast function as if it’s a table
  • 29.
    Other Options • Coulduse a Cloud provider • Yahoo Pipes requires data in XML format • Yahoo Pipes • Can come from ApEx too • Google App Engine • iPerspective • We put this in a hosted environment • Amazon EC2 • MaxApex
  • 30.
    BTW – PoliticalReality • Politicians don’t decide much of anything • Their interns and experts do • They don’t want to pay for anything • They do know what groups they want to get to • They cannot craft a message to them – for fear one person will get the wrong message and spread it • They want to deliver generic messages • This killed Independent Nation in the end…
  • 31.
    Getting Started, thenOther Mapping I’ve Done • Heat Maps • GeoSearch • Highlight and Visual Search • Test Scores within a Radius • Get Creative!
  • 32.
    Google Map Integration •Easy integration Starts At: • http://www.google.com/apis/maps/ • Simple Pushpins:
  • 33.
    Heat Maps • Alook at different neighborhood trends in home values
  • 34.
    GeoSearch • Grouping ofproperties • Colorized and customizable
  • 35.
    Highlight and VisualSearch • Highlight it • Build your search, see it
  • 36.
    Test Scores withina radius • Visual results
  • 37.
    Summary – Buildinga Flexible UI • Flexible Database and UI – can overdue it • Project / POC Goals – sales engine • Application Specifics – functional • Application Design - flexible reuse • Demo for Customers – cool UI • Database Specifics – data driven app
  • 38.
  • 39.
    Brad’s Papers andPresentations • Java-based Oracle Web • Practical Portal Practices Development • Implementing JSP in Portal • Java Server Pages • UltraSearch • JavaMail • Search Engines • Java for the PL/SQL • Utl_smtp and Utl_http Developer • iFS • Web Cache – achieving 150 the performance • JavaScript • 9iAS Installation, • Top DBA scripts for Web Configuration, and Tuning Developers • Wireless • Security
  • 40.
    Copyright Information • NeitherInteliVideo, Rolta TUSC nor the author guarantee this document to be error-free. Please provide comments/questions to brownb@tusc.com. • InteliVideo, Rolta TUSC © 2012. This document cannot be reproduced without expressed written consent from an officer of Rolta or InteliVideo.