SlideShare ist ein Scribd-Unternehmen logo
1 von 48
Downloaden Sie, um offline zu lesen
Real Life ADF Mobile
10 things that you don't get from the developer guide
DOAG Konferenz; November 19th 2013
Who Am I
•  Luc Bors
•  Principal Consultant
•  AMIS, Netherlands
•  Friends of Oracle & Java
•  5 Oracle ACE(D)
•  Oracle Partner
10 Things
One App…..
…. 10 Things …..
…. In 45 Minutes….
….Really…?
Remote URLs
•  For embedding existing web pages in your
ADF Mobile app.

•  For instance:
–  News Website
–  Existing enterprise app Mobile Browser Pages

•  Note:
–  Best use Optimized Mobile Browser Pages
–  Apache Trinidad components
–  Oracle recommends using ADF Mobile browser
Feature as Remote URL

•  Create New Feature as
Remote URL

•  Create URL Connection
Whitelisting
•  Why do we need to do this ?

•  Mobile device is

redirected to m.uefa.com
Property Change Events
•  Raised when individual
attributes of a model object
are changed

•  Use setter method to update
attributes
Provider Change Event
•  Raised when attributes of type Collection are changed on a model object
•  When a new row is created
–  fireProviderCreate(providerKey, rowKey, newRow)
–  New row is inserted in the UI without refreshing other parts of the page

•  When a row is deleted
–  fireProviderDelete(providerKey, rowKey) – Row is deleted in the Iterator

•  When the collection is refreshed
–  fireProviderRefresh(providerKey)
–  Iterator is refreshed
–  Row currency is lost.

providerChangeSupport.fireProviderRefresh("stadiums");!
Device Interaction
•  The Device Datacontrol
•  Drag n Drop support
•  Attributes as fields
•  Operations as buttons
Camera interaction
•  Take a picture ……………
import oracle.adf.model.datacontrols.device;
DeviceManagerFactory.getDeviceManager().getPicture(
100,
DeviceManager.CAMERA_DESTINATIONTYPE_FILE_URI,
DeviceManager.CAMERA_SOURCETYPE_CAMERA, false,
DeviceManager.CAMERA_ENCODINGTYPE_PNG,
200,
200);

•  …… or get one from the Library
DeviceManager.CAMERA_SOURCETYPE__PHOTOLIBRARY
Be careful !!
•  DESTINATIONTYPE_DATA_URL you will get the image as base64 encoded
string

•  Camera’s are very good and picture quality is amazing.
–  Encoding such images as base64 causes memory issues

•  Don’t blow up your app.
–  iOS you should set quality parameter to a value less then 50 to avoid memory
issues
–  On Android out-of-memory can be caused with default image settings. Make
image smaller by setting targetWidth and targetHeight

•  Small sized images can be uploaded using web services.
Data Services

Device Native Container

ADF Controller

Local
HTML

Server
HTML

Push
Handler

Java VM

ADF Model

Device
Services

JDBC

Cordova

Business
Logic

Configuration Server
Credential Management,
SSO & Access Control

ADF Mobile
AMX View

Web
View

App
Config

HTML5 & JavaScript Presentation

SQLite

Encrypted
SQLite DB

Mobile
Device

Server-Generated HTML

APN/GCM Push Services

SOAP & REST Services

Server
Using Webservices
•  The Webservice Datacontrol
Using Webservices directly
•  Just drag & drop the method from the Data Control
Using Webservices from Java
•  Invoke directly from java.
•  Does not use the binding layer

•  Uses Framework utilityMethod
•  AdfmfJavaUtilities.invokeDataControlMethod()

•  Datacontrol must be in available in DataBindings.cpx
Advantages
• 
• 
• 
• 
• 

Provides more flexibility to shape model to mobile UI
Perform client side validation
Minimize the number of round trips
Offline caching
Mash-up data from multiple services
Patterns…

•  SOAP Webservice
•  Web Service Data Control
Patterns…

•  REST Webservice
•  Rest Service Adapter
Patterns….

•  SQLite Database
•  Plain JDBC
Obviously all the same……

•  Service Object Data Control Pattern
–  Whatever “back end” data source you use…..
–  It is completely transparent for UI
Feature Archives
•  Feature Archives can be reused
•  Deploy ADF Mobile app as FAR
•  Consume features from FAR in other apps
Feature Archives
•  Feature Archives Deployment Profile
•  Connections Detail should be used (default is wrong ?)
•  Only if connection is available in consuming APP name only works
Springboard & navigationbar
•  Springboard configuration in adfmf-application.xml
The Default Springboard
The Custom SpringBoard
Configuring the springboard

–  Do Not set AllowDeviceAccess to False for Springboard Feature !
Navigation
•  Declarative Navigation
–  Button/Link/ListItem

<amx:listItem id="li1" action="detail" showLinkIcon="true">!
<amx:setPropertyListener id="x" from="#{row.rowKey}”

to="#{pageFlowScope.myBean.currentStadium}" !
type="action"/>!
Navigation
•  Declarative Navigation
–  Button/Link/ListItem

•  Programmatic Navigation
–  JavaCode

AdfmfContainerUtilities.invokeContainerJavaScriptFunction(!
AdfmfJavaUtilities.getFeatureName(),
!
"adf.mf.api.amx.doNavigation", !
new Object[] { ”detail" });

    } !
Navigation
•  Drawback
–  No access to setPropertyListener

•  Solution if you need that functionality:
–  Set the value in java Code

ValueExpression ve =!
AdfmfJavaUtilities.getValueExpression(!
"#{pageFlowScope.myBean.currentStadium}”!
, String.class);!
ve.setValue(AdfmfJavaUtilities.getAdfELContext()!
, getCurrentStadium());!
Smart Navigation
•  Search Stadiums
•  What if resultset only contains one row ?

if (s_stadiums.size()==1){!
// only one stadium! Lets navigate
AdfmfContainerUtilities.invokeContainerJavaScriptFunction(!
AdfmfJavaUtilities.getFeatureName(), !
"adf.mf.api.amx.doNavigation", !
new Object[] { "detail" });!
} !
Preserve Current Row
•  Inside the <amx:listItem> element of the list page, you need to add a
<amx:setPropertyListener> element to store the row key in a
pageFlowScope variable.

•  In the page definition of the detail page, you need to add a
setCurrentRowWithKey action, which uses the pageFlowScope variable
to set the current row.

•  In the page definition of the detail page, you need to add an
invokeAction executable for the setCurrentRowWithKey action to ensure
the current row is automatically set when entering the detail page.
Preserve Current Row (A-Team)
•  Easiest way:
–  Download and install extension
–  adf-mobile-persistence-sample-install.zip
–  Extension contains StatefulIteratorBeanDcDefinition
<AdapterDataControl id="PlayerService”

FactoryClass="oracle.adf.model.adapter.DataControlFactoryImpl”


ImplDef=

"oracle.ateam.sample.mobile.model.bean.StatefulIteratorBeanDcDefinition”!
……….

Definition=

"com.blogspot.lucbors.soccer.mobile.model.service.PlayerService”
BeanClass=

"com.blogspot.lucbors.soccer.mobile.model.service.PlayerService"!
} !

•  NOTE: This will be the way ADF Mobile will do it in future versions
Gesture Support
•  You can configure Button, Link, and List Item components to react to the
following gestures:
• 
• 
• 
• 
• 

Swipe to the right
Swipe to the left
Swipe up
Swipe down
Tap-and-hold
Gesture examples
•  The Swipe Gesture
<amx:actionListener binding="#{mybean.DoX}"
type="swipeRight"/>

•  The Tap Gesture

<amx:showPopupBehavior popupid="pop1"
type="tapHold“ />
Use case example
Ingredients
•  A (Web) service and datacontrol
•  A Page with Listview
•  An ActionListener with type
SwipeDown
•  Smart Java Code to call service
conditionally

<amx:listView var="row”!
value="#{bindings.allLocations.collectionModel}" !
fetchSize="#{bindings.allLocations.rangeSize}”!
id="lv1"> !
<amx:listItem id="li1"> !
<amx:actionListener type="swipeDown”
!
binding="#{pageFlowScope.locationsBackingBean.checkForUpdates}”>!
!
Change the data
Swimming-lanes
•  No Horizontal scrollbar
•  All ‘data’ available
•  Use panelGroupLayout
–  Width 100%

<amx:panelGroupLayout layout="horizontal”

inlineStyle="width:100%;">!
Push Notification (GCM)
• 
• 
• 
• 

Subscribe to GCM
Receive token
Register with Enterprise app
Enterprise app Pushes message to
GCM
•  GCM delegates message to
device(s)
Server Side
•  Class to push a message to a device.
– 
– 
– 
– 

import com.google.android.gcm.server.Constants;
import com.google.android.gcm.server.Message;
import com.google.android.gcm.server.Result;
import com.google.android.gcm.server.Sender;

public class PushMessageBean {
public String message;
private Sender sender = new Sender(”<someSenderKey>");
public static final String ERROR_NOT_REGISTERED="NotRegistered”;
private Message createMessage(String msg) {
String sound = "default";
Message message = new Message.Builder().collapseKey("1")
.delayWhileIdle(true)
.addData("alert", msg)
.addData("sound", sound).build();
return message;}
Server Side Send Code
public void pushNow(ActionEvent actionEvent) {
// Add event code here…
DCBindingContainer bindings = (DCBindingContainer)
BindingContext.getCurrent().getCurrentBindingsEntry();
DCIteratorBinding iter =
bindings.findIteratorBinding("GcmSubscribersIterator");
Row curr = iter.getCurrentRow();
String target = (String)curr.getAttribute("DeviceToken");
String type = (String)curr.getAttribute("DeviceType");
if(type.equalsIgnoreCase("Android")){
Message message = createMessage(this.message);
Result result = null;
sendSingleMessage(target, message);
}
Example
•  Select device

•  Send message

•  Get notified

+
GCM Demo
Summary
One App…..
…. 10 Things …..
…. In 45 Minutes…
….. Really !

1. 
2. 
3. 
4. 
5. 

Whitelisting
Provider Refresh
Pictures
Data Service Pattern
Feature Archives

6.  Springboard
7.  Prog Navigation
8.  Keep current Row
9.  Pull to Refresh
10.  Push Notifications
User Experience Patterns and
Guidelines WIKI
Luc Bors, AMIS, The Netherlands	

Luc.Bors@amis.nl	

LucBors@gmail.com	

Follow me on
: @lucb_

Weitere ähnliche Inhalte

Was ist angesagt?

Working with Portlets in ADF and Webcenter
Working with Portlets in ADF and WebcenterWorking with Portlets in ADF and Webcenter
Working with Portlets in ADF and Webcenter
DataNext Solutions
 
Monitor Engineered Systems from a Single Pane of Glass: Oracle Enterprise Man...
Monitor Engineered Systems from a Single Pane of Glass: Oracle Enterprise Man...Monitor Engineered Systems from a Single Pane of Glass: Oracle Enterprise Man...
Monitor Engineered Systems from a Single Pane of Glass: Oracle Enterprise Man...
Alfredo Krieg
 
Data Platform Overview
Data Platform OverviewData Platform Overview
Data Platform Overview
Hamid J. Fard
 

Was ist angesagt? (20)

oracle openworld review UX presentation 2016
oracle openworld review UX presentation 2016oracle openworld review UX presentation 2016
oracle openworld review UX presentation 2016
 
Password Policies in Oracle Access Manager. How to improve user authenticatio...
Password Policies in Oracle Access Manager. How to improve user authenticatio...Password Policies in Oracle Access Manager. How to improve user authenticatio...
Password Policies in Oracle Access Manager. How to improve user authenticatio...
 
Working with Portlets in ADF and Webcenter
Working with Portlets in ADF and WebcenterWorking with Portlets in ADF and Webcenter
Working with Portlets in ADF and Webcenter
 
Bridging Oracle Database and Hadoop by Alex Gorbachev, Pythian from Oracle Op...
Bridging Oracle Database and Hadoop by Alex Gorbachev, Pythian from Oracle Op...Bridging Oracle Database and Hadoop by Alex Gorbachev, Pythian from Oracle Op...
Bridging Oracle Database and Hadoop by Alex Gorbachev, Pythian from Oracle Op...
 
AMIS OOW Review 2012 - Deel 7 - Lucas Jellema
AMIS OOW Review 2012 - Deel 7 - Lucas JellemaAMIS OOW Review 2012 - Deel 7 - Lucas Jellema
AMIS OOW Review 2012 - Deel 7 - Lucas Jellema
 
Blue Green Sitecore Deployments on Azure
Blue Green Sitecore Deployments on AzureBlue Green Sitecore Deployments on Azure
Blue Green Sitecore Deployments on Azure
 
Monitor Engineered Systems from a Single Pane of Glass: Oracle Enterprise Man...
Monitor Engineered Systems from a Single Pane of Glass: Oracle Enterprise Man...Monitor Engineered Systems from a Single Pane of Glass: Oracle Enterprise Man...
Monitor Engineered Systems from a Single Pane of Glass: Oracle Enterprise Man...
 
2019 - OOW - Database Migration Methods from On-Premise to Cloud
2019 - OOW - Database Migration Methods from On-Premise to Cloud2019 - OOW - Database Migration Methods from On-Premise to Cloud
2019 - OOW - Database Migration Methods from On-Premise to Cloud
 
Oow2016 review--paas-microservices-
Oow2016 review--paas-microservices-Oow2016 review--paas-microservices-
Oow2016 review--paas-microservices-
 
Running Oracle EBS in the cloud (UKOUG APPS16 edition)
Running Oracle EBS in the cloud (UKOUG APPS16 edition)Running Oracle EBS in the cloud (UKOUG APPS16 edition)
Running Oracle EBS in the cloud (UKOUG APPS16 edition)
 
The Very Very Latest in Database Development - Oracle Open World 2012
The Very Very Latest in Database Development - Oracle Open World 2012The Very Very Latest in Database Development - Oracle Open World 2012
The Very Very Latest in Database Development - Oracle Open World 2012
 
Data Platform Overview
Data Platform OverviewData Platform Overview
Data Platform Overview
 
Apex 4.0 @ ODTUG 2009
Apex 4.0 @ ODTUG 2009Apex 4.0 @ ODTUG 2009
Apex 4.0 @ ODTUG 2009
 
AMIS Oracle OpenWorld 2015 Review – part 4- PaaS Application Development, Jav...
AMIS Oracle OpenWorld 2015 Review – part 4- PaaS Application Development, Jav...AMIS Oracle OpenWorld 2015 Review – part 4- PaaS Application Development, Jav...
AMIS Oracle OpenWorld 2015 Review – part 4- PaaS Application Development, Jav...
 
What should I do now?! JCS for WebLogic Admins
What should I do now?! JCS for WebLogic AdminsWhat should I do now?! JCS for WebLogic Admins
What should I do now?! JCS for WebLogic Admins
 
2019 - GUOB Tech Day / Groundbreakers LAD Tour - Database Migration Methods t...
2019 - GUOB Tech Day / Groundbreakers LAD Tour - Database Migration Methods t...2019 - GUOB Tech Day / Groundbreakers LAD Tour - Database Migration Methods t...
2019 - GUOB Tech Day / Groundbreakers LAD Tour - Database Migration Methods t...
 
AMIS Oracle OpenWorld 2015 Review – part 3- PaaS Database, Integration, Ident...
AMIS Oracle OpenWorld 2015 Review – part 3- PaaS Database, Integration, Ident...AMIS Oracle OpenWorld 2015 Review – part 3- PaaS Database, Integration, Ident...
AMIS Oracle OpenWorld 2015 Review – part 3- PaaS Database, Integration, Ident...
 
Oow2016 review-13th october 2016
Oow2016 review-13th october 2016Oow2016 review-13th october 2016
Oow2016 review-13th october 2016
 
Apex ace update
Apex ace updateApex ace update
Apex ace update
 
AMIS Oracle OpenWorld 2015 Review – part 2- Hardware & IaaS and PaaS Cloud Fo...
AMIS Oracle OpenWorld 2015 Review – part 2- Hardware & IaaS and PaaS Cloud Fo...AMIS Oracle OpenWorld 2015 Review – part 2- Hardware & IaaS and PaaS Cloud Fo...
AMIS Oracle OpenWorld 2015 Review – part 2- Hardware & IaaS and PaaS Cloud Fo...
 

Ähnlich wie ADF Mobile: 10 Things you don't get from the developers guide - Luc Bors

Microsoft Power Page for Developer - ภาษาไทย
Microsoft Power Page for Developer - ภาษาไทยMicrosoft Power Page for Developer - ภาษาไทย
Microsoft Power Page for Developer - ภาษาไทย
Teerasej Jiraphatchandej
 
Advanced SharePoint 2010 and 2013 Web Part Development by Rob Windsor - SPTec...
Advanced SharePoint 2010 and 2013 Web Part Development by Rob Windsor - SPTec...Advanced SharePoint 2010 and 2013 Web Part Development by Rob Windsor - SPTec...
Advanced SharePoint 2010 and 2013 Web Part Development by Rob Windsor - SPTec...
SPTechCon
 
An Introduction to webOS
An Introduction to webOSAn Introduction to webOS
An Introduction to webOS
Kevin Decker
 

Ähnlich wie ADF Mobile: 10 Things you don't get from the developers guide - Luc Bors (20)

amis-adf-enterprise-mobility
amis-adf-enterprise-mobilityamis-adf-enterprise-mobility
amis-adf-enterprise-mobility
 
ADF Mobile: Best Practices for Developing Applications with Oracle ADF Mobile...
ADF Mobile: Best Practices for Developing Applications with Oracle ADF Mobile...ADF Mobile: Best Practices for Developing Applications with Oracle ADF Mobile...
ADF Mobile: Best Practices for Developing Applications with Oracle ADF Mobile...
 
ADF Mobile : Best Practices for Developing Applications with Oracle ADF Mobile
ADF Mobile : Best Practices for Developing Applications with Oracle ADF MobileADF Mobile : Best Practices for Developing Applications with Oracle ADF Mobile
ADF Mobile : Best Practices for Developing Applications with Oracle ADF Mobile
 
Oracle MAF real life OOW.pptx
Oracle MAF real life OOW.pptxOracle MAF real life OOW.pptx
Oracle MAF real life OOW.pptx
 
ADF Mobile - an intro for Developers
ADF Mobile - an intro for DevelopersADF Mobile - an intro for Developers
ADF Mobile - an intro for Developers
 
Riding the Edge with Ember.js
Riding the Edge with Ember.jsRiding the Edge with Ember.js
Riding the Edge with Ember.js
 
Dotnet- An overview of ASP.NET & ADO.NET- Mazenet solution
Dotnet- An overview of ASP.NET & ADO.NET- Mazenet solutionDotnet- An overview of ASP.NET & ADO.NET- Mazenet solution
Dotnet- An overview of ASP.NET & ADO.NET- Mazenet solution
 
Building iPad apps with Flex - 360Flex
Building iPad apps with Flex - 360FlexBuilding iPad apps with Flex - 360Flex
Building iPad apps with Flex - 360Flex
 
Microsoft Power Page for Developer - ภาษาไทย
Microsoft Power Page for Developer - ภาษาไทยMicrosoft Power Page for Developer - ภาษาไทย
Microsoft Power Page for Developer - ภาษาไทย
 
Advanced SharePoint 2010 and 2013 Web Part Development by Rob Windsor - SPTec...
Advanced SharePoint 2010 and 2013 Web Part Development by Rob Windsor - SPTec...Advanced SharePoint 2010 and 2013 Web Part Development by Rob Windsor - SPTec...
Advanced SharePoint 2010 and 2013 Web Part Development by Rob Windsor - SPTec...
 
Visualforce
VisualforceVisualforce
Visualforce
 
Doag wysiwyg
Doag wysiwygDoag wysiwyg
Doag wysiwyg
 
ADF and JavaScript - AMIS SIG, July 2017
ADF and JavaScript - AMIS SIG, July 2017ADF and JavaScript - AMIS SIG, July 2017
ADF and JavaScript - AMIS SIG, July 2017
 
Beginning jQuery Mobile
Beginning jQuery MobileBeginning jQuery Mobile
Beginning jQuery Mobile
 
Multi screen HTML5
Multi screen HTML5Multi screen HTML5
Multi screen HTML5
 
Medium TechTalk — iOS
Medium TechTalk — iOSMedium TechTalk — iOS
Medium TechTalk — iOS
 
An Introduction to webOS
An Introduction to webOSAn Introduction to webOS
An Introduction to webOS
 
jQuery Mobile and JavaScript
jQuery Mobile and JavaScriptjQuery Mobile and JavaScript
jQuery Mobile and JavaScript
 
Disrupting the application eco system with progressive web applications
Disrupting the application eco system with progressive web applicationsDisrupting the application eco system with progressive web applications
Disrupting the application eco system with progressive web applications
 
Developing High Performance Web Apps
Developing High Performance Web AppsDeveloping High Performance Web Apps
Developing High Performance Web Apps
 

Mehr von Getting value from IoT, Integration and Data Analytics

Mehr von Getting value from IoT, Integration and Data Analytics (20)

AMIS Oracle OpenWorld en Code One Review 2018 - Blockchain, Integration, Serv...
AMIS Oracle OpenWorld en Code One Review 2018 - Blockchain, Integration, Serv...AMIS Oracle OpenWorld en Code One Review 2018 - Blockchain, Integration, Serv...
AMIS Oracle OpenWorld en Code One Review 2018 - Blockchain, Integration, Serv...
 
AMIS Oracle OpenWorld en Code One Review 2018 - Pillar 2: Custom Application ...
AMIS Oracle OpenWorld en Code One Review 2018 - Pillar 2: Custom Application ...AMIS Oracle OpenWorld en Code One Review 2018 - Pillar 2: Custom Application ...
AMIS Oracle OpenWorld en Code One Review 2018 - Pillar 2: Custom Application ...
 
AMIS Oracle OpenWorld en Code One Review 2018 - Pillar 2: SaaS
AMIS Oracle OpenWorld en Code One Review 2018 - Pillar 2: SaaSAMIS Oracle OpenWorld en Code One Review 2018 - Pillar 2: SaaS
AMIS Oracle OpenWorld en Code One Review 2018 - Pillar 2: SaaS
 
AMIS Oracle OpenWorld en Code One Review 2018 - Pillar 1: Data
AMIS Oracle OpenWorld en Code One Review 2018 - Pillar 1: DataAMIS Oracle OpenWorld en Code One Review 2018 - Pillar 1: Data
AMIS Oracle OpenWorld en Code One Review 2018 - Pillar 1: Data
 
AMIS Oracle OpenWorld en Code One Review 2018 - Pillar 1: Cloud Infrastructure
AMIS Oracle OpenWorld en Code One Review 2018 - Pillar 1: Cloud Infrastructure AMIS Oracle OpenWorld en Code One Review 2018 - Pillar 1: Cloud Infrastructure
AMIS Oracle OpenWorld en Code One Review 2018 - Pillar 1: Cloud Infrastructure
 
10 tips voor verbetering in je Linkedin profiel
10 tips voor verbetering in je Linkedin profiel10 tips voor verbetering in je Linkedin profiel
10 tips voor verbetering in je Linkedin profiel
 
Iot in de zorg the next step - fit for purpose
Iot in de zorg   the next step - fit for purpose Iot in de zorg   the next step - fit for purpose
Iot in de zorg the next step - fit for purpose
 
Iot overview .. Best practices and lessons learned by Conclusion Conenct
Iot overview .. Best practices and lessons learned by Conclusion Conenct Iot overview .. Best practices and lessons learned by Conclusion Conenct
Iot overview .. Best practices and lessons learned by Conclusion Conenct
 
IoT Fit for purpose - how to be successful in IOT Conclusion Connect
IoT Fit for purpose - how to be successful in IOT Conclusion Connect IoT Fit for purpose - how to be successful in IOT Conclusion Connect
IoT Fit for purpose - how to be successful in IOT Conclusion Connect
 
Industry and IOT Overview of protocols and best practices Conclusion Connect
Industry and IOT Overview of protocols and best practices  Conclusion ConnectIndustry and IOT Overview of protocols and best practices  Conclusion Connect
Industry and IOT Overview of protocols and best practices Conclusion Connect
 
IoT practical case using the people counter sensing traffic density build usi...
IoT practical case using the people counter sensing traffic density build usi...IoT practical case using the people counter sensing traffic density build usi...
IoT practical case using the people counter sensing traffic density build usi...
 
R introduction decision_trees
R introduction decision_treesR introduction decision_trees
R introduction decision_trees
 
Introduction overviewmachinelearning sig Door Lucas Jellema
Introduction overviewmachinelearning sig Door Lucas JellemaIntroduction overviewmachinelearning sig Door Lucas Jellema
Introduction overviewmachinelearning sig Door Lucas Jellema
 
IoT and the Future of work
IoT and the Future of work IoT and the Future of work
IoT and the Future of work
 
Oracle OpenWorld 2017 Review (31st October 2017 - 250 slides)
Oracle OpenWorld 2017 Review (31st October 2017 - 250 slides)Oracle OpenWorld 2017 Review (31st October 2017 - 250 slides)
Oracle OpenWorld 2017 Review (31st October 2017 - 250 slides)
 
Ethereum smart contracts - door Peter Reitsma
Ethereum smart contracts - door Peter ReitsmaEthereum smart contracts - door Peter Reitsma
Ethereum smart contracts - door Peter Reitsma
 
Blockchain - Techniek en usecases door Robert van Molken - AMIS - Conclusion
Blockchain - Techniek en usecases door Robert van Molken - AMIS - ConclusionBlockchain - Techniek en usecases door Robert van Molken - AMIS - Conclusion
Blockchain - Techniek en usecases door Robert van Molken - AMIS - Conclusion
 
kennissessie blockchain - Wat is Blockchain en smart contracts @Conclusion
kennissessie blockchain -  Wat is Blockchain en smart contracts @Conclusion kennissessie blockchain -  Wat is Blockchain en smart contracts @Conclusion
kennissessie blockchain - Wat is Blockchain en smart contracts @Conclusion
 
Internet of Things propositie - Enterprise IOT - AMIS - Conclusion
Internet of Things propositie - Enterprise IOT - AMIS - Conclusion Internet of Things propositie - Enterprise IOT - AMIS - Conclusion
Internet of Things propositie - Enterprise IOT - AMIS - Conclusion
 
Omc AMIS evenement 26012017 Dennis van Soest
Omc AMIS evenement 26012017 Dennis van SoestOmc AMIS evenement 26012017 Dennis van Soest
Omc AMIS evenement 26012017 Dennis van Soest
 

Kürzlich hochgeladen

CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
giselly40
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 

Kürzlich hochgeladen (20)

GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 

ADF Mobile: 10 Things you don't get from the developers guide - Luc Bors

  • 1. Real Life ADF Mobile 10 things that you don't get from the developer guide DOAG Konferenz; November 19th 2013
  • 2. Who Am I •  Luc Bors •  Principal Consultant •  AMIS, Netherlands •  Friends of Oracle & Java •  5 Oracle ACE(D) •  Oracle Partner
  • 3. 10 Things One App….. …. 10 Things ….. …. In 45 Minutes…. ….Really…?
  • 4. Remote URLs •  For embedding existing web pages in your ADF Mobile app. •  For instance: –  News Website –  Existing enterprise app Mobile Browser Pages •  Note: –  Best use Optimized Mobile Browser Pages –  Apache Trinidad components –  Oracle recommends using ADF Mobile browser
  • 5. Feature as Remote URL •  Create New Feature as Remote URL •  Create URL Connection
  • 6. Whitelisting •  Why do we need to do this ? •  Mobile device is redirected to m.uefa.com
  • 7. Property Change Events •  Raised when individual attributes of a model object are changed •  Use setter method to update attributes
  • 8. Provider Change Event •  Raised when attributes of type Collection are changed on a model object •  When a new row is created –  fireProviderCreate(providerKey, rowKey, newRow) –  New row is inserted in the UI without refreshing other parts of the page •  When a row is deleted –  fireProviderDelete(providerKey, rowKey) – Row is deleted in the Iterator •  When the collection is refreshed –  fireProviderRefresh(providerKey) –  Iterator is refreshed –  Row currency is lost. providerChangeSupport.fireProviderRefresh("stadiums");!
  • 9. Device Interaction •  The Device Datacontrol •  Drag n Drop support •  Attributes as fields •  Operations as buttons
  • 10. Camera interaction •  Take a picture …………… import oracle.adf.model.datacontrols.device; DeviceManagerFactory.getDeviceManager().getPicture( 100, DeviceManager.CAMERA_DESTINATIONTYPE_FILE_URI, DeviceManager.CAMERA_SOURCETYPE_CAMERA, false, DeviceManager.CAMERA_ENCODINGTYPE_PNG, 200, 200); •  …… or get one from the Library DeviceManager.CAMERA_SOURCETYPE__PHOTOLIBRARY
  • 11. Be careful !! •  DESTINATIONTYPE_DATA_URL you will get the image as base64 encoded string •  Camera’s are very good and picture quality is amazing. –  Encoding such images as base64 causes memory issues •  Don’t blow up your app. –  iOS you should set quality parameter to a value less then 50 to avoid memory issues –  On Android out-of-memory can be caused with default image settings. Make image smaller by setting targetWidth and targetHeight •  Small sized images can be uploaded using web services.
  • 12. Data Services Device Native Container ADF Controller Local HTML Server HTML Push Handler Java VM ADF Model Device Services JDBC Cordova Business Logic Configuration Server Credential Management, SSO & Access Control ADF Mobile AMX View Web View App Config HTML5 & JavaScript Presentation SQLite Encrypted SQLite DB Mobile Device Server-Generated HTML APN/GCM Push Services SOAP & REST Services Server
  • 13. Using Webservices •  The Webservice Datacontrol
  • 14. Using Webservices directly •  Just drag & drop the method from the Data Control
  • 15. Using Webservices from Java •  Invoke directly from java. •  Does not use the binding layer •  Uses Framework utilityMethod •  AdfmfJavaUtilities.invokeDataControlMethod() •  Datacontrol must be in available in DataBindings.cpx
  • 16. Advantages •  •  •  •  •  Provides more flexibility to shape model to mobile UI Perform client side validation Minimize the number of round trips Offline caching Mash-up data from multiple services
  • 17. Patterns… •  SOAP Webservice •  Web Service Data Control
  • 20. Obviously all the same…… •  Service Object Data Control Pattern –  Whatever “back end” data source you use….. –  It is completely transparent for UI
  • 21. Feature Archives •  Feature Archives can be reused •  Deploy ADF Mobile app as FAR •  Consume features from FAR in other apps
  • 22. Feature Archives •  Feature Archives Deployment Profile •  Connections Detail should be used (default is wrong ?) •  Only if connection is available in consuming APP name only works
  • 23. Springboard & navigationbar •  Springboard configuration in adfmf-application.xml
  • 26. Configuring the springboard –  Do Not set AllowDeviceAccess to False for Springboard Feature !
  • 27. Navigation •  Declarative Navigation –  Button/Link/ListItem <amx:listItem id="li1" action="detail" showLinkIcon="true">! <amx:setPropertyListener id="x" from="#{row.rowKey}”
 to="#{pageFlowScope.myBean.currentStadium}" ! type="action"/>!
  • 28. Navigation •  Declarative Navigation –  Button/Link/ListItem •  Programmatic Navigation –  JavaCode AdfmfContainerUtilities.invokeContainerJavaScriptFunction(! AdfmfJavaUtilities.getFeatureName(), ! "adf.mf.api.amx.doNavigation", ! new Object[] { ”detail" });
     } !
  • 29. Navigation •  Drawback –  No access to setPropertyListener •  Solution if you need that functionality: –  Set the value in java Code ValueExpression ve =! AdfmfJavaUtilities.getValueExpression(! "#{pageFlowScope.myBean.currentStadium}”! , String.class);! ve.setValue(AdfmfJavaUtilities.getAdfELContext()! , getCurrentStadium());!
  • 30. Smart Navigation •  Search Stadiums •  What if resultset only contains one row ? if (s_stadiums.size()==1){! // only one stadium! Lets navigate AdfmfContainerUtilities.invokeContainerJavaScriptFunction(! AdfmfJavaUtilities.getFeatureName(), ! "adf.mf.api.amx.doNavigation", ! new Object[] { "detail" });! } !
  • 31. Preserve Current Row •  Inside the <amx:listItem> element of the list page, you need to add a <amx:setPropertyListener> element to store the row key in a pageFlowScope variable. •  In the page definition of the detail page, you need to add a setCurrentRowWithKey action, which uses the pageFlowScope variable to set the current row. •  In the page definition of the detail page, you need to add an invokeAction executable for the setCurrentRowWithKey action to ensure the current row is automatically set when entering the detail page.
  • 32. Preserve Current Row (A-Team) •  Easiest way: –  Download and install extension –  adf-mobile-persistence-sample-install.zip –  Extension contains StatefulIteratorBeanDcDefinition <AdapterDataControl id="PlayerService”
 FactoryClass="oracle.adf.model.adapter.DataControlFactoryImpl” 
 ImplDef=
 "oracle.ateam.sample.mobile.model.bean.StatefulIteratorBeanDcDefinition”! ……….
 Definition=
 "com.blogspot.lucbors.soccer.mobile.model.service.PlayerService” BeanClass=
 "com.blogspot.lucbors.soccer.mobile.model.service.PlayerService"! } ! •  NOTE: This will be the way ADF Mobile will do it in future versions
  • 33. Gesture Support •  You can configure Button, Link, and List Item components to react to the following gestures: •  •  •  •  •  Swipe to the right Swipe to the left Swipe up Swipe down Tap-and-hold
  • 34. Gesture examples •  The Swipe Gesture <amx:actionListener binding="#{mybean.DoX}" type="swipeRight"/> •  The Tap Gesture <amx:showPopupBehavior popupid="pop1" type="tapHold“ />
  • 36. Ingredients •  A (Web) service and datacontrol •  A Page with Listview •  An ActionListener with type SwipeDown •  Smart Java Code to call service conditionally <amx:listView var="row”! value="#{bindings.allLocations.collectionModel}" ! fetchSize="#{bindings.allLocations.rangeSize}”! id="lv1"> ! <amx:listItem id="li1"> ! <amx:actionListener type="swipeDown” ! binding="#{pageFlowScope.locationsBackingBean.checkForUpdates}”>! !
  • 37.
  • 39.
  • 40. Swimming-lanes •  No Horizontal scrollbar •  All ‘data’ available •  Use panelGroupLayout –  Width 100% <amx:panelGroupLayout layout="horizontal”
 inlineStyle="width:100%;">!
  • 41. Push Notification (GCM) •  •  •  •  Subscribe to GCM Receive token Register with Enterprise app Enterprise app Pushes message to GCM •  GCM delegates message to device(s)
  • 42. Server Side •  Class to push a message to a device. –  –  –  –  import com.google.android.gcm.server.Constants; import com.google.android.gcm.server.Message; import com.google.android.gcm.server.Result; import com.google.android.gcm.server.Sender; public class PushMessageBean { public String message; private Sender sender = new Sender(”<someSenderKey>"); public static final String ERROR_NOT_REGISTERED="NotRegistered”; private Message createMessage(String msg) { String sound = "default"; Message message = new Message.Builder().collapseKey("1") .delayWhileIdle(true) .addData("alert", msg) .addData("sound", sound).build(); return message;}
  • 43. Server Side Send Code public void pushNow(ActionEvent actionEvent) { // Add event code here… DCBindingContainer bindings = (DCBindingContainer) BindingContext.getCurrent().getCurrentBindingsEntry(); DCIteratorBinding iter = bindings.findIteratorBinding("GcmSubscribersIterator"); Row curr = iter.getCurrentRow(); String target = (String)curr.getAttribute("DeviceToken"); String type = (String)curr.getAttribute("DeviceType"); if(type.equalsIgnoreCase("Android")){ Message message = createMessage(this.message); Result result = null; sendSingleMessage(target, message); }
  • 44. Example •  Select device •  Send message •  Get notified +
  • 46. Summary One App….. …. 10 Things ….. …. In 45 Minutes… ….. Really ! 1.  2.  3.  4.  5.  Whitelisting Provider Refresh Pictures Data Service Pattern Feature Archives 6.  Springboard 7.  Prog Navigation 8.  Keep current Row 9.  Pull to Refresh 10.  Push Notifications
  • 47. User Experience Patterns and Guidelines WIKI
  • 48. Luc Bors, AMIS, The Netherlands Luc.Bors@amis.nl LucBors@gmail.com Follow me on : @lucb_