Build a Create Page in OAF!

Here I am posting a step by step tutorial to build a simple CREATE page in OAF. It is a continuation of an earlier tutorial and so you need to go through that first before going through this.

Here is the link: Build Simple Search Page in OAF

Step1: Build a Create Button

  • Select the view EmpSearchPG, right click and select New > TableActions. One region (region1) will be created with region style as ‘FlowLayout’.
  • Change the ID of the above newly created region to ButtonLayoutRN.
  • Right click ButtonLayoutRN and create a new Item.
  • Set the below details for the Item
    • ID :Create
    • Item Style : submitButton
    • Attribute Set: /oracle/apps/fnd/framework/toolbox/attributesets/FwkTbxEmployees/CreateEmployee
    • Action Type: fireAction
    • Event: create

Step 2: Set a Controller

  • Right click PageLayoutRN and select ‘Set New Controller’.
  • Give the package name as ‘’.
  • Give the class name as EmpSearchCO.

Add the following logic to processFormRequest of after super.processFormRequest method.

if (pageContext.getParameter("event").equalsIgnoreCase("create")) {
System.out.println("EmpSearchCO: processing create/update");
null, null, true,

You might get red lines under java classes which are not imported. Bring the cursor on these red-lined text and click Alt+Enter (JDev automatically tells you to import the class using Alt+Enter when you move cursor over these lines).

Step 3: Build the Create Employee Page (EmployeeCreatePG)

  • Right click on Project >New >Web Tier >OA Components à Page.
  • Set the Page name as EmployeeCreatePG
  • Set the package name as
  • Select the pageLayout region of EmployeePG and assign the properties as below
    ID : PageLayoutRN
    AM Definition :
    Window Title : Employee Window
    Title: Employee
    Warn About Change: True

Step 4: Add items to Create Employee Page

  • Create a region under PageLayoutRN and assign ID as PageButtonsRN.
  • Set the region style as pageButtonBar

Now we need to create two buttons in this region as APPLY and CANCEL.

For Apply Button:

  • Right click on PageButtonsRN > New > Item.
  • Set the properties as
    ID :Apply
    Item Style :submitButton
    Attribute Set : /oracle/apps/fnd/attributesets/Buttons/Apply
    Additional Text :Click to save the transaction
  • Action Type: fireAction
  • Event: Apply

For Cancel Button:

  • Right click on PageButtonsRN > New > Item.
  • Set the properties as
    ID : Cancel
    Item Style : submitButton
    Attribute Set :/oracle/apps/fnd/attributesets/Buttons/Cancel
    Additional Text : Click to cancel the transaction
  • Action Type: fireAction
  • Event: Cancel

For text items in page: Right click on PageLayoutRN à New à Region using wizard. Enter data as shown in below screenshots

Step 4.1: Select AM and VO instance created during search page

Step 4.2: Give Region ID as MainRN and Region Style as defaultSingleColumn

Step 4.3: Select attributes as below (EmpNo, EmpName and Department)

Step 4.4: Change the prompts of items as shown below (messageInputText)

Click on finish for step 5.

Change the Region Style for MainRN to messageComponentLayout. This is done now as above region wizard, doesn’t have support for messageComponentLayout. Click on Yes button when the confirm window pops for change of region style.

Step5: Adding Model Layer Code

Add following code to Add import statements at the start and rest of the methods with the class definition.

import oracle.jbo.Row;
import oracle.apps.fnd.framework.OAViewObject;
import oracle.jbo.Transaction;
import oracle.jbo.domain.Number;
import oracle.jbo.RowSetIterator;

       // Creates a new employee.

        public void createEmployee()
        OAViewObject vo = (OAViewObject)getXxhciOafTrngEmpTabEOView1();
        // Per the coding standards, this is the proper way to initialize a
        // VO that is used for both inserts and queries. See View Objects
        // in Detail in the Developer's Guide for additional information.
        if (!vo.isPreparedForExecution())
        Row row = vo.createRow();
        // Required per OA Framework Model Coding Standard M69
        } // end createEmployee()

         // Executes a rollback including the database and the middle tier.

         public void rollbackEmployee()
         Transaction txn = getTransaction();
         // This small optimization ensures that we don't perform a rollback
         // if we don't have to.
         if (txn.isDirty())

        //Commits the transaction.

        public void apply()

Add the following import statement and modify the create method in XxhciOafTrngEmpTabEOImpl as follows:

Add this as a part of import statements

import oracle.apps.fnd.framework.server.OADBTransaction;

Modify the create method as below

    public void create(AttributeList attributeList) {
        OADBTransaction transaction = getOADBTransaction();
        Number employeeId = transaction.getSequenceValue("FWK_TBX_EMPLOYEES_S");

Step6: Add Controller logic for Create Employee Page

Right click on PageLayoutRN of EmployeeCreatePG > Set New Controller.

Give the values as
Package :
Class Name : EmployeeCO

Add the below code to the new CO

Import Statements:

import oracle.apps.fnd.common.MessageToken;
import oracle.apps.fnd.framework.OAApplicationModule;
import oracle.apps.fnd.framework.OAException;
import oracle.apps.fnd.framework.OAViewObject;
import oracle.apps.fnd.framework.webui.OADialogPage;
import oracle.apps.fnd.framework.webui.OAWebBeanConstants;

processRequest (after super.processRequest):

            if (!pageContext.isBackNavigationFired(false)) {
                OAApplicationModule am =
            } else {
                // We got here through some use of the browser "Back" button, so we
                // want to display a stale data error and disallow access to the
                OADialogPage dialogPage = new OADialogPage(STATE_LOSS_ERROR);

processFormRequest (after super.processFormRequest):

      OAApplicationModule am = pageContext.getApplicationModule(webBean);
          // Pressing the "Apply" button means the transaction should be validated
          // and committed.
      if (pageContext.getParameter("event").equalsIgnoreCase("Apply")) {
                   OAViewObject vo =
                  String employeeName =
                  String employeeNum =
                  MessageToken[] tokens =
                  { new MessageToken("EMP_NAME", employeeName),
                    new MessageToken("EMP_NUMBER", employeeNum) };
                  OAException confirmMessage =
                      new OAException("AK", "FWK_TBX_T_EMP_CREATE_CONFIRM", tokens,
                                      OAException.CONFIRMATION, null);
                                                     null, null, true,
      // If Cancel button is pressed, rollback the transaction
       else if (pageContext.getParameter("event").equalsIgnoreCase("Cancel")) {
                                                     null, null, false,


Step 7: Save all and Run the EmpSearchPG to test the page

Flow Diagram

The Final Output:

6 Responses to Build a Create Page in OAF!

  1. Jones says:

    Awesome post…Thanks a lot!

  2. hari says:

    Thank you..

    Very helpful.. please continue sharing your knowledge…

  3. lakshman says:

    very helpful informative

  4. arch says:

    very good representation …..

  5. RAJNISH says:

    Very help full, But can you please help me registering multiple page because I am able to resister first page but when clicking on create button after deployment I am getting error:
    Error:You have insufficient privileges for the current operation. Please contact your System Administrator

  6. Anwar says:

    That is perfect .I hope you continue same way in other topic ..Very usefull

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: