Building Highly Reusable Taskflows
Upcoming SlideShare
Loading in...5
×
 

Building Highly Reusable Taskflows

on

  • 6,580 views

Presentation conducted at ODTUG Kaleidoscope 2011, OOW 2011 and UKOUG 2011. Sample application can be downloaded from my blog: ...

Presentation conducted at ODTUG Kaleidoscope 2011, OOW 2011 and UKOUG 2011. Sample application can be downloaded from my blog: http://blogs.oracle.com/jheadstart/entry/core_adf11_building_reusable_task

Statistics

Views

Total Views
6,580
Views on SlideShare
6,558
Embed Views
22

Actions

Likes
6
Downloads
325
Comments
1

6 Embeds 22

http://paper.li 11
http://www.linkedin.com 4
http://twitter.com 3
http://a0.twimg.com 2
http://us-w1.rockmelt.com 1
http://www.docshut.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
  • it's very useful
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Building Highly Reusable Taskflows Building Highly Reusable Taskflows Presentation Transcript

  • <Insert Picture Here> Building Highly Reusable ADF Task FlowsSteven Davelaar twitter:@stevendavelaarblogs: blogs.oracle.com/jheadstart and blogs.oracle.com/ateam_webcenterOracle Fusion Middleware Architects Team (the “A-team”)
  • Agenda• Reusability requirements - generic• Addressing generic reusability requirements• Reusability requirements – taskflow specific• Task flow reuse cases 2
  • Reusability Requirements - Generic• Use with traditional menu structure• Use with dynamic tabs• Use with human workflow task list• Use as WebCenter portlet• Add at runtime using WebCenter ComposerDevelop User Interface Services – Not Pages! 3
  • Addressing Reusability Requirements• Use bounded taskflows with page fragments – Reusable UI service with clearly defined contract• Embed as (Dynamic) ADF Region in any page.• An ADF region: – Represents a task flow as part of a page – Is similar to a portlet, but for local functionality – Can share information and transaction boundaries with other page content 4
  • UIShell – Tabbed Menu 5
  • UIShell – Dynamic Tabs with Tree Menu 6
  • Using Dynamic ADF Regions – Additionalcomplexity• You can no longer use standard JSF navigation – No pages to go to, only regions• XMLMenuModel cannot be used out of the box – focusRowKey maps to current page• “Unioned” parameter list for all regions – Parameters of each task flow in taskflow binding 7
  • Addressing the complexity• Use DynamicRegionManager to provide current task flow and params• Task flow details provided by TaskflowConfigBean• Subclass NavigationHandlerImpl to allow your developers to use JSF-like navigation to regions• Subclass XMLMenuModel to add support for regions• Use parameter map for dynamic region binding• Keep track of changed parameters – Refresh=ifNeeded does not work with param map 8
  • UI Shell at Runtime UIShell.jsf Dynamic Region <af:region value=“#{bindings.mainRegion.regionModel /> UIShellPageDef<taskFlow id="mainRegion“taskFlowId="${pageFlowScope.dynamicRegionManager.currentTaskFlowId}"parametersMap="${pageFlowScope.dynamicRegionManager.currentParamMap}"RefreshCondition="{pageFlowScope.dynamicRegionManager.currentParamMapChanged}“ />DynamicRegionManager TaskFlowConfigBeanget/setCurrentTaskFlowName namegetCurrentTaskflowId taskflowIdgetCurrentParamMap paramMap 9
  • UIShell at Runtime – Managed Beans 10
  • TaskFlowConfigBean - Jobs 11
  • Navigating Using Dynamic Regions• Create custom RegionNavigationHandler – configure in faces-config.xml – Provides standard JSF navigation through superclass – Allows setting current dynamic region: region name specified after navigation outcome, separated by colon 12
  • Navigating Using Dynamic Regions• Action ”uishell:Jobs” – navigates to UIShell.jsf page (if needed) – sets current task flow “Jobs” on mainRegionManager – TaskFlowId picked up from JobsTaskFlowConfigBean – Parameters picked up from JobsTaskFlowConfigBean 13
  • Reusability Requirements – Taskflow Specific• Configure to show in read-only mode• Configure to show one specific row (deeplinking)• Configure to go to summary or detail page• Configure to start in create mode (new row)• Configure to hide UI components buttons (Save, Cancel, Nav. Buttons, Search region)• Configure to use both as “parent” or as “child” within another region• Configure to use in popup / details lookup 14
  • Reuse Case 1 – Adding Menu Entry to View Jobs 15
  • Reuse Case 1 – Adding Menu Entry to View Jobs• Enable jobs task flow to run in read-only mode – Add readOnly parameter to the jobs task flow – Set job fields readOnly based on readOnly param – hide save button based on readOnly param – Set title to View Job in readOnly mode• Add menu entry “ViewJobs” to menu.xml• Create ViewJobsTaskFlowConfig bean – Set readOnly parameter to true 16
  • Reuse Case 1 – Adding Menu Entry to View Jobs 17
  • Reuse Case 2 – Add Deeplinking to Edit Job 18
  • Reuse Case 2 – Add Deeplinking to Edit JobPrepare Jobs task flow:• Add rowKeyValue parameter• Create method activity SetCurrentRow – DnD SetCurrentRowWithKeyValue method, or – DnD custom queryByKeyValue AM method – Navigate to EditJob page• Start task flow with router activity – Check value rowKeyValue parameter – If not null, go to setCurrentRow method activity – If null, go to SearchJobs page 19
  • Reuse Case 2 – Add Deeplinking to Edit Job 20
  • Reuse Case 2 – Add Deeplinking to Edit Job 21
  • Reuse Case 2 – Add Deeplinking to Edit JobPrepare Employees task flow:• Add task flow call activity CallJob to Employees TF• Create Page Definition for CallJob• Set rowKeyValue param to current JobId: – Reuse EditEmployee Page Def for CallJob activity – How: Change usage in PageMap in Databindings.cpx, delete newly created page def• Add control flow rule from EditEmployee to CallJob• Add editJob command link to EditEmployee page 22
  • Reuse Case 2 – Add Deeplinking to Edit Job 23
  • Reuse Case 3 – View Job Details in Popup 24
  • Reuse Case 3 – View Job Details in PopupTwo implementation strategies:• Jobs TF Call with Run as Dialog option – This option cannot be used with page fragments! – Need PopupShell TF with PopupShell page that embeds Jobs region – Too complex ....• Add popup component, and drag and drop Jobs TF as region inside popup 25
  • Reuse Case 3 – View Job Details in Popup• (Add readOnly param to Jobs TF)• Add Popup with Dialog to EditEmployee – Set childCreation=deferred to prevent premature region loading – Set contentDelivery=lazyUncached• DnD Jobs TF into Dialog – Set readOnly and rowKeyValue params – Set refresh=ifNeeded• Set rowKeyValue param to current JobId• Add ViewJob command link to invoke Popup – Or use contextFacet on JobId• Optional: add hideToolbarButtons param 26
  • Reuse Case 3 – View Job Details in Popup 27
  • Reuse Case 4 – Employees TF as Child inDepartment Page 28
  • Reuse Case 4 – Employees TF as Child inDepartment Page• Restrict query employees based on department – Set up view criteria with departmentId bind var, or – Use dynamic iterator to bind to EmployeesView3• Using dynamic iterator binding – Add TF parameter dataCollection – Set “Binds” property of iterator to dataCollection param• Auto-query in Departments page – Use initialQueryOverridden property on search binding• Hide DepartmentId, Save, Cancel items when used in Departments page – Check dataCollection parameter, or add new params 29
  • Reuse Case 4 – Employees TF as Child inDepartment Page 30
  • Reuse Case 4 – Employees TF as Child inDepartment Page 31
  • Reuse Case 5 – Deeplinking from External Source 32
  • Reuse Case 5 – Deeplinking from External Source• DynamicRegionManager checks request params – PostConstruct method looking for taskFlowName param – Set current taskflow – Map other request params to TF params ../faces/UIShell?taskFlowName=Jobs&rowKeyValue=AC_MGR 33
  • Data Control Scope and Transactions• Data Control Scope – Shared: all TF’s share same app module instance – Isolated: Each TF instance has own app module instance• Transaction Scope – With isolated data control scope each TF has own transaction – With shared data control scope, transaction is shared by default, but can be changed using Transaction setting 34
  • Data Control Scope and Transactions• Data Control Scope and Transaction are defined at task flow definition level • Limits reuse options! • Isolated transactions needed for dynamic tabs • Shared transaction needed for child region• Enhancement request: set DC scope and transaction on TF Call activity and TF binding• Work around: • Create complete TF as template (templates can be nested) • Create one TF with isolated transaction based on this template • Create one TF with shared transaction based on this template 35
  • Testing Task Flows• ADF EMG Taskflow Tester • Testing of bounded task flows with pages and fragments • Support for complex, composite input parameters • Input parameters and run options can be saved as testcases • XML Import/export facility for testcases• It’s Free! Install through Help -> Check for Updates 36
  • Summary• Use bounded task flows with page fragments• Set up infrastructure to use ADF regions in UIShell• Think about possible reuse cases • Define required input parameters • Add router activity for reuse-case-based conditional flows • Configure use of dynamic iterator binding • Configure conditional display of UI components• Think carefully about data control scope and transaction settings• Use the ADF EMG Task Flow Tester 37
  • Useful Resources• Blog post: UIShell with Menu Driving a Dynamic Region • Contains links to presentation and sample application • blogs.oracle.com/jheadstart/entry/core_adf11_uishell_with_menu• ADF EMG Samples • java.net/projects/smuenchadf/pages/ADFSamples• ADF EMG Task Flow Tester • java.net/projects/adf-task-flow-tester• ADF Architecture Square • Task Flow Fundamentals (http://www.oracle.com/technetwork/developer- tools/adf/learnmore/adf-task-flow-trans-fund-v1-1-1864319.pdf) 38
  • 39