Business Components
1- Generate EmployeeEO Entity for Employees Database table.
2- Generate Updatable View object (EmployeeVO) based on above EmployeeEO
3- Create Application Module (EmployeeService)
4- Add 'EmployeeVO' to EmployeeService Application Module
5- Test 'EmployeeVO' by adding/modifyinig/deleting using EmployeeService Application Module.
6- Create Read Only View Object (EmployeeROVO) , Add it to EmployeeService Application Module, Test the EmployeeROVO data.
7- Add two bind variables to 'EmployeeROVO' BindFirstName, BindLastName and modify the query to include these two bind variables, Test EmployeeROVO by passing 'First Name' and 'Last Name' Values and verify the results displayed correctly based on bind variables.
8- Modify 'EmployeeROVO' as per below criteria
- BindFirstName and BindLastName variables or optional, If user supplies values to either of them then only apply those values to query, otherwise don't include them in query..
- For eg : If User supplies only BindFirstName, then fetch only all the employees whose first name match with the provided input value.
- For eg : If User doesn't supply any value for BindFistName or BindLastName, then fetch all the employees from the database.
9- Modify '
EmployeeVO' to have 'ViewCriteria' with below criteria
- Create BindFirstName Bind Variable
- Create ViewCriteria to include BindFirstName bind variable.
- Test View Criteria using App Module.
10- Modify 'EmployeeVO' as per below requirement.
- Add 'Country' transient attribute , data type as String.
- Test 'EmployeeVO' using App module, and you should see blank value for this attribute.
11- Create 'Static List of Values ' View object i.e '
CountryNamesLOV' which include two attributes, such as 'Country Code' and 'Country Name' , Include below values for respective attributes
- US, USA
- IN, India
- CN, Canada.
- Add 'CountryNamesLOV' to 'EmployeeService' application module, and test the View Object.
12 - Modify '
EmployeeVO' view object as per below requirement.
- Create a View accessor for 'CountryNamesLOV' as created in above step.
- Create 'List Of Values' to 'Country Attribute' using above created view accessor
- Display 'Country Name' Attribute, and map 'CountryCode' attribute to 'Country' attribute of EmployeeVO
- Test 'EmployeeVO' using Application Module, You should see drop down list for 'Country' attribute.
13- Modify Employees DB table to include a new column called 'QUALIFICATION' type of Varchar2(40)
-> Syrnchronize '
EmployeeEO' to reflect newly updated changes on corresponding DB table.
14- Generate Entities for Departments and Job table such as 'DepartmentEO' and 'JobsEO' respectively, along with updateable View objects such as 'DepartmentsVO' and 'JobsVO' respectively
-> Ensure Associations and View links created automatically b/w 'Employee & Jobs' , 'Employee & Departments' , If they are not created automatically, try synchronizing 'EmployeeEO' and make sure View Links and associations created.
15- Generate Java classes for 'EmployeeService' Application Module
16- Write below java method in 'EmployeeServiceImpl' class
-> public int add(int a, int b) , which returns sum of given two numbers.
-> Expose this method to client interface.
-> Test 'EmployeeService' Application module, Test 'add()' method and make sure it returns correct values.
17- Write a java method in 'EmployeeServiceImpl' class as per below requirement.
-> public List<String> getAllEmployees();
-> Execute 'EmployeeROVO' without passing any bind parameters, Iterate the view object, Prepare List with all employees Last Name and return the List.
-> Expose getAllEmployees() method to client interface.
-> Test this method and make sure you get all the employees last name.
18- Write a java method in 'EmployeeServiceImpl' class as per below requirement
-> Define a method public String getLastNameById(String empID)
-> Create a EmployeeROVO with EmployeeID as bind variable, set the above method input param value to bind parameter , execute the query, If there were any results found, then get the corresponding Row Object, get the 'Last Name' and return Last name of the corresponding empID
-> Expose 'getLastNameById() method to client interface and test this method by passing various emp ID's.
19- Write a java method in 'EmployeeServiceImpl' class as per below requirement
-> Define a method public String setLastNameById(String empID, String lastName)
-> Create a EmployeeVO with EmployeeID as bind variable, set the above method input param value to bind parameter , execute the query, If there were any results found, then get the corresponding Row Object.
-> Set the provided lastName(input) to the above result Result Row.
-> Perform getDBTransaction().commit() operation.
-> Expose 'setLastNameById() method to client interface and test this method by passing various emp ID's.
20 - Create 'EmployeeTRVO' Transient view object with below attributes
firstName,lastName,age(int),DOB(Date), salary(Double)
-> Generate the Row Impl java class and VOImpl java classes for this view object.
-> Add this view object to App Module
22 - Create a java method in 'EmployeeServiceImpl' as per below requirement
-> public void insertEmpDetails(String name, int empID, int age, Date dob, double salary);
-> Ensure none of those values are blank
-> Create a brand new row 'EmployeeTRVO' and set above all values to each setter attribute
-> Insert newly created row into 'EmployeeTRVO'
-> Print the VO Row count , eg : vo.getRowCount()
-> Test this method using AM, Invoke this method couple of times and verify 'EmployeeTRVO' row count should increment by one for every method invocation.
ADF UI
1- Create 'EmployeeUI' View Controller project , if this project doeson't exist
2- Create "employee-home.jspx' Page with below heading
" Welcome to Fortune Minds Employee Portal "
-> Run the page and ensure you will see this page properly
3- Create Hello World page using Page Fragment
-> Crate .jsff page frament, and display 'Hello World' using outputText
-> Create a ADF Taskflow, drag above fragment as default activity
-> Create a .jspx page and drag above taskflow as a <af:region>
-> Run the .jspx page and verify 'Hello World' text message displayed on the screen
- Invoke Application Module Method from a Page.
-> Create a public String sayHello(String name) method in Application Module Impl
-> Provide the implementation to return 'Hello' +name & print entered name in console using System.out.println()
-> Expose this method to the client interface.
-> Develop 'test-appmodule-method.jspx' page.
-> Drag the above created method onto the page as a button from the Data control.
-> Launch the application in debug mode, keep a debug point in sayHello() method, Click on button, ensure control goes to the Application Module method.
4- Bind Backing bean with Page Fragment.
-> Repeat above exercise (Create Hello World Page using Page Fragment)
-> Create 'com.view.backing.EmployeeBean' java class in View Controller Page.
-> Configure above created backing bean in Taskflow
-> Provide a button on .jsff page fragment, and bind 'action' attribute of the <af:command> button to EmployeeBean method, Print 'Hello World" in this method using System.out.println("Hello World")
-> Run the page, Click on the button, ensure 'Hello World' should be printed in console.
5-
Develop Tabbed Layout UI Page
-> Develop below three page fragments(.jsff) customer-home.jsff, vendor-home.jsff and employee-home.jsff , Have some dummy text on each page
-> Develop three respective Task flows , and drag each page fragment(.jsff) on to corresponding Task flow
-> Develop a Home Page (.jspx) with three different tabs (use <af:pnaelTab>) with 'Customer', 'Vendor' and 'Employee' tabs
-> Drag above three respective task flows onto each <af:showDetailItem> as <af:region> component.
-> Run the home page, you should see three different tabs, by clicking on each tab you should see corresponding message.
6- Develop Login Page as per below requirement
-> Create EmpLoginTRVO Programatic View object with userID and password attributes. userID should be key attribute
-> Shuffle this VO to App Module
-> Create'emplogin.jspx' page
-> Drag userID and Password attributes as <af:inputText> components on to emplogin.jspx page.
-> Write a method validateEmpLogin() method in Application Module, which returns boolean attribute, This method should get the current row from EmpLoginTRVO row, get userID and password attributes, If both values are not null , then query Emp table with these two parameters using 'Read Only view Object', If there were any results found then return true otherwise return false.
Note : If emp table doesn't have 'userID' and 'password' fields, then alter the table and include these two new columns.
-> Expose above method to client interface and drag this method as a button onto 'emplogin.jspx' page, rename the button to 'Login'
-> Enter valid login credentials, click on 'Login' button, debug the code and see whether given login credentials match with the database or not.
7. Upload CSV file content into Database table
-> Create employee.csv file with Id, firstName, lastName, Dob columns and have 5 sample employee rows and save it as .csv file in c:\tmp directory
- Develop ADF UI which allows the user to upload any csv file using 'Browse'
- Create Entity and Updatable View Object for Employee table
- Provide a Save button on UI Page, By clicking on 'Save' button , Read the contents of uploaded CSV file, set into Updatable view object and perform DB commit,
- Upon successful save, display information message saying 'Successfully Saved'
- If there are any errors while saving into DB, Display error message " Error/Failure occurs while saving"
8 Read Database Table and convert into CSV file
- Develop ADF UI application, Display a page which accepts 'DB table Name'
- Provide a 'Download' button
- Without entering any value for 'DB Table Name' , By clicking on 'download' button prompt 'DB Table Name is required' message
- By clicking on 'Download' button, Verify whether given DB table name exists in database or not, If exists read the content from DB table and write into CSV file allow the user to open or save .
9 Table with top line Filter and Sorting features
-> Create a 'EmployeeROVO' by selecting all the attributes
-> Create Page fragment (.jsff), Taskflow, and page (.jspx)
-> Drag the 'EmployeeROVO' as <af:table> onto the page fragment, Ensure select selection criteria (Single/Multiple), Sorting, Filtering options while dragging onto the page fragment
-> Drag the taskflow onto the page as <af:region>
-> Run the application, You will see all the employee results in a table format along with top line filter (input text field on top of every column in a table) , Also sorting (Ascending/Descending little triangles) on top of each column name.
-> Test the top line filter by entering any value and hit enter, Frame work filter the results based on the filter input value and refresh the <af:table> component, Also you can sort by column as well
10. View Criteria
-> Create 'EmployeeROVO' with :BindFName, :BindLName, :BindEmail bind variable, and define below view Criteria
-> First Name, Last Name, Email
-
-> Add this ROVO to Application Module, Test the view criteria by entering either of those values or all of them and make sure you get correct results.
-> Create 'employee-search.jsff' page by dragging above created view criteria on to it, You should able to see Query Panel along with results table.
-> Create 'employee-search-config.xml' Task flow, Drag above page fragment onto it.
-> Develop 'employee-home.jspx' , Drag above taskflow as <af:region>
-> Run the application, Test the search query with all possible values and make sure you see corresponding results.
11. View Criteria with List of Values.
-> In addition to above assignment (View Criteria), Implement below functionality
-> Create 'EmployeeFirstNameROVO', 'EmployeeLastNameROVO'
-> Create List of values for 'FirstName', 'LastName' attributes in 'EmployeeROVO' with above ROVO's as view accessors
-> Delete previously defined search criteria and results from 'employee-search.jsff' and drag the 'EmployeeROVO' view criteria again onto it as <af:QueryPannel> along with results,
-> Test the application, ensure you see List of values for First Name and Last Name in Query criteria, and Search make sure you see correct results.
12. Provide 'Add' Button to Employee Search Results table.
- This assignment is in addition to Assignment # 11, Ensure Assignment #11 shows the results in <af:table> format.
- Redo the assignment #10 using Updatable view ojbect(EmployeeVO) instead of Read Only View Object (ROVO)
- Provide 'Add' button on 'employee-search.jsff' page, By clicking on this button create an empty row for EmployeeVO
- Allow the user to enter values for newly created EmployeeVO Row, By clicking 'Save' button, ensure to save to Employee table.
13. Provide 'Delete' Button to Employee Search Results table.
- This assignment is in addition to Assignment # 12,
- Provide 'Delete' button on 'employee-search.jsff' page, By clicking on this button delete selected row from EmployeeVO
- Ensure, User must select a row before clicking on 'Delete' button, If not throw validation message otherwise delete from <af:table> component.
- By clicking on 'Save' button, ensure to remove the deleted row from database table.
14. Provide 'Edit' Button to Employee Search Results table.
- This assignment is in addition to Assignment # 12.
- Create 'RowSelect' Transiet attribute of type 'String' in EmployeeVO , Mark this attribute as 'Updatable' , So that user can able to update the value.
- Drag this attribute as 'SelectbooleanCheckBox' first column in above <af:table>, So that user can able to select /unselect the row in <af:table>
- Provide 'Edit' button on 'employee-search.jsff' page, By clicking on this button delete selected row from EmployeeVO.
- Ensure User must select ONLY one row corresponding check box before clicking 'Edit' button, otherwise display error message as 'At least one row must be selected in order to Edit'
- By clicking on 'Edit' button, Display selected Emplyoee row in Edit form
- Provide 'Save' button in 'Edit' form, User should able to modify the existing data and save it into Database.
15. Display selected rows on <af:table> component in a backing bean.
- This is in addition to Assignment # 13,
- Allow the user to select more than one row in <af:table> component.
- Provide a buttoon 'getSelectedEmployeeRows' button on employee-search.jsff page.
- By clicking on this button, Display all the selected employee rows details such as ID, First Name, Last Name in backing bean method using System.out.println
16. Partial Trigger Based on selected value from Select One Choice
- Create a 'CountryTRVO' Transient View object with 'Code' and 'Description' values
- Create rows programatically with below values 'IN,India', 'US,USA', 'CN,China', 'MX,Mexico'
in initlizaeCountryValues() method, which should be defined in AMImpl, expose this to client interface
- Define a page fragment with below components
- Country List of values <selectOneChoice> - Drag 'CountryTRVO' as <af:selectOneChoice> component onto screen
- Define a output text, Based on the selected value from the above list of values, display selected value associated 'Description' i.e India is selected then display "India' in output text field
- Create 'countrylist-config.xml' Taskflow, Drag the initializeCountryValues() as default activity, and drag above pagefragment onto it
- Create .jspx file, Drag the above taskflow as <af;region> Test the behavior.
17. Select Many Choice List Example
- Create 'selectmanydemo.jsff', 'selectmanychoicedemo-config.xml' (Taskflow), 'selectmanychoicedemo.jspx'
- Create a 'LanguageLOV' static list of values with below key value pair of values
En,English
Fr, French
Hn, Hindi
Ur, Urdu
Sp,Spanish
Jn,Japanese
- Display Employee Name (InputText), EmployeeID(InputText) , Languages (SelectManyChoice) components on page fragment
- Allow the user to enter those values, If user select more than one language, store all the selected values into different table with 'Employee ID, Language Code' key value pair.
- Provide a search page with 'Employee Name' (Select One Choice), 'Language' (Mutli selection) , Perform the search and display the matching results based on given criteria.
- Provide 'Edit' button to the <af:table> component, By clicking on this button, Display the selected employee information in a editable format. Make sure, If user has selected more than one language display them as selected in <af:selectManyChoice> component.
18. Data Control using POJO (Plain Old Java Object)
- Create MathUtil java class with below method
public int add(int a, int b), implement to return sum of a+b;
- Generate a Data control for 'MathUtil' java class , Right click on it, Generate Data Control
- Create 'mathutil.jsff', 'mathutil-config.xml(Taskflow)', MathUtilHome.jspx
- Drag .jsff onto taskflow, Taskflow onto .jspx
- Provide two input text fields onto .jsff
- Drag <af;outputtext> onto .jsff and name it as 'Result'
- Create method bindings for 'add(int,int) method in 'mathutil.jsff' page definition.
- Drag <af:commandButton> onto .jsff page as 'Add' button.
- By clicking on 'Add' button, perform below activities
- Make sure user enters values for both a and b input text fields otherwise display error message.
- If above validation successful, then invoke backing bean method, get the values for above two input text fields , invoke add() method from MathUtil data control by passing a, b values entered by the user , Set the result of the above method to 'Result' outputtext field.
19. Implement Auto suggestion or Type ahead
- Develop a Employee Search Page with below attributes
- First Name - Auto suggestion , While typing the name, display list of all existing first names
- Last Name - Auto suggestion , While typing the last name, display all existing last names
- Country ( Select One Choice)
- Search Button - By clicking on this button, Perform search and display all the matching employee search results in ,af:table format
- Refer this blog for more info :
http://fortunefusionminds.blogspot.com/2013/03/type-ahead-autosuggestion.html
20. Implement Security to ADF application
- Develop a sample ADF application with below requirement
- Display all the employees in a Read only table on '
searchemp.jsff' page fragment, Provide a button 'Edit Employee' button.
- By selecting one employee from the list, click on 'Edit Employee' button, it should redirect to different page(
editemp.jsff) in editable format.
- Implement security to ADF application
- Create a two application roles called 'AppAdmin' , 'AppUser'
- Create two Enterprise roles such as 'Admin', 'User'
- Map 'AppAdmin' to 'Admin' (Application Role to Enterprise role)
- Map 'AppUser' to 'User' role
- Create a user 'Sam' and grant 'AppAdmin' role
- Create a user 'Tom' and grant 'AppUser' Role.
- Launch the application, User should be prompted to login page, Only 'Sam' and 'Tom' should able to login to the application
- Only 'AppAdmin' User should able to see 'editemp.jsff' in Editable form.
- 'AppUser' should able to see 'editemp.jsff' in read only .