OAF page to UPLOAD the data from excel sheet to the database table

  






UPLOAD BUTTON (logic below):

Excel sheet column structure:

Table Structure:


Code inside Controller:

public void processFormRequest(OAPageContext  pageContext,  OAWebBean    webBean)

{

     super.processFormRequest(pageContext, webBean);

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

     String   filename   = null;

     String   fname       = null;

     String   ext            = null;


    pageContext.writeDiagnostics(this,"Inside PFR..",1);

     if(pageContext.getParameter("UploadBtn") != null)   //ID of the Upload button

      {

               DataObject   upload  =  pageContext.getNamedDataObject("FileUpload");  //import oracle.cabo.ui.data.DataObject;

//"FileUpload" is the ID of the item with style "messageFileUpload". 

               try {

                      filename = (String)upload.selectValue(null, "UPLOAD_FILE_NAME");

                      int mid =  filename.lastIndexOf(".");

                      fname = filename.substring(0, mid);

                      ext      = filename.substring(mid + 1,  filename.length());

               }

               catch (NullPointerException  e) {

                        pageContext.writeDiagnostics(this, "HAR$ - Inside exceptionpart: " + e, 1)

               }  //end of try catch


               if (!"csv".equalsIgnoreCase(ext) || !"CSV".equalsIgnoreCase(ext)){

                        throw new OAException("Please upload only .csv extension file", OAException.ERROR); 

                  }

   


             //To delete the temp table before uploading the data into the temp table everytime

             String  sqlDelete = "BEGIN   delete from xxcust_lifecycle_tmp;  END;";

             CallableStatement   callstmt  = (CallableStatement)am.getOADBTransaction().createCallableStatement(sqlDelete,1);

             try {

                         callstmt.execute();                

                  }

             catch (Exception e) {

                      pageContext.writeDiagnostics(this, "Error during delete life cycle table" +e, 1);

}


                BlobDomain   uploadstream = (BlobDomain)upload.selectValue(null, filename);

                oracle.jbo.domain.Number  batchID = am.getOADBTransaction().getSequenceValue("APPS.XXCUST_LIFECYCLEUPLD_SEQ");


                Serializable param[] = {uploadstream, filename, batchID};

                Class  classparam[] = {BlobDomain.class, String.class, oracla.jbo.domain.Number.class};

                am.invokeMethod("DataUpload", param, classparam);


                //validateData

               this.validateData(am,  batchID);

       } // end of IF

}

NOTE: XXCUSTlifeCycleUploadEO  entity object should be already created to load the data from the excel to the table xxcust_life_cycle_data.


//validate Data method in controller

public  void  validateData(OAApplicationModule  am, Number  batchID)

{

    am.getOADBTransaction().writeDiagnostics("Inside validateData..");

    OADBTransaction   oadbtransaction  =  am.getOADBTransaction();

    StringBuffer   str  =  new  StringBuffer();

    str.append("BEGIN   xxcust_vldt_lfcycle_data( p_batch_id  =>  :1 );   END;");


    OracleCallableStatement   ocs = (OracleCallableStatement)oadbtransaction.createCallableStatement(str.toString(),  1);

     try {

            ocs.setNumber(1,  (NUMBER)batchID);

            ocs.execute();

         }

      catch (Exception  e) {

               throw  OAException.wrapperException(e);

      }

}


Code inside AM:

public void DataUpload(BlobDomain   filedata, String  filename, oracle.jbo.domain.Number  batchID) throws IOException
{
     getOADBTransaction().writeDiagnostics(this, "Inside DataUpload..", 1);

     OAViewObjectImpl   vo  =  getXxcustLifeCycleDataVO();
     vo.clearCache();

     if(!vo.isPreparedForExecution()) {
                vo.setMaxFetchSize(0);
     }


     //variables
     int i           = 0;
     Row row   = null;
     
     String[] value         = null;
     String[] mainvalue = null;
     String location[]     = null;
     String  line             = null;


     getOADBTransaction().writeDiagnostics(this,"HAR$-BatchID: " + batchID, 1);

     //Reading the file
     BufferedReader  br =  new BufferedReader(new InputStreamReader(filedata.getBinaryStream()));

      while((line = br.readLine()) != null)
     {
            int fieldscount  = 6;  //excel format columns

           //check for headers i.e first line, if all headers are present based on count.
          if(i == 0)
          {
                  mainvalue = line.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)");
                  if (mainvalue.length != fieldscount)
                  {
                       throw new OAException("XXCUST"
                                                               ,"XXCUST_GRIP_UPD_HDR_VALID_MSG", null,  OAException.ERROR,  null);
                   }
           }//end if


            location = new  String[mainvalue.length];

            //After header section, data is checked by each line i.e from 2nd line
            if (i>0) 
           {
                      value = line.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)");
                    int length = value.length;

                  //blank records in file are not uploaded i.e length = 0
                 if (length > 0) 
                 {
                       //without this null values are inserted in temp table.
                      for (int m = 0; m < mainvalue.length; m++)
                      {
                              if (length > m)  {
                                   location[m]  = value[m];
                               }
                              else {
                                         location[m] = "";
                              }
                       }//for loop

                      //check for mandatory fields i.e OU in excel
                      if("".equals(location[0].trim()))
                      throw new OAException("Item code is mandatory!!", OAException.ERROR);

                      row = vo.createRow();
                      int  fieldnumber = 0;

                      row.setAttribute("BatchId",batchID);
                      row.setAttribute("UploadFileName",filename);
                      row.setAttribute("ItemCode",location[fieldnumber].trim());
                      row.setAttribute("LaunchDate",location[++fieldnumber].trim().toUpperCase());
         row.setAttribute("EndLaunchDate",location[++fieldnumber].trim().toUpperCase());
                      row.setAttribute("CannibalizationPerc",location[++fieldnumber].trim());
                      row.setAttribute("EolDate",location[++fieldnumber].trim());
                      row.setAttribute("ProcessFlag",location[++fieldnumber].trim().toUpperCase());
                  }//length>0
                         vo.insertRow(row);
           
             }//end of i

             i++;
      }//end of while
      
       br.close();
       getOADBTransaction().commit();

       throw new OAException("The file "+filename+" has been successfully processed!! ", OAException.CONFIRMATION);
}


Comments

Popular posts from this blog

AD_ZD_TABLE : Steps to follow while creating table in R12.2.*

Initiating a webservice API from Plsql package !!