SlideShare une entreprise Scribd logo
1  sur  63
Télécharger pour lire hors ligne
1	
  
About me
3
Ski Route
4
Let’s Go!
5
6
Bindings?
7
Application Layers
8
Layers Interaction
9
Fundamental Theorem of Software Engineering (FTSE)
We	
  can	
  solve	
  any	
  problem	
  by	
  
introducing	
  an	
  extra	
  level	
  of	
  
indirec8on.	
  
	
  
…except	
  for	
  the	
  problem	
  of	
  too	
  many	
  
levels	
  of	
  indirec8on	
  
10
Model Layer
10
ADF Model
12
ADF Model
Why ADF Bindings?
12
•  A	
  core	
  part	
  of	
  Oracle	
  ADF	
  
•  Powered	
  by	
  Oracle	
  
•  Declara8ve	
  programming	
  	
  
approach	
  
•  Common	
  UI	
  tasks	
  out-­‐of-­‐
the-­‐box	
  
	
  	
  	
  	
  	
  	
  	
  	
  –	
  	
  Naviga8on	
  
	
  	
  	
  	
  	
  	
  	
  	
  –	
  	
  Range	
  fetching	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  –	
  	
  State	
  Management	
  
•  ADF	
  Bindings	
  API	
  
Ski Route
13
UI Component Binding
15
	
  <af:inputText	
  value="#{bindings.FirstName.inputValue}"	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  label="#{bindings.FirstName.hints.label}"	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  required="#{bindings.FirstName.hints.mandatory}"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  …	
  
EmpViewPageDef.xml	
  
16
ADF Model Artifacts
17
	
  
² PageDef.xml	
  
² Binding	
  metadata	
  
² DataBinding.cpx	
  
² Page	
  defini8on	
  map	
  
² Data	
  Controls	
  	
  
² Adfm.xml	
  
² DataBinding.cpx,	
  DataControls.dcx,	
  	
  
² bc4j.xcfg,	
  *.jpx	
  
² Web.xml	
  
² ADFBindingFilter	
  
² ADF	
  libraries	
  
Page Definition File
18
	
  	
  	
  	
  <executables>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <iterator	
  DataControl="EmployeesAMDataControl”	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  Binds="VEmployees"	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  RangeSize="25"	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  id="VEmployeesIterator"/>	
  
	
  	
  	
  	
  </executables>	
  
	
  	
  	
  	
  <bindings>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <acributeValues	
  id="EmployeeId”	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  IterBinding="VEmployeesIterator”>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <AcrNames>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <Item	
  Value="EmployeeId"/>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  </AcrNames>	
  
	
  	
  	
  	
  	
  	
  	
  	
  </acributeValues>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <acributeValues	
  id="FirstName”	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  IterBinding="VEmployeesIterator”>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <AcrNames>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <Item	
  Value="FirstName"/>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  </AcrNames>	
  
	
  	
  	
  	
  	
  	
  	
  	
  </acributeValues>	
  
	
  	
  	
  	
  	
  	
  	
  	
  …	
  
	
  	
  	
  	
  </bindings>	
  
<af:inputText	
  value="#{bindings.FirstName.inputValue}”	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  label="#{bindings.FirstName.hints.label}"	
  
	
  	
  	
  	
  
Page Definition File. Executables
19
² Iterator	
  <iterator>	
  
² Method	
  Iterator	
  <methodIterator>	
  
² Variable	
  Iterator	
  <varaibleIterator>	
  
² Invoke	
  Ac8on	
  <invokeAc8on>	
  
² Page	
  <page>	
  
² Search	
  Region	
  <searchRegion>	
  
² Task	
  Flow	
  <taskFlow>	
  
² Mul8task	
  Flow	
  <mul8TaskFlow>	
  
Page Definition File. Bindings
20
² Ac8on	
  bindings	
  
² Ac8on	
  <ac8on>	
  
² Method	
  ac8on	
  <methodAc8on>	
  
² Value	
  bindings	
  
² Current	
  Row	
  	
  
² Acribute	
  value	
  <acributeValues>	
  
² Boolean	
  value	
  <bucon>	
  
² List	
  <list,	
  listOfValues>	
  
² Row	
  Set	
  
² Tree	
  <tree>	
  
² DVT	
  <graph>	
  
	
  
Ski Route
21
22
Binding Context vs Binding Container
23
JSF Lifecycle vs ADF Page Lifecycle
24
Bindings in ADF lifecycle. ADF Binding Filter
25
Bindings in ADF lifecycle. Restore View
•  Restore	
  View	
  
•  Apply	
  Request	
  Values	
  
•  Process	
  valida8ons	
  
•  Update	
  Model	
  Values	
  	
  
•  Invoke	
  Applica8on	
  
•  Render	
  Response	
  
26
Bindings in ADF lifecycle. Restore View
•  Restore	
  View	
  
	
  	
  	
  	
  	
  	
  -­‐	
  Init	
  Context	
  	
  
	
  	
  	
  	
  	
  	
  	
  -­‐	
  Prepare	
  Model	
  
•  …	
  
Binding Container at Prepare Model
27
² Page	
  Parameters	
  
² Task	
  Flow	
  Parameters	
  
² Executables	
  with	
  Refresh=prepareModel	
  
² Iterators,	
  Invoke	
  Ac8ons	
  	
  	
  
² Page	
  Template	
  	
  
² Task	
  Flow	
  bindings	
  
	
  
28
Bindings in ADF lifecycle. Render Response
•  Restore	
  View	
  
•  Apply	
  Request	
  Values	
  
•  Process	
  valida8ons	
  
•  Update	
  Model	
  Values	
  	
  
•  Invoke	
  Applica8on	
  
•  Render	
  Response	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  -­‐	
  Prepare	
  render	
  (render	
  Model)	
  
Iterator Refresh Attribute
29
² default	
  (deferred)	
  
²  On	
  demand	
  
² always	
  
²  Prepare	
  Model,Update	
  Model,	
  
	
  	
  	
  	
  	
  Render	
  Model	
  	
  
² ifNeeded	
  	
  	
  
²  Prepare	
  Model,	
  Render	
  Model	
  
² never	
  	
  
² prepareModel	
  
² prepareModelifNeeded	
  
² renderModel	
  
² renderModelifNeeded	
  
#{viewScope.reallyNeedToRefresh}	
  
Ski Route
30
Accessing Binding Container
31
public	
  BindingContainer	
  getBindingContainer()	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  BindingContext	
  bindingContext	
  =	
  BindingContext.getCurrent();	
  
	
  	
  	
  	
  	
  	
  	
  	
  return	
  bindingContext.getCurrentBindingsEntry();	
  
}	
  
²  Get Binding Context instance
²  Get Current Binding Container
	
  
Executing Method Action
32
²  Get Operation Binding from Binding Container
²  Set up parameters
²  Execute
²  Check for errors
	
  
public	
  void	
  raisePay(Integer	
  employeeId)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  BindingContainer	
  bindings	
  =	
  getBindings();	
  
	
  	
  	
  	
  	
  	
  	
  	
  Opera8onBinding	
  op	
  =	
  bindings.getOpera8onBinding("raisePay");	
  
	
  	
  	
  	
  	
  	
  	
  	
  op.getParamsMap().put("employeeId",	
  employeeId);	
  
	
  	
  	
  	
  	
  	
  	
  	
  Object	
  result	
  =	
  op.execute();	
  
	
  	
  	
  	
  	
  	
  	
  	
  if	
  (!op.getErrors().isEmpty())	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  //Do	
  something	
  with	
  this	
  list	
  of	
  JboExcep8ons	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  List	
  errorList	
  =	
  op.getErrors();	
  
	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  }	
  
	
  <methodAc8on	
  Ac8on="invokeMethod”	
  	
  MethodName="raisePay”	
  id="raisePay”	
  
	
  	
  	
  ...	
  
Accessing Attribute Binding
33
	
  public	
  String	
  getEmailValue()	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  BindingContainer	
  bindings	
  =	
  getBindings();	
  
	
  	
  	
  	
  	
  	
  	
  	
  AcributeBinding	
  emailBinding	
  =	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  (AcributeBinding)	
  bindings.getControlBinding("Email");	
  
	
  	
  	
  	
  	
  	
  	
  	
  return	
  (String)	
  emailBinding.getInputValue();	
  
	
  	
  	
  	
  }	
  
²  Get Binding Container
²  Find Attribute Binding by Id
²  Return Input Value
	
  
	
  
<bindings>	
  
	
  	
  	
  	
  <acributeValues	
  IterBinding="VEmployeesIterator"	
  id="Email">	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <AcrNames>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <Item	
  Value="Email"/>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  </AcrNames>	
  
	
  	
  	
  	
  	
  </acributeValues>	
  
…	
  
Accessing LOV Binding
34
²  Get Binding Container
²  Find JUCtrlListBinding by Id
²  Get Selected Row
²  Return Attribute Value
	
  	
  	
  	
  
	
  public	
  String	
  getDepartmentName()	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  BindingContainer	
  bindings	
  =	
  getBindings();	
  
	
  	
  	
  	
  	
  	
  	
  	
  JUCtrlListBinding	
  lov	
  =	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  (JUCtrlListBinding)	
  bindings.getControlBinding("DepartmentId");	
  
	
  	
  	
  	
  	
  	
  	
  	
  //	
  Get	
  the	
  selected	
  row	
  
	
  	
  	
  	
  	
  	
  	
  	
  Row	
  selectedRow	
  =	
  (Row)	
  lov.getSelectedValue();	
  
	
  	
  	
  	
  	
  	
  	
  	
  return	
  (String)	
  selectedRow.getAcribute("DepartmentName");	
  }	
  
	
  	
  	
  	
  	
  
<bindings>	
  
	
  <list	
  IterBinding="VEmployeesIterator"	
  Sta8cList="false"	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  DTSupportsMRU="true"	
  SelectItemValueMode="ListObject"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  Uses="LOV_DepartmentId"	
  id="DepartmentId”/>	
  
…	
  
Accessing Iterator Binding
35
²  Get Binding Container as DCBindingContainer
²  Find DCIteratorBinding by Id
²  Execute VO query
²  Get Current Row (ViewRowImpl)
²  Get View Object Instance
	
  	
  	
  	
  
	
  public	
  void	
  workWithIterator()	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  DCBindingContainer	
  bindings	
  =	
  (DCBindingContainer)	
  getBindings();	
  
	
  	
  	
  	
  	
  	
  	
  	
  DCIteratorBinding	
  iter	
  =	
  bindings.findIteratorBinding("VEmployeesIterator");	
  
	
  	
  	
  	
  	
  	
  	
  	
  //Execute	
  RowSet	
  query	
  
	
  	
  	
  	
  	
  	
  	
  	
  iter.executeQuery();	
  
	
  	
  	
  	
  	
  	
  	
  	
  //Get	
  current	
  row	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  Row	
  r	
  =	
  iter.getCurrentRow();	
  
	
  	
  	
  	
  	
  	
  	
  	
  //Get	
  View	
  Object	
  
	
  	
  	
  	
  	
  	
  	
  	
  ViewObject	
  vo	
  =	
  iter.getViewObject();	
  }	
  
	
  <iterator	
  Binds="VEmployees"	
  RangeSize="25"	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  DataControl="EmployeesAMDataControl"	
  id="VEmployeesIterator"/>	
  
Ski Route
36
Composite ADF page
37
38
Composite ADF page
²  Everything	
  in	
  one	
  page	
  
²  Regions	
  with	
  task	
  flows	
  
²  Dynamic	
  declara8ve	
  component	
  
39
Composite ADF page
²  Everything	
  in	
  one	
  page	
  
²  Regions	
  with	
  task	
  flows	
  
²  Dynamic	
  declara8ve	
  component	
  
40
Composite ADF page
²  Everything	
  in	
  one	
  page	
  
²  Regions	
  with	
  task	
  flows	
  
²  Dynamic	
  declara@ve	
  component	
  
Dynamic Declarative Component
41
²  Uses Binding Container of the parent page
²  Doesn’t have own Binding Container
	
  
…	
  
<af:gridCell	
  ...>	
  
	
  	
  	
  	
  	
  <af:declara8veComponent	
  viewId="/fragments/Approvals.jsff"	
  id="dc1"/>	
  
</af:gridCell>	
  
….	
  
<ui:composi8on	
  xmlns:ui="hcp://java.sun.com/jsf/facelets"	
  	
  
...	
  
	
  <af:componentDef	
  var="acrs"	
  componentVar="comp">	
  
	
  	
  	
  	
  	
  	
  	
  	
  <af:panelBox	
  text="Approvals"	
  id="pb1">	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <af:listView	
  value="#{bindings.Approvals.collec8onModel}"	
  var="item”	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  fetchSize="#{bindings.Approvals.rangeSize}"	
  id="lv1”>	
  
…	
  
MainPage.jsf	
  
Approvals.jsff	
  
Bindings for Declarative Component
42
²  Create Page Def file for the fragment
²  Add mapping to the DataBindings.cpx
	
  <pageMap>	
  
	
  	
  	
  	
  	
  	
  	
  <page	
  path="/fragments/Approvals.jsff”	
  usageId="dashboard_view_ApprovalsPageDef"/>	
  
	
  	
  </pageMap>	
  
	
  	
  <pageDefini8onUsages>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <page	
  id="dashboard_view_ApprovalsPageDef"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  path="com.adfprac8ce.dashboard.view.pageDefs.ApprovalsPageDef"/>	
  
	
  	
  </pageDefini8onUsages>	
  
	
  
<pageDefini8on	
  id="ApprovalsPageDef"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  Package="com.adfprac8ce.dashboard.view.pageDefs">	
  
	
  	
  	
  	
  <executables>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <iterator	
  Binds="Approvals”	
  id="ApprovalsIterator”	
  …	
  
	
  	
  	
  	
  	
  	
  	
  	
  ...	
  
	
  
DataBindings.cpx	
  
ApprovalsPageDef.xml	
  
Bindings for Declarative Component
43
²  Find or Create BC with findBindingContainerByPath
²  Refer to the Backing Bean property
	
  
	
   public	
  class	
  ApprovalsBean	
  {	
  
	
  	
  	
  	
  public	
  BindingContainer	
  getBindings()	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  BindingContext	
  bc	
  =	
  BindingContext.getCurrent();	
  
	
  	
  	
  	
  	
  	
  	
  	
  return	
  bc.findBindingContainerByPath("/fragments/Approvals.jsff");	
  
	
  	
  	
  	
  }	
  
…	
  
<ui:composi8on	
  xmlns:ui="hcp://java.sun.com/jsf/facelets"	
  	
  
	
  <c:set	
  var="bindings"	
  value="#{backingBeanScope.ApprovalsBean.bindings}"/>	
  
	
  <af:componentDef	
  var="acrs"	
  componentVar="comp">	
  
	
  	
  	
  	
  	
  	
  	
  	
  <af:panelBox	
  text="Approvals"	
  id="pb1">	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <af:listView	
  value="#{bindings.Approvals.collec8onModel}"	
  var="item”	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  fetchSize="#{bindings.Approvals.rangeSize}"	
  id="lv1”>	
  
…	
  
ApprovalsBean.java	
  
Approvals.jsff	
  
Ski Route
44
Bindings for Adaptive UI
45
Bindings for Dynamic Table
46
	
  <executables>	
  
	
  	
  	
  	
  	
  	
  <iterator	
  Binds="#{pageFlowScope.voName}"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  DataControl=”DynamicDataModelServiceDataControl“	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  id=”VDynamicIterator"/>	
  
	
  </executables>	
  
	
  <bindings>	
  
	
  	
  	
  	
  	
  <tree	
  IterBinding="VDynamicIterator"	
  id="VDynamic">	
  
	
  	
  	
  	
  	
  	
  	
  	
  <nodeDefini8on	
  Name="VDynamic0"/>	
  
	
  	
  	
  	
  </tree>	
  
	
  </bindings>	
  
	
  
<af:table	
  rows="#{bindings.VDynamic.rangeSize}"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  fetchSize="#{bindings.VDynamic.rangeSize}”	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  …	
  
Dynamic Table
47
<af:table	
  rows="#{bindings.VDynamic.rangeSize}"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  fetchSize="#{bindings.VDynamic.rangeSize}"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  emptyText="#{bindings.VDynamic.viewable	
  ?	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  'No	
  data	
  to	
  display.'	
  :	
  'Access	
  Denied.'}"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  var="row"	
  rowBandingInterval="0”	
  value="#{bindings.VDynamic.collec8onModel}"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  selectedRowKeys="#{bindings.VDynamic.collec8onModel.selectedRow}"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  selec8onListener="#{bindings.VDynamic.collec8onModel.makeCurrent}"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  rowSelec8on="single"	
  id="t1">	
  
	
  	
  	
  	
  <af:forEach	
  items="#{bindings.VDynamic.acributeDefs}”	
  var="def">	
  
	
  	
  	
  	
  	
  	
  	
  	
  <af:column	
  headerText="#{bindings.VDynamic.labels[def.name]}“	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  sortable="true"	
  sortProperty="#{def.name}“	
  id="c2">	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <af:outputText	
  value="#{row[def.name]}"	
  id="ot2"/>	
  
	
  	
  	
  	
  	
  	
  	
  	
  </af:column>	
  
	
  	
  	
  	
  </af:forEach>	
  
</af:table>	
  
	
  
Bindings for Dynamic Form
48
	
  <executables>	
  
	
  	
  	
  	
  	
  	
  <iterator	
  Binds="#{pageFlowScope.voName}"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  DataControl=”DynamicDataModelServiceDataControl“	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  id=”VDynamicIterator"/>	
  
	
  </executables>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <dynamic:form	
  value="#{bindings.VDynamicIterator}"	
  id="f1"/>	
  
Dynamic Component (12c)
49
	
  
	
  
<af:iterator	
  id="i1"	
  value="#{bindings.VDynamic.acributesModel.acributes}"	
  var="acr">	
  
	
  	
  	
  	
  	
  	
  	
  	
  <af:dynamicComponent	
  id="d2"	
  acributeModel="#{acr}"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  value="#{bindings[acr.containerName][acr.name].inputValue}"/>	
  
	
  </af:iterator>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <tree	
  IterBinding=”VDynamicIterator"	
  id="VDynamic">	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <nodeDefini8on	
  Name="VDynamic0"/>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  </tree>	
  
Hand Made Dynamic Form
50
²  DynamicComponent has limitations
²  af:Iterator + af:switcher approach can be used
	
  
	
  
	
  <af:iterator	
  value=”#{bindings.VDynamic.acributesModel.acributes}"	
  var="acr"	
  id="dc_i1">	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <af:switcher	
  id="dc_s1"	
  defaultFacet="Default"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  facetName=”#{bindings[acr.containerName][acr.name].dynamicTypeID}”>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <f:facet	
  name="DATE">	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <af:inputDate	
  id="dc_id1"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  label=”#{bindings[acr.containerName][acr.name].label}”	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  value=”#{bindings[acr.containerName][acr.name].inputValue}”	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  shortDesc="#{bindings[acr.containerName][acr.name].tool8p}”	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  />	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  </f:facet>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <f:facet	
  name=”INT”>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  …	
  
	
  <tree	
  IterBinding="VDynamicterator"	
  id="VDynamic">	
  
	
  	
  	
  	
  	
  	
  	
  	
  <nodeDefini8on	
  Name="VDynamic0"/>	
  
	
  </tree>	
  
	
  
Ski Route
51
Dynamic Bindings. Why?
52
²  DynamicForm is straight forward
²  DynamicForm is not good for Facelets
²  Jdeveloper 12c is still new
²  DynamicComponent has limitations
²  Tree bindings might be expensive
²  Useful for declarative components
²  It’s fun!
²  Have to finish the route
	
  <tree	
  IterBinding="VDynamicterator"	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  id="VDynamic">	
  
	
  	
  	
  	
  	
  	
  	
  	
  <nodeDefini8on	
  Name="VDynamic0"/>	
  
	
  </tree>	
  
	
  
Creating Value Binding
53
²  Get Control Definition Factory
Defini8onFactory	
  defFactory	
  =	
  JUMetaObjectManager.getJUMom().getControlDefFactory();	
  
²  Create an instance of Control Value Definition (JUCtrlAcrsDef,	
  JUCtrlBoolDef,	
  …)
	
  	
  	
  	
  	
  	
  	
  JUCtrlValueDef	
  acrDef	
  =	
  (JUCtrlValueDef)	
  defFactory.createControlDef(BINDING_TYPE);	
  	
  
²  Initialize Control Value Definition
HashMap	
  initValues	
  =	
  new	
  HashMap();	
  
	
  	
  	
  	
  	
  	
  initValues.put(PARAM_NAME,	
  PARAM_VALUE);	
  
	
  	
  	
  	
  	
  	
  acrDef.init(initValues);	
  
	
  
²  Create an instance of Control Value Binding
JUCtrlValueBinding	
  acr	
  =	
  (JUCtrlValueBinding)	
  	
  acrDef.createControlBinding(getBindings());	
  
²  Add Control Value Binding to Binding Container
	
  getBindings().addControlBinding(acr.getName(),	
  acr);	
  
Dynamic Attribute Value Binding
54
private	
  JUCtrlAcrsBinding	
  createAcrValue(String	
  acrName,	
  String	
  iteratorName)	
  {	
  
	
  	
  Defini8onFactory	
  defFactory	
  =	
  	
  JUMetaObjectManager.getJUMom().getControlDefFactory();	
  
	
  	
  JUCtrlAcrsDef	
  acrDef	
  =	
  (JUCtrlAcrsDef)	
  defFactory.createControlDef(DCDefBase.PNAME_TextField);	
  	
  
	
  
	
  	
  //Ini8alize	
  acribute	
  values	
  binding	
  defini8on	
  
	
  	
  HashMap	
  initValues	
  =	
  new	
  HashMap();	
  
	
  	
  initValues.put(DCControlBindingDef.PNAME_IterBinding,	
  iteratorName);	
  
	
  	
  initValues.put(ListBindingDef.PNAME_AcrNames,	
  new	
  String[]	
  {acrName});	
  
	
  	
  initValues.put(JUTags.ID,	
  acrName);	
  
	
  	
  acrDef.init(initValues);	
  
	
  	
  	
  	
  	
  
	
  	
  //Create	
  an	
  instance	
  of	
  acribute	
  values	
  binding	
  
	
  	
  JUCtrlAcrsBinding	
  acr	
  =	
  (JUCtrlAcrsBinding)	
  	
  acrDef.createControlBinding(getBindings());	
  
	
  	
  	
  
	
  	
  //Add	
  the	
  instance	
  to	
  the	
  current	
  binding	
  container	
  
	
  	
  getBindings().addControlBinding(acrDef.getName(),	
  acr);	
  
	
  	
  return	
  acr;	
  	
  }	
  
	
  
Dynamic Attribute Value Binding
55
	
  <af:inputText	
  value="#{BackingBean.accountNo.inputValue}”	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  label="#{BackingBean.accountNo.hints.label}”	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  required="#{BackingBean.accountNo.hints.mandatory}”	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  …	
  
public	
  JUCtrlAcrsBinding	
  getAccountNo()	
  {	
  	
  	
  	
  	
  
	
  	
  	
  	
  String	
  acrName	
  =	
  "AccountNo";	
  
	
  	
  	
  	
  DCControlBinding	
  acr	
  =	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  getBindings().findCtrlBinding(acrName);	
  	
  
	
  	
  	
  	
  if	
  (acr	
  ==	
  null)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  acr	
  =	
  createAcrValue(acrName,	
  "VDynamicIterator");	
  	
  
	
  	
  	
  	
  }	
  	
  	
  
	
  	
  	
  	
  return	
  (JUCtrlAcrsBinding)	
  acr;	
  
}	
  
	
  <acributeValues	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  IterBinding="VDynamicIterator”	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  id="AccountNo">	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  <AcrNames>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <Item	
  Value="AccountNo"/>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  </AcrNames>	
  
	
  	
  	
  </acributeValues>	
  
#{bindings.AccountNo}	
  
Dynamic Boolean (button) Value Binding
56
private	
  JUCtrlBoolBinding	
  createBoolValue(String	
  acrName,	
  String	
  iteratorName)	
  {	
  
	
  	
  Defini8onFactory	
  defFactory	
  =	
  	
  JUMetaObjectManager.getJUMom().getControlDefFactory();	
  
	
  	
  JUCtrlBoolDef	
  acrDef	
  =	
  (JUCtrlBoolDef)	
  defFactory.createControlDef(DCDefBase.PNAME_BuIon);	
  	
  
	
  	
  HashMap	
  initValues	
  =	
  new	
  HashMap();	
  
	
  	
  initValues.put(DCControlBindingDef.PNAME_IterBinding,	
  iteratorName);	
  
	
  	
  initValues.put(ListBindingDef.PNAME_AcrNames,	
  new	
  String[]	
  {acrName});	
  
	
  	
  initValues.put(ListBindingDef.PNAME_ValueList,	
  new	
  String[]	
  {"Y","N"});	
  
	
  	
  …	
  
	
  	
  return	
  acr;	
  
}	
  	
  
	
  
	
  <bucon	
  IterBinding="VDynamicIterator"	
  id="AccountClosed"	
  DTSupportsMRU="false"	
  Sta8cList="true">	
  
	
  	
  	
  	
  	
  	
  <AcrNames>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <Item	
  Value="AccountClosed"/>	
  
	
  	
  	
  	
  	
  	
  </AcrNames>	
  
	
  	
  	
  	
  	
  	
  <ValueList>	
  	
  	
  <Item	
  Value="Y"/>	
  	
  	
  	
  	
  	
  	
  	
  	
  <Item	
  Value="N"/>	
  	
  </ValueList>	
  
	
  </bucon>	
  
Dynamic LOV Binding
57
private	
  JUCtrlListBinding	
  createLOV(String	
  acrName,	
  String	
  lovName,	
  String	
  iteratorName)	
  {	
  
	
  	
  Defini8onFactory	
  defFactory	
  =	
  JUMetaObjectManager.getJUMom().getControlDefFactory();	
  
	
  	
  JUCtrlValueDef	
  lovDef	
  =	
  (JUCtrlValueDef)	
  defFactory.createControlDef(JUTags.PNAME_listOfValues);	
  	
  
	
  
	
  	
  HashMap	
  initValues	
  =	
  new	
  HashMap();	
  
	
  	
  initValues.put(DCControlBindingDef.PNAME_IterBinding,	
  iteratorName);	
  
	
  	
  initValues.put(ListBindingDef.PNAME_AcrNames,	
  new	
  String[]	
  {acrName});	
  
	
  //Specify	
  LOV	
  name.	
  e.g.	
  “LOV_Currency”	
  
	
  	
  initValues.put(ListBindingDef.PNAME_ListServerBindingName,	
  lovName);	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  initValues.put(JUTags.ID,	
  acrName);	
  
	
  	
  lovDef.init(initValues);	
  	
  
	
  	
  JUCtrlListBinding	
  lov	
  =	
  (JUCtrlListBinding)	
  lovDef.createControlBinding(getBindings());	
  
	
  	
  getBindings().addControlBinding(lovDef.getName(),	
  lov);	
  
	
  	
  return	
  lov;	
  
}	
  
	
  
	
  
	
  
	
  
<listOfValues	
  Sta8cList="false"	
  IterBinding="VDynamicIterator"	
  Uses="LOV_Currency"	
  id="Currency"/>	
  
Dynamic Tree Binding
58
	
  public	
  JUCtrlHierBinding	
  createTree(String	
  treeName,	
  String	
  iteratorName)	
  {	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  Defini8onFactory	
  defFactory	
  =	
  JUMetaObjectManager.getJUMom().getControlDefFactory();	
  
	
  	
  	
  	
  	
  	
  	
  	
  JUCtrlValueDef	
  treeDef	
  =	
  (JUCtrlValueDef)	
  defFactory.createControlDef(DCDefBase.PNAME_Tree);	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  HashMap	
  initValues	
  =	
  new	
  HashMap();	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  initValues.put(JUTags.ID,	
  treeName);	
  
	
  	
  	
  	
  	
  	
  	
  	
  initValues.put(JUCtrlHierDef.PNAME_IterBinding,	
  iteratorName);	
  	
  	
  
	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  JUCtrlHierTypeBinding	
  typeBinding	
  =	
  new	
  JUCtrlHierTypeBinding();	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  initValues.put(JUCtrlHierDef.PNAME_TypeBindings,	
  new	
  JUCtrlHierTypeBinding[]	
  {	
  typeBinding	
  });	
  	
  	
  
	
  
	
  	
  	
  	
  	
  	
  	
  	
  treeDef.init(initValues);	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  JUCtrlValueBinding	
  tree	
  =	
  (JUCtrlValueBinding)treeDef.createControlBinding(getBindings());	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  getBindings().addControlBinding(treeDef.getName(),	
  tree);	
  
	
  	
  	
  	
  	
  	
  	
  	
  return	
  (JUCtrlHierBinding)	
  tree;	
  
	
  	
  	
  	
  }	
  
	
  <tree	
  IterBinding="VDynamicterator"	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  id="VDynamic">	
  
	
  	
  	
  	
  	
  	
  	
  	
  <nodeDefini8on	
  Name="VDynamic0"/>	
  
	
  </tree>	
  
	
  
Dynamic Value Binding
59
	
  private	
  JUCtrlValueBinding	
  createBinding(BindingDef	
  bindingDef)	
  {	
  
	
  	
  	
  	
  	
  	
  Defini8onFactory	
  defFactory	
  =	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  JUMetaObjectManager.getJUMom().getControlDefFactory();	
  
	
  	
  	
  	
  	
  	
  JUCtrlValueDef	
  valueDef	
  =	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  (JUCtrlValueDef)	
  defFactory.createControlDef(bindingDef.getBindingType());	
  	
  
	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  HashMap	
  initValues	
  =	
  bindingDef.getInitMap();	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  valueDef.init(initValues);	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  JUCtrlValueBinding	
  binding	
  =	
  (JUCtrlValueBinding)	
  valueDef.createControlBinding(getBindings());	
  
	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  getBindings().addControlBinding(valueDef.getName(),	
  binding);	
  
	
  	
  	
  	
  	
  	
  return	
  binding;	
  
	
  	
  	
  	
  }	
  
Dynamic Value Binding
60
	
  private	
  class	
  BooleanBindingDef	
  extends	
  BindingDef	
  {	
  
	
  
	
  	
  	
  	
  	
  	
  	
  	
  @Override	
  
	
  	
  	
  	
  	
  	
  	
  	
  public	
  HashMap	
  getInitMap()	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  HashMap	
  map	
  =	
  new	
  HashMap();	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  map.put(DCControlBindingDef.PNAME_IterBinding,	
  iteratorName);	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  map.put(ListBindingDef.PNAME_AcrNames,	
  new	
  String[]	
  {acrName});	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  map.put(ListBindingDef.PNAME_ValueList,	
  new	
  String[]	
  {"Y","N"});	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  map.put(JUTags.ID,	
  acrName);	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  return	
  map;	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  
	
  	
  	
  	
  	
  	
  	
  	
  @Override	
  
	
  	
  	
  	
  	
  	
  	
  	
  public	
  String	
  getBindingType()	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  return	
  DCDefBase.PNAME_Bucon;	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  	
  }	
  
Dynamic Iterator Binding
61
	
  public	
  DCIteratorBinding	
  createIterator(String	
  iteratorName,	
  String	
  voName,	
  String	
  dataControlName)	
  {	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  Defini8onFactory	
  defFactory	
  =	
  JUMetaObjectManager.getJUMom().getControlDefFactory();	
  
	
  	
  	
  //Create	
  and	
  init	
  an	
  iterator	
  binding	
  defini8on	
  	
  	
  
	
  	
  	
  JUIteratorDef	
  iterDef	
  =	
  (JUIteratorDef)defFactory.createControlDef(DCDefBase.PNAME_Iterator);	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  HashMap	
  initValues	
  =	
  new	
  HashMap();	
  	
  	
  
	
  	
  	
  initValues.put(JUTags.ID,	
  iteratorName);	
  
	
  	
  	
  initValues.put(JUTags.DataControl	
  ,	
  dataControlName);	
  	
  	
  
	
  	
  	
  initValues.put(JUTags.PNAME_VOName	
  ,	
  voName);	
  	
  	
  
	
  	
  	
  iterDef.init(initValues);	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  //Create	
  an	
  iterator	
  binding	
  instance	
  	
  	
  
	
  	
  	
  	
  DCIteratorBinding	
  iter	
  =	
  iterDef.createIterBinding(BindingContext.getCurrent(),	
  getBindings());	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  //Add	
  the	
  instance	
  to	
  the	
  current	
  binding	
  container	
  	
  	
  
	
  	
  	
  	
  getBindings().addIteratorBinding(iteratorName,	
  iter);	
  	
  	
  
	
  	
  	
  return	
  iter;	
  	
  }	
  	
  
	
  <iterator	
  Binds="VEmployees"	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  DataControl="AppModuleDataControl"	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  id=“VDynamiciterator"/>	
  
Ski Route
62
63	
  

Contenu connexe

Tendances

React Components Lifecycle | React Tutorial for Beginners | ReactJS Training ...
React Components Lifecycle | React Tutorial for Beginners | ReactJS Training ...React Components Lifecycle | React Tutorial for Beginners | ReactJS Training ...
React Components Lifecycle | React Tutorial for Beginners | ReactJS Training ...Edureka!
 
Apache Solr-Webinar
Apache Solr-WebinarApache Solr-Webinar
Apache Solr-WebinarEdureka!
 
Angular App Presentation
Angular App PresentationAngular App Presentation
Angular App PresentationElizabeth Long
 
Customize the login homepage For Oracle EBS R12
Customize the login homepage For Oracle EBS R12Customize the login homepage For Oracle EBS R12
Customize the login homepage For Oracle EBS R12Ahmed Elshayeb
 
ADF - Layout Managers and Skinning
ADF - Layout Managers and SkinningADF - Layout Managers and Skinning
ADF - Layout Managers and SkinningGeorge Estebe
 
Oracle Office Hours - Exposing REST services with APEX and ORDS
Oracle Office Hours - Exposing REST services with APEX and ORDSOracle Office Hours - Exposing REST services with APEX and ORDS
Oracle Office Hours - Exposing REST services with APEX and ORDSDoug Gault
 
Oracle ebs r12_architecture
Oracle ebs r12_architectureOracle ebs r12_architecture
Oracle ebs r12_architectureprasanna432
 
How WebLogic 12c Can Boost Your Productivity
How WebLogic 12c Can Boost Your ProductivityHow WebLogic 12c Can Boost Your Productivity
How WebLogic 12c Can Boost Your ProductivityBruno Borges
 
Whats new in Autonomous Database in 2022
Whats new in Autonomous Database in 2022Whats new in Autonomous Database in 2022
Whats new in Autonomous Database in 2022Sandesh Rao
 
Oracle User Management
Oracle User ManagementOracle User Management
Oracle User ManagementArun Sharma
 
Hibernate
HibernateHibernate
HibernateAjay K
 
OOW15 - personalize and extend oracle ebs for desktops and tablets
OOW15 - personalize and extend oracle ebs for desktops and tabletsOOW15 - personalize and extend oracle ebs for desktops and tablets
OOW15 - personalize and extend oracle ebs for desktops and tabletsvasuballa
 
ORDS - Oracle REST Data Services
ORDS - Oracle REST Data ServicesORDS - Oracle REST Data Services
ORDS - Oracle REST Data ServicesJustin Michael Raj
 
Using oracle-erp-cloud-adapter-oracle-integration
Using oracle-erp-cloud-adapter-oracle-integrationUsing oracle-erp-cloud-adapter-oracle-integration
Using oracle-erp-cloud-adapter-oracle-integrationSwapnil Khoke
 
Oracle Time and Labor (OTL) Setup for Project
Oracle Time and Labor (OTL) Setup for ProjectOracle Time and Labor (OTL) Setup for Project
Oracle Time and Labor (OTL) Setup for Projectiavinashpatel
 

Tendances (20)

React Components Lifecycle | React Tutorial for Beginners | ReactJS Training ...
React Components Lifecycle | React Tutorial for Beginners | ReactJS Training ...React Components Lifecycle | React Tutorial for Beginners | ReactJS Training ...
React Components Lifecycle | React Tutorial for Beginners | ReactJS Training ...
 
Apache Solr-Webinar
Apache Solr-WebinarApache Solr-Webinar
Apache Solr-Webinar
 
Angular App Presentation
Angular App PresentationAngular App Presentation
Angular App Presentation
 
Customize the login homepage For Oracle EBS R12
Customize the login homepage For Oracle EBS R12Customize the login homepage For Oracle EBS R12
Customize the login homepage For Oracle EBS R12
 
ADF - Layout Managers and Skinning
ADF - Layout Managers and SkinningADF - Layout Managers and Skinning
ADF - Layout Managers and Skinning
 
Aem maintenance
Aem maintenanceAem maintenance
Aem maintenance
 
Oracle Office Hours - Exposing REST services with APEX and ORDS
Oracle Office Hours - Exposing REST services with APEX and ORDSOracle Office Hours - Exposing REST services with APEX and ORDS
Oracle Office Hours - Exposing REST services with APEX and ORDS
 
Oracle ebs r12_architecture
Oracle ebs r12_architectureOracle ebs r12_architecture
Oracle ebs r12_architecture
 
BOM & WIP
BOM & WIPBOM & WIP
BOM & WIP
 
oracle-reports6i
oracle-reports6ioracle-reports6i
oracle-reports6i
 
How WebLogic 12c Can Boost Your Productivity
How WebLogic 12c Can Boost Your ProductivityHow WebLogic 12c Can Boost Your Productivity
How WebLogic 12c Can Boost Your Productivity
 
Whats new in Autonomous Database in 2022
Whats new in Autonomous Database in 2022Whats new in Autonomous Database in 2022
Whats new in Autonomous Database in 2022
 
Oracle User Management
Oracle User ManagementOracle User Management
Oracle User Management
 
confirm & alert
confirm & alertconfirm & alert
confirm & alert
 
Hibernate
HibernateHibernate
Hibernate
 
OOW15 - personalize and extend oracle ebs for desktops and tablets
OOW15 - personalize and extend oracle ebs for desktops and tabletsOOW15 - personalize and extend oracle ebs for desktops and tablets
OOW15 - personalize and extend oracle ebs for desktops and tablets
 
ORDS - Oracle REST Data Services
ORDS - Oracle REST Data ServicesORDS - Oracle REST Data Services
ORDS - Oracle REST Data Services
 
Using oracle-erp-cloud-adapter-oracle-integration
Using oracle-erp-cloud-adapter-oracle-integrationUsing oracle-erp-cloud-adapter-oracle-integration
Using oracle-erp-cloud-adapter-oracle-integration
 
Expressjs
ExpressjsExpressjs
Expressjs
 
Oracle Time and Labor (OTL) Setup for Project
Oracle Time and Labor (OTL) Setup for ProjectOracle Time and Labor (OTL) Setup for Project
Oracle Time and Labor (OTL) Setup for Project
 

En vedette

TeKslate Oracle ADF
TeKslate Oracle ADFTeKslate Oracle ADF
TeKslate Oracle ADFtekslate1
 
The field-guide-to-data-science 2015 (second edition) By Booz | Allen | Hamilton
The field-guide-to-data-science 2015 (second edition) By Booz | Allen | HamiltonThe field-guide-to-data-science 2015 (second edition) By Booz | Allen | Hamilton
The field-guide-to-data-science 2015 (second edition) By Booz | Allen | HamiltonArysha Channa
 
How to Become a Data Scientist – By Ryan Orban, VP of Operations and Expansio...
How to Become a Data Scientist – By Ryan Orban, VP of Operations and Expansio...How to Become a Data Scientist – By Ryan Orban, VP of Operations and Expansio...
How to Become a Data Scientist – By Ryan Orban, VP of Operations and Expansio...Galvanize
 
How to become a Data Scientist?
How to become a Data Scientist? How to become a Data Scientist?
How to become a Data Scientist? HackerEarth
 
Oracle ADF Overview
Oracle ADF OverviewOracle ADF Overview
Oracle ADF OverviewBahaa Farouk
 
Cloud foundry architecture and deep dive
Cloud foundry architecture and deep diveCloud foundry architecture and deep dive
Cloud foundry architecture and deep diveAnimesh Singh
 
Cloud foundry presentation
Cloud foundry presentation Cloud foundry presentation
Cloud foundry presentation Vivek Parihar
 
Cloud Foundry Technical Overview
Cloud Foundry Technical OverviewCloud Foundry Technical Overview
Cloud Foundry Technical Overviewcornelia davis
 
How to Become a Data Scientist
How to Become a Data ScientistHow to Become a Data Scientist
How to Become a Data Scientistryanorban
 
Booz Allen Field Guide to Data Science
Booz Allen Field Guide to Data Science Booz Allen Field Guide to Data Science
Booz Allen Field Guide to Data Science Booz Allen Hamilton
 

En vedette (13)

Deep dive into Oracle ADF
Deep dive into Oracle ADFDeep dive into Oracle ADF
Deep dive into Oracle ADF
 
TeKslate Oracle ADF
TeKslate Oracle ADFTeKslate Oracle ADF
TeKslate Oracle ADF
 
Ood 2013 copy
Ood 2013 copyOod 2013 copy
Ood 2013 copy
 
Hidden rocks in Oracle ADF
Hidden rocks in Oracle ADFHidden rocks in Oracle ADF
Hidden rocks in Oracle ADF
 
The field-guide-to-data-science 2015 (second edition) By Booz | Allen | Hamilton
The field-guide-to-data-science 2015 (second edition) By Booz | Allen | HamiltonThe field-guide-to-data-science 2015 (second edition) By Booz | Allen | Hamilton
The field-guide-to-data-science 2015 (second edition) By Booz | Allen | Hamilton
 
How to Become a Data Scientist – By Ryan Orban, VP of Operations and Expansio...
How to Become a Data Scientist – By Ryan Orban, VP of Operations and Expansio...How to Become a Data Scientist – By Ryan Orban, VP of Operations and Expansio...
How to Become a Data Scientist – By Ryan Orban, VP of Operations and Expansio...
 
How to become a Data Scientist?
How to become a Data Scientist? How to become a Data Scientist?
How to become a Data Scientist?
 
Oracle ADF Overview
Oracle ADF OverviewOracle ADF Overview
Oracle ADF Overview
 
Cloud foundry architecture and deep dive
Cloud foundry architecture and deep diveCloud foundry architecture and deep dive
Cloud foundry architecture and deep dive
 
Cloud foundry presentation
Cloud foundry presentation Cloud foundry presentation
Cloud foundry presentation
 
Cloud Foundry Technical Overview
Cloud Foundry Technical OverviewCloud Foundry Technical Overview
Cloud Foundry Technical Overview
 
How to Become a Data Scientist
How to Become a Data ScientistHow to Become a Data Scientist
How to Become a Data Scientist
 
Booz Allen Field Guide to Data Science
Booz Allen Field Guide to Data Science Booz Allen Field Guide to Data Science
Booz Allen Field Guide to Data Science
 

Similaire à Mastering Oracle ADF Bindings

Présentation et bonnes pratiques du pattern MVVM - MIC Belgique
Présentation et bonnes pratiques du pattern MVVM - MIC BelgiquePrésentation et bonnes pratiques du pattern MVVM - MIC Belgique
Présentation et bonnes pratiques du pattern MVVM - MIC BelgiqueDenis Voituron
 
G*ワークショップ in 仙台 Grails(とことん)入門
G*ワークショップ in 仙台 Grails(とことん)入門G*ワークショップ in 仙台 Grails(とことん)入門
G*ワークショップ in 仙台 Grails(とことん)入門Tsuyoshi Yamamoto
 
Typed? Dynamic? Both! Cross-platform DSLs in C#
Typed? Dynamic? Both! Cross-platform DSLs in C#Typed? Dynamic? Both! Cross-platform DSLs in C#
Typed? Dynamic? Both! Cross-platform DSLs in C#Vagif Abilov
 
Data Binding Intro (Windows 8)
Data Binding Intro (Windows 8)Data Binding Intro (Windows 8)
Data Binding Intro (Windows 8)Gilbok Lee
 
The Ring programming language version 1.7 book - Part 48 of 196
The Ring programming language version 1.7 book - Part 48 of 196The Ring programming language version 1.7 book - Part 48 of 196
The Ring programming language version 1.7 book - Part 48 of 196Mahmoud Samir Fayed
 
Применение шаблона проектирования MVVM при разработке архитектуры Windows Pho...
Применение шаблона проектирования MVVM при разработке архитектуры Windows Pho...Применение шаблона проектирования MVVM при разработке архитектуры Windows Pho...
Применение шаблона проектирования MVVM при разработке архитектуры Windows Pho...Nikolay Rumyantsev
 
Whats New for WPF in .NET 4.5
Whats New for WPF in .NET 4.5Whats New for WPF in .NET 4.5
Whats New for WPF in .NET 4.5Rainer Stropek
 
The Ring programming language version 1.6 book - Part 46 of 189
The Ring programming language version 1.6 book - Part 46 of 189The Ring programming language version 1.6 book - Part 46 of 189
The Ring programming language version 1.6 book - Part 46 of 189Mahmoud Samir Fayed
 
Spring framework part 2
Spring framework part 2Spring framework part 2
Spring framework part 2Haroon Idrees
 
The Ring programming language version 1.8 book - Part 50 of 202
The Ring programming language version 1.8 book - Part 50 of 202The Ring programming language version 1.8 book - Part 50 of 202
The Ring programming language version 1.8 book - Part 50 of 202Mahmoud Samir Fayed
 
SUGCON 2014 Using Glass With Sitecore MVC
SUGCON 2014 Using Glass With Sitecore MVCSUGCON 2014 Using Glass With Sitecore MVC
SUGCON 2014 Using Glass With Sitecore MVCGlasslu
 
SUGCon 2014 Sitecore MVC
SUGCon 2014 Sitecore MVCSUGCon 2014 Sitecore MVC
SUGCon 2014 Sitecore MVCmikeedwards83
 
The Ring programming language version 1.9 book - Part 53 of 210
The Ring programming language version 1.9 book - Part 53 of 210The Ring programming language version 1.9 book - Part 53 of 210
The Ring programming language version 1.9 book - Part 53 of 210Mahmoud Samir Fayed
 
The Ring programming language version 1.5.3 book - Part 44 of 184
The Ring programming language version 1.5.3 book - Part 44 of 184The Ring programming language version 1.5.3 book - Part 44 of 184
The Ring programming language version 1.5.3 book - Part 44 of 184Mahmoud Samir Fayed
 
The Ring programming language version 1.5.3 book - Part 54 of 184
The Ring programming language version 1.5.3 book - Part 54 of 184The Ring programming language version 1.5.3 book - Part 54 of 184
The Ring programming language version 1.5.3 book - Part 54 of 184Mahmoud Samir Fayed
 
The Ring programming language version 1.5 book - Part 8 of 31
The Ring programming language version 1.5 book - Part 8 of 31The Ring programming language version 1.5 book - Part 8 of 31
The Ring programming language version 1.5 book - Part 8 of 31Mahmoud Samir Fayed
 
Backbone.js — Introduction to client-side JavaScript MVC
Backbone.js — Introduction to client-side JavaScript MVCBackbone.js — Introduction to client-side JavaScript MVC
Backbone.js — Introduction to client-side JavaScript MVCpootsbook
 
The Ring programming language version 1.4.1 book - Part 13 of 31
The Ring programming language version 1.4.1 book - Part 13 of 31The Ring programming language version 1.4.1 book - Part 13 of 31
The Ring programming language version 1.4.1 book - Part 13 of 31Mahmoud Samir Fayed
 

Similaire à Mastering Oracle ADF Bindings (20)

Présentation et bonnes pratiques du pattern MVVM - MIC Belgique
Présentation et bonnes pratiques du pattern MVVM - MIC BelgiquePrésentation et bonnes pratiques du pattern MVVM - MIC Belgique
Présentation et bonnes pratiques du pattern MVVM - MIC Belgique
 
G*ワークショップ in 仙台 Grails(とことん)入門
G*ワークショップ in 仙台 Grails(とことん)入門G*ワークショップ in 仙台 Grails(とことん)入門
G*ワークショップ in 仙台 Grails(とことん)入門
 
Typed? Dynamic? Both! Cross-platform DSLs in C#
Typed? Dynamic? Both! Cross-platform DSLs in C#Typed? Dynamic? Both! Cross-platform DSLs in C#
Typed? Dynamic? Both! Cross-platform DSLs in C#
 
Data Binding Intro (Windows 8)
Data Binding Intro (Windows 8)Data Binding Intro (Windows 8)
Data Binding Intro (Windows 8)
 
The Ring programming language version 1.7 book - Part 48 of 196
The Ring programming language version 1.7 book - Part 48 of 196The Ring programming language version 1.7 book - Part 48 of 196
The Ring programming language version 1.7 book - Part 48 of 196
 
Применение шаблона проектирования MVVM при разработке архитектуры Windows Pho...
Применение шаблона проектирования MVVM при разработке архитектуры Windows Pho...Применение шаблона проектирования MVVM при разработке архитектуры Windows Pho...
Применение шаблона проектирования MVVM при разработке архитектуры Windows Pho...
 
Whats New for WPF in .NET 4.5
Whats New for WPF in .NET 4.5Whats New for WPF in .NET 4.5
Whats New for WPF in .NET 4.5
 
The Ring programming language version 1.6 book - Part 46 of 189
The Ring programming language version 1.6 book - Part 46 of 189The Ring programming language version 1.6 book - Part 46 of 189
The Ring programming language version 1.6 book - Part 46 of 189
 
Spring framework part 2
Spring framework part 2Spring framework part 2
Spring framework part 2
 
The Ring programming language version 1.8 book - Part 50 of 202
The Ring programming language version 1.8 book - Part 50 of 202The Ring programming language version 1.8 book - Part 50 of 202
The Ring programming language version 1.8 book - Part 50 of 202
 
SUGCON 2014 Using Glass With Sitecore MVC
SUGCON 2014 Using Glass With Sitecore MVCSUGCON 2014 Using Glass With Sitecore MVC
SUGCON 2014 Using Glass With Sitecore MVC
 
SUGCon 2014 Sitecore MVC
SUGCon 2014 Sitecore MVCSUGCon 2014 Sitecore MVC
SUGCon 2014 Sitecore MVC
 
The Ring programming language version 1.9 book - Part 53 of 210
The Ring programming language version 1.9 book - Part 53 of 210The Ring programming language version 1.9 book - Part 53 of 210
The Ring programming language version 1.9 book - Part 53 of 210
 
Lecture17
Lecture17Lecture17
Lecture17
 
The Ring programming language version 1.5.3 book - Part 44 of 184
The Ring programming language version 1.5.3 book - Part 44 of 184The Ring programming language version 1.5.3 book - Part 44 of 184
The Ring programming language version 1.5.3 book - Part 44 of 184
 
The Ring programming language version 1.5.3 book - Part 54 of 184
The Ring programming language version 1.5.3 book - Part 54 of 184The Ring programming language version 1.5.3 book - Part 54 of 184
The Ring programming language version 1.5.3 book - Part 54 of 184
 
The Ring programming language version 1.5 book - Part 8 of 31
The Ring programming language version 1.5 book - Part 8 of 31The Ring programming language version 1.5 book - Part 8 of 31
The Ring programming language version 1.5 book - Part 8 of 31
 
Qtp test
Qtp testQtp test
Qtp test
 
Backbone.js — Introduction to client-side JavaScript MVC
Backbone.js — Introduction to client-side JavaScript MVCBackbone.js — Introduction to client-side JavaScript MVC
Backbone.js — Introduction to client-side JavaScript MVC
 
The Ring programming language version 1.4.1 book - Part 13 of 31
The Ring programming language version 1.4.1 book - Part 13 of 31The Ring programming language version 1.4.1 book - Part 13 of 31
The Ring programming language version 1.4.1 book - Part 13 of 31
 

Dernier

Harnessing ChatGPT - Elevating Productivity in Today's Agile Environment
Harnessing ChatGPT  - Elevating Productivity in Today's Agile EnvironmentHarnessing ChatGPT  - Elevating Productivity in Today's Agile Environment
Harnessing ChatGPT - Elevating Productivity in Today's Agile EnvironmentVictorSzoltysek
 
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnAmarnathKambale
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsArshad QA
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrainmasabamasaba
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2
 
WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?WSO2
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareJim McKeeth
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech studentsHimanshiGarg82
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastPapp Krisztián
 
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2
 
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...Jittipong Loespradit
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...Shane Coughlan
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...panagenda
 
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfPayment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfkalichargn70th171
 
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...Bert Jan Schrijver
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...SelfMade bd
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfonteinmasabamasaba
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...Health
 
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With SimplicityWSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With SimplicityWSO2
 

Dernier (20)

Harnessing ChatGPT - Elevating Productivity in Today's Agile Environment
Harnessing ChatGPT  - Elevating Productivity in Today's Agile EnvironmentHarnessing ChatGPT  - Elevating Productivity in Today's Agile Environment
Harnessing ChatGPT - Elevating Productivity in Today's Agile Environment
 
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
 
WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK Software
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the past
 
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
 
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfPayment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
 
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With SimplicityWSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
 

Mastering Oracle ADF Bindings

  • 2.
  • 9. 9 Fundamental Theorem of Software Engineering (FTSE) We  can  solve  any  problem  by   introducing  an  extra  level  of   indirec8on.     …except  for  the  problem  of  too  many   levels  of  indirec8on  
  • 13. Why ADF Bindings? 12 •  A  core  part  of  Oracle  ADF   •  Powered  by  Oracle   •  Declara8ve  programming     approach   •  Common  UI  tasks  out-­‐of-­‐ the-­‐box                  –    Naviga8on                  –    Range  fetching                    –    State  Management   •  ADF  Bindings  API  
  • 15. UI Component Binding 15  <af:inputText  value="#{bindings.FirstName.inputValue}"                                                        label="#{bindings.FirstName.hints.label}"                                                        required="#{bindings.FirstName.hints.mandatory}"                                                      …   EmpViewPageDef.xml  
  • 16. 16
  • 17. ADF Model Artifacts 17   ² PageDef.xml   ² Binding  metadata   ² DataBinding.cpx   ² Page  defini8on  map   ² Data  Controls     ² Adfm.xml   ² DataBinding.cpx,  DataControls.dcx,     ² bc4j.xcfg,  *.jpx   ² Web.xml   ² ADFBindingFilter   ² ADF  libraries  
  • 18. Page Definition File 18        <executables>                  <iterator  DataControl="EmployeesAMDataControl”                                                    Binds="VEmployees"                                                      RangeSize="25"                                                      id="VEmployeesIterator"/>          </executables>          <bindings>                  <acributeValues  id="EmployeeId”                                                                                IterBinding="VEmployeesIterator”>                          <AcrNames>                                          <Item  Value="EmployeeId"/>                          </AcrNames>                  </acributeValues>                  <acributeValues  id="FirstName”                                        IterBinding="VEmployeesIterator”>                          <AcrNames>                                          <Item  Value="FirstName"/>                          </AcrNames>                  </acributeValues>                  …          </bindings>   <af:inputText  value="#{bindings.FirstName.inputValue}”                                                        label="#{bindings.FirstName.hints.label}"          
  • 19. Page Definition File. Executables 19 ² Iterator  <iterator>   ² Method  Iterator  <methodIterator>   ² Variable  Iterator  <varaibleIterator>   ² Invoke  Ac8on  <invokeAc8on>   ² Page  <page>   ² Search  Region  <searchRegion>   ² Task  Flow  <taskFlow>   ² Mul8task  Flow  <mul8TaskFlow>  
  • 20. Page Definition File. Bindings 20 ² Ac8on  bindings   ² Ac8on  <ac8on>   ² Method  ac8on  <methodAc8on>   ² Value  bindings   ² Current  Row     ² Acribute  value  <acributeValues>   ² Boolean  value  <bucon>   ² List  <list,  listOfValues>   ² Row  Set   ² Tree  <tree>   ² DVT  <graph>    
  • 22. 22 Binding Context vs Binding Container
  • 23. 23 JSF Lifecycle vs ADF Page Lifecycle
  • 24. 24 Bindings in ADF lifecycle. ADF Binding Filter
  • 25. 25 Bindings in ADF lifecycle. Restore View •  Restore  View   •  Apply  Request  Values   •  Process  valida8ons   •  Update  Model  Values     •  Invoke  Applica8on   •  Render  Response  
  • 26. 26 Bindings in ADF lifecycle. Restore View •  Restore  View              -­‐  Init  Context                  -­‐  Prepare  Model   •  …  
  • 27. Binding Container at Prepare Model 27 ² Page  Parameters   ² Task  Flow  Parameters   ² Executables  with  Refresh=prepareModel   ² Iterators,  Invoke  Ac8ons       ² Page  Template     ² Task  Flow  bindings    
  • 28. 28 Bindings in ADF lifecycle. Render Response •  Restore  View   •  Apply  Request  Values   •  Process  valida8ons   •  Update  Model  Values     •  Invoke  Applica8on   •  Render  Response                    -­‐  Prepare  render  (render  Model)  
  • 29. Iterator Refresh Attribute 29 ² default  (deferred)   ²  On  demand   ² always   ²  Prepare  Model,Update  Model,            Render  Model     ² ifNeeded       ²  Prepare  Model,  Render  Model   ² never     ² prepareModel   ² prepareModelifNeeded   ² renderModel   ² renderModelifNeeded   #{viewScope.reallyNeedToRefresh}  
  • 31. Accessing Binding Container 31 public  BindingContainer  getBindingContainer()  {                  BindingContext  bindingContext  =  BindingContext.getCurrent();                  return  bindingContext.getCurrentBindingsEntry();   }   ²  Get Binding Context instance ²  Get Current Binding Container  
  • 32. Executing Method Action 32 ²  Get Operation Binding from Binding Container ²  Set up parameters ²  Execute ²  Check for errors   public  void  raisePay(Integer  employeeId)  {                  BindingContainer  bindings  =  getBindings();                  Opera8onBinding  op  =  bindings.getOpera8onBinding("raisePay");                  op.getParamsMap().put("employeeId",  employeeId);                  Object  result  =  op.execute();                  if  (!op.getErrors().isEmpty())  {                          //Do  something  with  this  list  of  JboExcep8ons                          List  errorList  =  op.getErrors();                  }          }    <methodAc8on  Ac8on="invokeMethod”    MethodName="raisePay”  id="raisePay”        ...  
  • 33. Accessing Attribute Binding 33  public  String  getEmailValue()  {                  BindingContainer  bindings  =  getBindings();                  AcributeBinding  emailBinding  =                            (AcributeBinding)  bindings.getControlBinding("Email");                  return  (String)  emailBinding.getInputValue();          }   ²  Get Binding Container ²  Find Attribute Binding by Id ²  Return Input Value     <bindings>          <acributeValues  IterBinding="VEmployeesIterator"  id="Email">                              <AcrNames>                                      <Item  Value="Email"/>                              </AcrNames>            </acributeValues>   …  
  • 34. Accessing LOV Binding 34 ²  Get Binding Container ²  Find JUCtrlListBinding by Id ²  Get Selected Row ²  Return Attribute Value          public  String  getDepartmentName()  {                  BindingContainer  bindings  =  getBindings();                  JUCtrlListBinding  lov  =                            (JUCtrlListBinding)  bindings.getControlBinding("DepartmentId");                  //  Get  the  selected  row                  Row  selectedRow  =  (Row)  lov.getSelectedValue();                  return  (String)  selectedRow.getAcribute("DepartmentName");  }             <bindings>    <list  IterBinding="VEmployeesIterator"  Sta8cList="false"                      DTSupportsMRU="true"  SelectItemValueMode="ListObject"                    Uses="LOV_DepartmentId"  id="DepartmentId”/>   …  
  • 35. Accessing Iterator Binding 35 ²  Get Binding Container as DCBindingContainer ²  Find DCIteratorBinding by Id ²  Execute VO query ²  Get Current Row (ViewRowImpl) ²  Get View Object Instance          public  void  workWithIterator()  {                  DCBindingContainer  bindings  =  (DCBindingContainer)  getBindings();                  DCIteratorBinding  iter  =  bindings.findIteratorBinding("VEmployeesIterator");                  //Execute  RowSet  query                  iter.executeQuery();                  //Get  current  row                    Row  r  =  iter.getCurrentRow();                  //Get  View  Object                  ViewObject  vo  =  iter.getViewObject();  }    <iterator  Binds="VEmployees"  RangeSize="25"                                        DataControl="EmployeesAMDataControl"  id="VEmployeesIterator"/>  
  • 38. 38 Composite ADF page ²  Everything  in  one  page   ²  Regions  with  task  flows   ²  Dynamic  declara8ve  component  
  • 39. 39 Composite ADF page ²  Everything  in  one  page   ²  Regions  with  task  flows   ²  Dynamic  declara8ve  component  
  • 40. 40 Composite ADF page ²  Everything  in  one  page   ²  Regions  with  task  flows   ²  Dynamic  declara@ve  component  
  • 41. Dynamic Declarative Component 41 ²  Uses Binding Container of the parent page ²  Doesn’t have own Binding Container   …   <af:gridCell  ...>            <af:declara8veComponent  viewId="/fragments/Approvals.jsff"  id="dc1"/>   </af:gridCell>   ….   <ui:composi8on  xmlns:ui="hcp://java.sun.com/jsf/facelets"     ...    <af:componentDef  var="acrs"  componentVar="comp">                  <af:panelBox  text="Approvals"  id="pb1">                          <af:listView  value="#{bindings.Approvals.collec8onModel}"  var="item”                                                                      fetchSize="#{bindings.Approvals.rangeSize}"  id="lv1”>   …   MainPage.jsf   Approvals.jsff  
  • 42. Bindings for Declarative Component 42 ²  Create Page Def file for the fragment ²  Add mapping to the DataBindings.cpx  <pageMap>                <page  path="/fragments/Approvals.jsff”  usageId="dashboard_view_ApprovalsPageDef"/>      </pageMap>      <pageDefini8onUsages>                  <page  id="dashboard_view_ApprovalsPageDef"                              path="com.adfprac8ce.dashboard.view.pageDefs.ApprovalsPageDef"/>      </pageDefini8onUsages>     <pageDefini8on  id="ApprovalsPageDef"                                  Package="com.adfprac8ce.dashboard.view.pageDefs">          <executables>                  <iterator  Binds="Approvals”  id="ApprovalsIterator”  …                  ...     DataBindings.cpx   ApprovalsPageDef.xml  
  • 43. Bindings for Declarative Component 43 ²  Find or Create BC with findBindingContainerByPath ²  Refer to the Backing Bean property     public  class  ApprovalsBean  {          public  BindingContainer  getBindings()  {                  BindingContext  bc  =  BindingContext.getCurrent();                  return  bc.findBindingContainerByPath("/fragments/Approvals.jsff");          }   …   <ui:composi8on  xmlns:ui="hcp://java.sun.com/jsf/facelets"      <c:set  var="bindings"  value="#{backingBeanScope.ApprovalsBean.bindings}"/>    <af:componentDef  var="acrs"  componentVar="comp">                  <af:panelBox  text="Approvals"  id="pb1">                          <af:listView  value="#{bindings.Approvals.collec8onModel}"  var="item”                                                                      fetchSize="#{bindings.Approvals.rangeSize}"  id="lv1”>   …   ApprovalsBean.java   Approvals.jsff  
  • 46. Bindings for Dynamic Table 46  <executables>              <iterator  Binds="#{pageFlowScope.voName}"                                                DataControl=”DynamicDataModelServiceDataControl“                                                id=”VDynamicIterator"/>    </executables>    <bindings>            <tree  IterBinding="VDynamicIterator"  id="VDynamic">                  <nodeDefini8on  Name="VDynamic0"/>          </tree>    </bindings>     <af:table  rows="#{bindings.VDynamic.rangeSize}"                                    fetchSize="#{bindings.VDynamic.rangeSize}”                                      …  
  • 47. Dynamic Table 47 <af:table  rows="#{bindings.VDynamic.rangeSize}"                                    fetchSize="#{bindings.VDynamic.rangeSize}"                                    emptyText="#{bindings.VDynamic.viewable  ?                                                                                    'No  data  to  display.'  :  'Access  Denied.'}"                                    var="row"  rowBandingInterval="0”  value="#{bindings.VDynamic.collec8onModel}"                                    selectedRowKeys="#{bindings.VDynamic.collec8onModel.selectedRow}"                                    selec8onListener="#{bindings.VDynamic.collec8onModel.makeCurrent}"                                    rowSelec8on="single"  id="t1">          <af:forEach  items="#{bindings.VDynamic.acributeDefs}”  var="def">                  <af:column  headerText="#{bindings.VDynamic.labels[def.name]}“                                                            sortable="true"  sortProperty="#{def.name}“  id="c2">                          <af:outputText  value="#{row[def.name]}"  id="ot2"/>                  </af:column>          </af:forEach>   </af:table>    
  • 48. Bindings for Dynamic Form 48  <executables>              <iterator  Binds="#{pageFlowScope.voName}"                                                DataControl=”DynamicDataModelServiceDataControl“                                                id=”VDynamicIterator"/>    </executables>                                                                        <dynamic:form  value="#{bindings.VDynamicIterator}"  id="f1"/>  
  • 49. Dynamic Component (12c) 49     <af:iterator  id="i1"  value="#{bindings.VDynamic.acributesModel.acributes}"  var="acr">                  <af:dynamicComponent  id="d2"  acributeModel="#{acr}"                                                                                                          value="#{bindings[acr.containerName][acr.name].inputValue}"/>    </af:iterator>                                                                                                                                          <tree  IterBinding=”VDynamicIterator"  id="VDynamic">                                                                                                                                                              <nodeDefini8on  Name="VDynamic0"/>                                                                                                                                          </tree>  
  • 50. Hand Made Dynamic Form 50 ²  DynamicComponent has limitations ²  af:Iterator + af:switcher approach can be used      <af:iterator  value=”#{bindings.VDynamic.acributesModel.acributes}"  var="acr"  id="dc_i1">                              <af:switcher  id="dc_s1"  defaultFacet="Default"                                                                            facetName=”#{bindings[acr.containerName][acr.name].dynamicTypeID}”>                                  <f:facet  name="DATE">                                      <af:inputDate  id="dc_id1"                                                                                          label=”#{bindings[acr.containerName][acr.name].label}”                                                                                                                                                  value=”#{bindings[acr.containerName][acr.name].inputValue}”                                                                                                                          shortDesc="#{bindings[acr.containerName][acr.name].tool8p}”                                                                                          />                                  </f:facet>                                <f:facet  name=”INT”>                                  …    <tree  IterBinding="VDynamicterator"  id="VDynamic">                  <nodeDefini8on  Name="VDynamic0"/>    </tree>    
  • 52. Dynamic Bindings. Why? 52 ²  DynamicForm is straight forward ²  DynamicForm is not good for Facelets ²  Jdeveloper 12c is still new ²  DynamicComponent has limitations ²  Tree bindings might be expensive ²  Useful for declarative components ²  It’s fun! ²  Have to finish the route  <tree  IterBinding="VDynamicterator"                            id="VDynamic">                  <nodeDefini8on  Name="VDynamic0"/>    </tree>    
  • 53. Creating Value Binding 53 ²  Get Control Definition Factory Defini8onFactory  defFactory  =  JUMetaObjectManager.getJUMom().getControlDefFactory();   ²  Create an instance of Control Value Definition (JUCtrlAcrsDef,  JUCtrlBoolDef,  …)              JUCtrlValueDef  acrDef  =  (JUCtrlValueDef)  defFactory.createControlDef(BINDING_TYPE);     ²  Initialize Control Value Definition HashMap  initValues  =  new  HashMap();              initValues.put(PARAM_NAME,  PARAM_VALUE);              acrDef.init(initValues);     ²  Create an instance of Control Value Binding JUCtrlValueBinding  acr  =  (JUCtrlValueBinding)    acrDef.createControlBinding(getBindings());   ²  Add Control Value Binding to Binding Container  getBindings().addControlBinding(acr.getName(),  acr);  
  • 54. Dynamic Attribute Value Binding 54 private  JUCtrlAcrsBinding  createAcrValue(String  acrName,  String  iteratorName)  {      Defini8onFactory  defFactory  =    JUMetaObjectManager.getJUMom().getControlDefFactory();      JUCtrlAcrsDef  acrDef  =  (JUCtrlAcrsDef)  defFactory.createControlDef(DCDefBase.PNAME_TextField);          //Ini8alize  acribute  values  binding  defini8on      HashMap  initValues  =  new  HashMap();      initValues.put(DCControlBindingDef.PNAME_IterBinding,  iteratorName);      initValues.put(ListBindingDef.PNAME_AcrNames,  new  String[]  {acrName});      initValues.put(JUTags.ID,  acrName);      acrDef.init(initValues);                //Create  an  instance  of  acribute  values  binding      JUCtrlAcrsBinding  acr  =  (JUCtrlAcrsBinding)    acrDef.createControlBinding(getBindings());            //Add  the  instance  to  the  current  binding  container      getBindings().addControlBinding(acrDef.getName(),  acr);      return  acr;    }    
  • 55. Dynamic Attribute Value Binding 55  <af:inputText  value="#{BackingBean.accountNo.inputValue}”                                                      label="#{BackingBean.accountNo.hints.label}”                                                      required="#{BackingBean.accountNo.hints.mandatory}”                                                      …   public  JUCtrlAcrsBinding  getAccountNo()  {                  String  acrName  =  "AccountNo";          DCControlBinding  acr  =                          getBindings().findCtrlBinding(acrName);            if  (acr  ==  null)  {                  acr  =  createAcrValue(acrName,  "VDynamicIterator");            }              return  (JUCtrlAcrsBinding)  acr;   }    <acributeValues                          IterBinding="VDynamicIterator”                          id="AccountNo">                    <AcrNames>                                <Item  Value="AccountNo"/>                    </AcrNames>        </acributeValues>   #{bindings.AccountNo}  
  • 56. Dynamic Boolean (button) Value Binding 56 private  JUCtrlBoolBinding  createBoolValue(String  acrName,  String  iteratorName)  {      Defini8onFactory  defFactory  =    JUMetaObjectManager.getJUMom().getControlDefFactory();      JUCtrlBoolDef  acrDef  =  (JUCtrlBoolDef)  defFactory.createControlDef(DCDefBase.PNAME_BuIon);        HashMap  initValues  =  new  HashMap();      initValues.put(DCControlBindingDef.PNAME_IterBinding,  iteratorName);      initValues.put(ListBindingDef.PNAME_AcrNames,  new  String[]  {acrName});      initValues.put(ListBindingDef.PNAME_ValueList,  new  String[]  {"Y","N"});      …      return  acr;   }        <bucon  IterBinding="VDynamicIterator"  id="AccountClosed"  DTSupportsMRU="false"  Sta8cList="true">              <AcrNames>                          <Item  Value="AccountClosed"/>              </AcrNames>              <ValueList>      <Item  Value="Y"/>                  <Item  Value="N"/>    </ValueList>    </bucon>  
  • 57. Dynamic LOV Binding 57 private  JUCtrlListBinding  createLOV(String  acrName,  String  lovName,  String  iteratorName)  {      Defini8onFactory  defFactory  =  JUMetaObjectManager.getJUMom().getControlDefFactory();      JUCtrlValueDef  lovDef  =  (JUCtrlValueDef)  defFactory.createControlDef(JUTags.PNAME_listOfValues);          HashMap  initValues  =  new  HashMap();      initValues.put(DCControlBindingDef.PNAME_IterBinding,  iteratorName);      initValues.put(ListBindingDef.PNAME_AcrNames,  new  String[]  {acrName});    //Specify  LOV  name.  e.g.  “LOV_Currency”      initValues.put(ListBindingDef.PNAME_ListServerBindingName,  lovName);                      initValues.put(JUTags.ID,  acrName);      lovDef.init(initValues);        JUCtrlListBinding  lov  =  (JUCtrlListBinding)  lovDef.createControlBinding(getBindings());      getBindings().addControlBinding(lovDef.getName(),  lov);      return  lov;   }           <listOfValues  Sta8cList="false"  IterBinding="VDynamicIterator"  Uses="LOV_Currency"  id="Currency"/>  
  • 58. Dynamic Tree Binding 58  public  JUCtrlHierBinding  createTree(String  treeName,  String  iteratorName)  {                      Defini8onFactory  defFactory  =  JUMetaObjectManager.getJUMom().getControlDefFactory();                  JUCtrlValueDef  treeDef  =  (JUCtrlValueDef)  defFactory.createControlDef(DCDefBase.PNAME_Tree);                    HashMap  initValues  =  new  HashMap();                      initValues.put(JUTags.ID,  treeName);                  initValues.put(JUCtrlHierDef.PNAME_IterBinding,  iteratorName);                                JUCtrlHierTypeBinding  typeBinding  =  new  JUCtrlHierTypeBinding();                      initValues.put(JUCtrlHierDef.PNAME_TypeBindings,  new  JUCtrlHierTypeBinding[]  {  typeBinding  });                        treeDef.init(initValues);                    JUCtrlValueBinding  tree  =  (JUCtrlValueBinding)treeDef.createControlBinding(getBindings());                                  getBindings().addControlBinding(treeDef.getName(),  tree);                  return  (JUCtrlHierBinding)  tree;          }    <tree  IterBinding="VDynamicterator"                            id="VDynamic">                  <nodeDefini8on  Name="VDynamic0"/>    </tree>    
  • 59. Dynamic Value Binding 59  private  JUCtrlValueBinding  createBinding(BindingDef  bindingDef)  {              Defini8onFactory  defFactory  =                        JUMetaObjectManager.getJUMom().getControlDefFactory();              JUCtrlValueDef  valueDef  =                        (JUCtrlValueDef)  defFactory.createControlDef(bindingDef.getBindingType());                              HashMap  initValues  =  bindingDef.getInitMap();                          valueDef.init(initValues);                                JUCtrlValueBinding  binding  =  (JUCtrlValueBinding)  valueDef.createControlBinding(getBindings());                            getBindings().addControlBinding(valueDef.getName(),  binding);              return  binding;          }  
  • 60. Dynamic Value Binding 60  private  class  BooleanBindingDef  extends  BindingDef  {                    @Override                  public  HashMap  getInitMap()  {                                  HashMap  map  =  new  HashMap();                                  map.put(DCControlBindingDef.PNAME_IterBinding,  iteratorName);                                  map.put(ListBindingDef.PNAME_AcrNames,  new  String[]  {acrName});                                  map.put(ListBindingDef.PNAME_ValueList,  new  String[]  {"Y","N"});                                  map.put(JUTags.ID,  acrName);                                  return  map;                                                  }                    @Override                  public  String  getBindingType()  {                                  return  DCDefBase.PNAME_Bucon;                          }            }  
  • 61. Dynamic Iterator Binding 61  public  DCIteratorBinding  createIterator(String  iteratorName,  String  voName,  String  dataControlName)  {                        Defini8onFactory  defFactory  =  JUMetaObjectManager.getJUMom().getControlDefFactory();        //Create  and  init  an  iterator  binding  defini8on            JUIteratorDef  iterDef  =  (JUIteratorDef)defFactory.createControlDef(DCDefBase.PNAME_Iterator);                                HashMap  initValues  =  new  HashMap();            initValues.put(JUTags.ID,  iteratorName);        initValues.put(JUTags.DataControl  ,  dataControlName);            initValues.put(JUTags.PNAME_VOName  ,  voName);            iterDef.init(initValues);                          //Create  an  iterator  binding  instance              DCIteratorBinding  iter  =  iterDef.createIterBinding(BindingContext.getCurrent(),  getBindings());                                          //Add  the  instance  to  the  current  binding  container              getBindings().addIteratorBinding(iteratorName,  iter);            return  iter;    }      <iterator  Binds="VEmployees"                                DataControl="AppModuleDataControl"                                id=“VDynamiciterator"/>  
  • 63. 63