This post is about a common development requirement- Can we increase or decrease number of fields , type of fields (columns in case of table), data in fields at run time?
Suppose i have to show data of Departments and Employees table on page using only one af:table component. It means columns should be generated dynamically at run time depending on any defined condition
So for this requirement i am using dynamic viewObject in model layer and af:dynamicComponent in view layer
See previous post about creating dynamic viewObject-
Creating Dynamic View Object at Runtime programmatically - Oracle ADF
See step by step implementation-
Thanks, Happy Learning :)
Download -Sample ADF Application
Suppose i have to show data of Departments and Employees table on page using only one af:table component. It means columns should be generated dynamically at run time depending on any defined condition
So for this requirement i am using dynamic viewObject in model layer and af:dynamicComponent in view layer
See previous post about creating dynamic viewObject-
Creating Dynamic View Object at Runtime programmatically - Oracle ADF
See step by step implementation-
- Create Fusion Web Application and follow the link posted above to create dynamic viewObject, in short create a viewObject using dual and a method in AMImpl to create dynamic viewObject from sql query
- Created a page and added an inputText to enter SQL query and a button to process that query and create dynamic viewObject at run time
- See Managed Bean code to process query, value of inputText is passed using component binding
- Now dropped this dual viewObject on page as dynamic form and dynamic table from Data Control (this snap is about creating form)
- Next is to change pageDef entry for this dynamic component , open pageDef and goto treeBinding. there is an entry for nodeDefinition, there will be separate treeBinding for form and table both (you should change both)
- Now run this application and enter SQL query in box and press process button
/**Method to create viewObject using SQL query * @param query */ public void createNewViewObject(String query) { ViewObject dynVo = this.getdynamic1(); dynVo.remove(); this.createViewObjectFromQueryStmt("dynamic1", query); this.getdynamic1().executeQuery(); }
private RichInputText sqlQueryBind; public DynamicTableBean() { } /*****Generic Method to call operation binding**/ public BindingContainer getBindingsCont() { return BindingContext.getCurrent().getCurrentBindingsEntry(); } /** * Generic Method to execute operation Binding * */ public OperationBinding executeOperation(String operation) { OperationBinding createParam = getBindingsCont().getOperationBinding(operation); return createParam; } /**Method to create viewObject * @param actionEvent */ public void createViewObjectAction(ActionEvent actionEvent) { if (sqlQueryBind.getValue() != null) { OperationBinding ob = executeOperation("createNewViewObject"); ob.getParamsMap().put("query", sqlQueryBind.getValue().toString()); ob.execute(); } } public void setSqlQueryBind(RichInputText sqlQueryBind) { this.sqlQueryBind = sqlQueryBind; } public RichInputText getSqlQueryBind() { return sqlQueryBind; }
<tree IterBinding="dynamic1Iterator" id="dynamic1"> <nodeDefinition DefName="dynamictableapp.model.view.dynamicVO" Name="dynamic10"/> </tree>
Change this entry like this-
<tree IterBinding="dynamic1Iterator" id="dynamic1"> <nodeDefinition Name="dynamic10"/> </tree>
Thanks, Happy Learning :)
Download -Sample ADF Application