Sunday 9 March 2014

Upload file to Unix server in OAF Page


Create a page with Item Style: MessageFileUpload

Controller Code:

package xxx.oracle.apps.ap.upload.webui;
import oracle.cabo.ui.data.DataObject;
import java.io.FileOutputStream;
import java.io.InputStream;
import oracle.jbo.domain.BlobDomain;
import java.io.File;
import java.io.Serializable;
import oracle.apps.fnd.framework.webui.OAControllerImpl;
import oracle.apps.fnd.framework.webui.OAPageContext;
import oracle.apps.fnd.framework.webui.beans.OAWebBean;
import oracle.cabo.ui.data.DataObject;
import oracle.jbo.domain.BlobDomain;

public class uploadCO extends OAControllerImpl
{
  public void processRequest(OAPageContext pageContext, OAWebBean webBean)
  {
    super.processRequest(pageContext, webBean);
  }

  public void processFormRequest(OAPageContext pageContext, OAWebBean webBean)
  {
    super.processFormRequest(pageContext, webBean);

      super.processFormRequest(pageContext, webBean);
      OAApplicationModule am = pageContext.getApplicationModule(webBean);
       if(pageContext.getParameter("Upload")!=null)
          {
            fileupload(pageContext,"item1","/var/tmp");
          }

  }


    public void fileupload(OAPageContext pageContext, String fileuploadBeanId,String server_dir_path)
    {
    pageContext.writeDiagnostics(this,"start of fileupload *************",6);
    System.out.println("start of fileupload *************");
    DataObject fileUploadData = (DataObject) pageContext.getNamedDataObject(fileuploadBeanId);
    if(fileUploadData!=null)
    {
    pageContext.writeDiagnostics(this,"start of fileupload *************",6);
    String uFileName =(String) fileUploadData.selectValue(null, "UPLOAD_FILE_NAME");
    String contentType = (String) fileUploadData.selectValue(null, "UPLOAD_FILE_MIME_TYPE");

    File file = new File(server_dir_path, uFileName);
    FileOutputStream output = null;
    InputStream input = null;

    try
    {
    output = new FileOutputStream(file);
    BlobDomain uploadedByteStream =
    (BlobDomain) fileUploadData.selectValue(null, uFileName);
    input = uploadedByteStream.getInputStream();
    for (int bytes = 0; bytes < uploadedByteStream.getLength(); bytes++)
    {
    output.write(input.read());
    }
    }
    catch (Exception e)
    {
    e.printStackTrace();
    }
    finally
    {
    try
    {
    if (input != null)
    {
    input.close();
    }
    if (output != null)
    {
    output.close();
    output.flush();
    }
    }
    catch (Exception ez)
    {
    ez.printStackTrace();
    }
    }

    }
    }


}




LOV in OAF


Notice the way I have added where clause in the voimpl, since there is bug in OAF with bind variables being used in VO query.

Code in Controller
******************************************************
    public void processRequest(OAPageContext pageContext, OAWebBean webBean) {
        super.processRequest(pageContext, webBean);

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

        String orgId = null;
        System.out.println("initializeLOVVO****" + pageContext.getOrgId());
        if (pageContext.getOrgId() != 0) {
            System.out.println("initializeLOVVO****" + pageContext.getOrgId());
            orgId = pageContext.getOrgId() + "";
        }

        System.out.println(" processFormRequest> SearchEFT Starts *****");
        voidEFTLovVOImpl vo =
            (voidEFTLovVOImpl)am.findViewObject("voidEFTLovVO1");
        Serializable[] parameters = { orgId };
        am.invokeMethod("initializeLOVVO", parameters);
        System.out.println("initializeLOVVO****" + vo);
    }


******************************************************
Call InitQuery in AM

//init orgcontext in VoidLOVVO

 public void initializeLOVVO(String orgId)
 {
 voidEFTLovVOImpl lovvo = getvoidEFTLovVO1();
 lovvo.initQuery(orgId);
 }

*************************************************
add init query in vimpl

 public void initQuery(String orgIdS)
 {

 OAApplicationModuleImpl localOAApplicationModuleImpl = (OAApplicationModuleImpl)getApplicationModule();
 OADBTransactionImpl localOADBTransactionImpl = (OADBTransactionImpl)localOAApplicationModuleImpl.getOADBTransaction();
 System.out.println("voidEFTLovVOImpl> initQuery called"+localOADBTransactionImpl.getOrgId()+"");
 System.out.println("voidEFTLovVOImpl> initQuery called");      

     if ((localOADBTransactionImpl.getOrgId()+"" != null) &&
         (!("".equals(localOADBTransactionImpl.getOrgId()+""))))
     {
       System.out.println("voidEFTLovVOImpl initQuery STARTED");
       // Do the following conversion for type consistency.
       Number orgId = null;
   
       try
       {
         orgId = new Number(localOADBTransactionImpl.getOrgId()+"");
         System.out.println("voidEFTLovVOImpl IN try");
       }
       catch(Exception e)
       {
         System.out.println("voidEFTLovVOImpl IN CATCH"+e);
       }

       setWhereClause(null);
       setWhereClauseParams(null);
       setWhereClause("ORG_ID ='"+orgId+"'");
       executeQuery();
 }

 }