Saturday, April 8, 2017

Upload csv file using oracle OAF


We will perform the below listed task in order to complete our assignment

1. Create Object(Table or Tables)
2. Create Application Module
3. Create EO
4. Create VO
5  Create Page

6. Create Controller
7. Test Page

--------------------------------------------------

Create table.

create table apps.xx_import_csv_data
(
  column1            varchar2(100 byte),
  column2            varchar2(100 byte),
  column3            varchar2(100 byte),
  column4            varchar2(100 byte),
  column5            varchar2(100 byte),
  last_update_date   date                       not null,
  last_updated_by    number                     not null,
  creation_date      date                       not null,
  created_by         number                     not null,
  last_update_login  number
)
tablespace apps_ts_tx_data
pctused    0
pctfree    10
initrans   1
maxtrans   255
storage    (
            initial          128k
            next             128k
            maxsize          unlimited
            minextents       1
            maxextents       unlimited
            pctincrease      0
            buffer_pool      default
           )
logging
nocompress
nocache
noparallel
monitoring;

-------------------------------------------

Create Application Module

Navigation:
Right Click on Project -->New -->Business Tier -->ADF Business Components -->Application Module --> Press OK button.

New Window will appear to you which contains 5 steps

Step 1:
Specify Package called path where you want to save your application Module
E.g : Package: oracle.apps.fnd.server
Specify package name
E.g: Name:ImportcsvAM
Press Next Button
Step 2: Make sure in Data Model your Application Module is appearing and Press Button Next
Step 3:Press Button Next
Step 4: Check the Generate Java File(s) checkbox in Application Module  Class: ImportcsvAMImpl to generate the ImportcsvAMImpl java class. (It is already checked by default.)
Step 5: In Finish window, Press Finish Button

------------------------------------------- 
 
Create Entity Object

Navigation:
Right Click on Project -->New -->Business Tier -->ADF Business Components -->Entity Object --> Press OK button.

New Window will appear to you which contains 6 steps

Step 1: Specify the Entity Object Name
 E.g : ImportcsvEO
 Specify Package or Path oracle.apps.fnd.schema
Select Database object 
E.g: XX_IMPORT_CSV_DATA
Press Button Next
Step 2:  Press Button Next
Step 3: Press Button Next 
Now popup message will appear front of you as we did not define any primary key. Therefore, it will consider ROWID as primary key. Press Yes
Step 4: Check Create Method, Remove Method and  Validate Method
Press Button Next.
Step 5: Here you have a option to VO belongs to EO but we will not create and we will Press Button Next.
Step 6: In Finish window, Press Finish Button.

------------------------------------------- 
 
Create View Object

Navigation:
Right Click on Project -->New -->Business Tier -->ADF Business Components -->View Object --> Press OK button.

New Window will appear to you which contains 8 steps
Step 1:  Specify the View Object Name
 E.g : ImportcsvVO
 Specify Package or Path oracle.apps.fnd.server
select Radio Button Updatable Access through Entity Objects
Press Button Next
Step 2: In Available list go to  Oracle.apps.fnd.schema and shuffle ImportcsvEO to selected list
Press Button Next
Step 3: Shuffle the required columns to selected list and Press Button Next
Step 4: Press Button Next
Step 5: Press Button Next
Step 6: Press Button Next 
Step 7: Check the checkbox View Row Class: ImportcsvVORowImpl for both the Generate Java File and Accessors checkbox
Step 8: In Finish window, Press Finish Button.


Linking the view object to the application module(VO to AM)
   To link the view object to the application module, perform the following steps:
  1. In the Application Navigator tab, double-click the ImportcsvAM
  1. In the Application Module Editor select the Data Model node. 
  2. Expand the oracle.apps.fnd.server package, and click on the ImportcsvVO view object. 
  3. Shift the ImportcsvVO from Available View Objects: to Data Model: by clicking on the > button
------------------------------------------- 

Create Page 

Right Click on Project -->New -->Web Tier -->OA Components -->Page --> Press OK button.

New Window will appear, here you need to Name your page and specify package.
Name: ImportcsvPG
Package: oracle.apps.fnd.webui
Press Buttons OK 

Renaming the default region (PG)
  1. In the Application Navigator tab, click on the ImportcsvPG.xml page
  2. In the Structure pane, click on the item ImportcsvPG --> region1 node.
  3. Now in the Property Inspector, set the following properties                                                              ID: PageLayoutRN
    AM Definition: oracle.apps.fnd.server.ImportcsvAM
    Window Title: Import CSV File Window
    Title: Import CSV File           
  4. Click on the Save All button from the toolbar. Run the page    
Adding a region (RG)

  1. Click the ImportcsvPG.xml in the Applications Manager and the page
    components will appear in the Structure pane.
  2. In the Structure pane, right-click PageLayoutRN and select New | Region from
    the pop-up menu.
  3. In the Property Inspector, set the following properties:
    ID: ImportcsvRN
    Region Style: defaultSingleColumn
  4. Click on the Save All button from the toolbar.
Adding item to hold path

Navigation:
Right Click on PagePayoutRN -->New -->Item


Setting item properties

In the Structure pane, click on the Item attribute and set the following properties:
ID: MessageFileUpload
Item Style: MessageFileUpload 

Adding item for GO Button


Navigation:
Right Click on PagePayoutRN -->New -->Item


Setting item properties

In the Structure pane, click on the Item attribute and set the following properties:
ID: Go
Item Style: SubmitButton
Attribute Set :/oracle/apps/fnd/attributesets/Buttons/Go

Create Controller
 
Navigation:
Right Click on PagePayoutRN -->Set New Controller

New Window will appear to you, you need to specify Package and Name
Package: oracle.apps.fnd.webui
Name: ImportcsvCO

Add below listed code in processFormRequest

       OAApplicationModule am = (OAApplicationModule) pageContext.getApplicationModule(webBean);

 OAViewObjectImpl vo =  
       (OAViewObjectImpl)am.findViewObject("ImportcsvVO1"); 
 OAViewObjectImpl csvVO =  
       (OAViewObjectImpl)am.findViewObject("ImportcsvVO1"); 
     if (pageContext.getParameter("Go") != null) { 
       //Get Data of uploaded CSV file 
       DataObject csvUploadData =  
         pageContext.getNamedDataObject("MessageFileUpload"); 
       //Declare Variable that will be used in reading uploaded file 
       String fileName    = null; 
       String contentType = null; 
       Long fileCapacity  = null; 
       BlobDomain uploadStream = null; 
       BufferedReader inReader = null; 
       try { 
         fileName =  
             (String)
csvUploadData.selectValue(null, "UPLOAD_FILE_NAME"); 
         contentType =  
             (String)
csvUploadData.selectValue(null, "UPLOAD_FILE_MIME_TYPE"); 
         uploadStream =  
             (BlobDomain)
csvUploadData.selectValue(null, fileName); 
         inReader =  
             new BufferedReader(new InputStreamReader(uploadStream.getBinaryStream())); 
         fileCapacity = new Long(uploadStream.getLength()); 
       } catch (NullPointerException ex) { 
         throw new OAException("Please Select an CSV File to Upload it to Database!!!",  
                    OAException.ERROR); 
       } 
       try { 
         String wholeLine = ""; 
         long counter = 0; 
         String[] seperatedCells; 
         while (((wholeLine = inReader.readLine()) != null))
         { 
           //Split the deliminated data and 
           if (wholeLine.trim().length() > 0) { 
             //split whole line to cells 
             seperatedCells = wholeLine.split(","); 
           
             Row row = vo.createRow();
             vo.insertRow(row);
             row.setNewRowState(Row.STATUS_INITIALIZED);
           
              row.setAttribute("Column1",seperatedCells[0]); 
              row.setAttribute("Column2", seperatedCells[1]); 
              row.setAttribute("Column3",seperatedCells[2]); 
              row.setAttribute("Column4", seperatedCells[3]); 
              row.setAttribute("Column5", seperatedCells[4]);
           } 
         }
       } catch (IOException e) { 
         throw new OAException(e.getMessage(), OAException.ERROR); 
       }
       
         am.getTransaction().commit();
         pageContext.forwardImmediately(
          "OA.jsp?page=/oracle/apps/fnd/webui/ImportcsvPG",
           null, OAWebBeanConstants.KEEP_MENU_CONTEXT,
           null,
           null,
           true,
           OAWebBeanConstants.ADD_BREAD_CRUMB_NO);
        
       throw new OAException("CSV File Uploaded SuccessFully!!!",  
                  OAException.CONFIRMATION); 
     } 


------------------------------------------- 

Test Page

Navigation:

Right Click on ImportcsvPG -->Run 



3 comments:

  1. how to handle when there is comma in data??

    ReplyDelete
  2. Thank you for the code, but for large files connection is failing, any help?

    ReplyDelete
  3. What could be the maximum number of fields a .csv file can have to import data to a table.

    ReplyDelete