Saturday, March 5, 2016

Default Filter Value in af:table Filter

When we Enable Sorting and Filtering and need to Default value in Filter for First or each time ,
create bean with table handle

public class MyBean {
    public MyBean() {
    }
public FilterableQueryDescriptor getCustomQueryDescriptor() {
        String bindingEl = "#{bindings.MyVO1Query}";

        FacesCtrlSearchBinding sbinding =
            (FacesCtrlSearchBinding)JSFUtil.resolveExpression(bindingEl);
        FilterableQueryDescriptor fqd =
            (FilterableQueryDescriptor)sbinding.getQueryDescriptor();
        if (fqd != null &&
            fqd.getConjunctionCriterion() != null  && isInitialQuery()) {
            ConjunctionCriterion cc = fqd.getConjunctionCriterion();
            List<Criterion> lc = cc.getCriterionList();
            for (Criterion c : lc) {
                if (c instanceof AttributeCriterion) {
                    AttributeCriterion ac = (AttributeCriterion)c;
                    if ((ac.getAttribute().getName().equalsIgnoreCase("Status")) &&
                        ac.getValues().isEmpty()) { 
                        Map filterCriteria = fqd.getFilterCriteria();
                        if (filterCriteria == null) {
                            filterCriteria = new HashMap<String, Object>();
                            fqd.setFilterCriteria(filterCriteria);
                        }
                        filterCriteria.put("Status", "PENDING");
                    }
                }
            }
            setInitialQuery(false);
            RichTable tbl = getMyTable();
            QueryEvent queryEvent = new QueryEvent(tbl, fqd);
            sbinding.processQuery(queryEvent);
        }
        return fqd;
    }

}

Change af:table property
filterModel="#{pageFlowScope.MyBean.customQueryDescriptor}"

References
http://lucbors.blogspot.com/2015/08/adf-1213-implementing-default-table.html
https://community.oracle.com/thread/2232873?tstart=0
http://www.awasthiashish.com/2013/11/apply-filter-on-aftable-column.html

Monday, January 25, 2016

JDeveloper 11.1.1.7.0 Could not reserve enough space for object heap

While Running Integrated Weblogic Server instance got Error

C:\Oracle\MIDDLE~1\JDK160~1\bin\java -client   -Xms256m -Xmx512m -XX:CompileThreshold=8000 -XX:PermSize=128m  -XX:MaxPermSize=512m -Dweblogic.Name=DefaultServer -Djava.security.policy=C:\Oracle\MIDDLE~1\WLSERV~1.3\server\lib\weblogic.policy -Djavax.net.ssl.trustStore=C:\Oracle\Middleware\wlserver_10.3\server\lib\DemoTrust.jks -Doracle.jdeveloper.adrs=true -Dweblogic.nodemanager.ServiceEnabled=true  -Xverify:none  -da -Dplatform.home=C:\Oracle\MIDDLE~1\WLSERV~1.3 -Dwls.home=C:\Oracle\MIDDLE~1\WLSERV~1.3\server -Dweblogic.home=C:\Oracle\MIDDLE~1\WLSERV~1.3\server  -Djps.app.credential.overwrite.allowed=true -Dcommon.components.home=C:\Oracle\MIDDLE~1\ORACLE~1 -Djrf.version=11.1.1 -Dorg.apache.commons.logging.Log=org.apache.commons.logging.impl.Jdk14Logger -Ddomain.home=C:\Users\jeet\AppData\Roaming\JDEVEL~1\SYSTEM~1.93\DEFAUL~1 -Djrockit.optfile=C:\Oracle\MIDDLE~1\ORACLE~1\modules\oracle.jrf_11.1.1\jrocket_optfile.txt -Doracle.server.config.dir=C:\Users\jeet\AppData\Roaming\JDEVEL~1\SYSTEM~1.93\DEFAUL~1\config\FMWCON~1\servers\DefaultServer -Doracle.domain.config.dir=C:\Users\jeet\AppData\Roaming\JDEVEL~1\SYSTEM~1.93\DEFAUL~1\config\FMWCON~1  -Digf.arisidbeans.carmlloc=C:\Users\jeet\AppData\Roaming\JDEVEL~1\SYSTEM~1.93\DEFAUL~1\config\FMWCON~1\carml  -Digf.arisidstack.home=C:\Users\jeet\AppData\Roaming\JDEVEL~1\SYSTEM~1.93\DEFAUL~1\config\FMWCON~1\arisidprovider -Doracle.security.jps.config=C:\Users\jeet\AppData\Roaming\JDEVEL~1\SYSTEM~1.93\DEFAUL~1\config\fmwconfig\jps-config.xml -Doracle.deployed.app.dir=C:\Users\jeet\AppData\Roaming\JDEVEL~1\SYSTEM~1.93\DEFAUL~1\servers\DefaultServer\tmp\_WL_user -Doracle.deployed.app.ext=\- -Dweblogic.alternateTypesDirectory=C:\Oracle\MIDDLE~1\ORACLE~1\modules\oracle.ossoiap_11.1.1,C:\Oracle\MIDDLE~1\ORACLE~1\modules\oracle.oamprovider_11.1.1,C:\Oracle\MIDDLE~1\ORACLE~1\modules\oracle.jps_11.1.1 -Djava.protocol.handler.pkgs=oracle.mds.net.protocol  -Dweblogic.jdbc.remoteEnabled=false -Dwsm.repository.path=C:\Users\jeet\AppData\Roaming\JDEVEL~1\SYSTEM~1.93\DEFAUL~1\oracle\store\gmds   -Dweblogic.management.discover=true  -Dwlw.iterativeDev= -Dwlw.testConsole= -Dwlw.logErrorsToConsole= -Dweblogic.ext.dirs=C:\Oracle\MIDDLE~1\patch_wls1035\profiles\default\sysext_manifest_classpath;C:\Oracle\MIDDLE~1\patch_jdev1111\profiles\default\sysext_manifest_classpath  weblogic.Server

Error occurred during initialization of VMCould not reserve enough space for object heapCould not create the Java virtual machine.

Process exited.


Solution:
1)Download - jdk-6u45-windows-x64.exe and install it.
2)After installation it creates folder C:\Program Files\Java\jdk1.6.0_45
3)Need to update this path in two files.
a)jdev.conf(<JDEV_HOME>\jdeveloper\jdev\bin)
eg. C:\Oracle\Middleware\jdeveloper\jdev\bin
#SetJavaHome C:\Oracle\Middleware\jdk160_24
SetJavaHome C:\Program Files\Java\jdk1.6.0_45

b)setDomainEnv(C:\Users\<yourUser>\AppData\Roaming\JDeveloper\system11.1.1.7.40.64.93\DefaultDomain\bin)
set JAVA_HOME=C:\Program Files\Java\jdk1.6.0_45

References :-
http://adfjsf.blogspot.com/2012/10/jdeveloper-11g-could-not-reserve-enough.html



Wednesday, February 4, 2015

ADF Skins

For 11.1.1.7.0
Fusion Dev Guide
http://docs.oracle.com/cd/E28280_01/web.1111/b31974/toc.htm

Customizing Appearance using Skins
http://docs.oracle.com/cd/E29542_01/web.1111/b31973/af_skin.htm#ADFUI330
http://docs.oracle.com/cd/E29542_01/web.1111/b31973/af_skin.htm#ADFUI335

The directory path to the XML schemas is similar to the following:
JDeveloper_Home/jdeveloper/modules/oracle.adf.view_11.1.1/trinidad-impl.jar!/org/apache/myfaces/trinidadinternal/ui/laf/xml/schemas/skin/trinidad-skins.xsd

1)Create mySkin.css under skins/mySkin/mySkin.css
2)Create below file under WEB-INF dir
------  trinidad-skins.css

<?xml version="1.0" encoding="UTF-8" ?>
<skins xmlns="http://myfaces.apache.org/trinidad/skin">
  <skin>
    <id>mySkin.desktop</id>
    <family>mySkin</family>
    <extends>fusion.desktop</extends>
    <render-kit-id>org.apache.myfaces.trinidad.desktop</render-kit-id>
    <style-sheet-name>skins/mySkin/mySkin.css</style-sheet-name>
  </skin>
</skins>
3)------  trinidad-config.css

<?xml version="1.0" encoding="windows-1252"?>
<trinidad-config xmlns="http://myfaces.apache.org/trinidad/config">
  <skin-family>mySkin</skin-family>
  <skin-version>v1</skin-version>
</trinidad-config>

To Refresh skin files
****   If you changed extends in trinidad-skins.css  eg.
<extends>skyros-v1.desktop</extends>   to <extends>fusion.desktop</extends>

To affect changes on actual jspx or jsff
just swap <skin-family>mySkin</skin-family>   to  <skin-family>skyros</skin-family>
and again back to  
<skin-family>mySkin</skin-family>

References
https://technology.amis.nl/2009/07/01/using-adf-faces-11g-skinning-for-setting-the-styles-of-specific-component-instances-or-groups-of-instances/
Skinning only for One Component
http://adfskinning.blogspot.com/2012/05/oracle-adf-faces-skinning-enables.html

Sunday, September 7, 2014

ADF Exception Handling

Custom Exception Handlers can be used to suppress or alter exception reporting.


1. Model Layer

Extending  DCErrorHandlerImpl.
http://docs.oracle.com/cd/B31017_01/web.1013/b25947/web_val008.htm

1.Create class by extending DCErrorHandlerImpl.
2.Update DataBindings.cpx
<Application xmlns="http://xmlns.oracle.com/adfm/application" version="11.1.2.60.17" id="DataBindings"
             SeparateXMLFiles="false" Package="view" ClientType="Generic"
             ErrorHandlerClass="view.exception.MyCustDcExceptionHandler">
3. Handle,Extend or Skip Exceptions by overriding method
    public void reportException(DCBindingContainer dCBindingContainer,
                                Exception exception)

Got error
oracle.jbo.JboException: JBO-29000: Unexpected exception caught: java.lang.InstantiationException, msg=view.exception.MyCustDcExceptionHandler

    public MyCustDcExceptionHandler(boolean b) {
        super(b);
    }
Change To
    public MyCustDcExceptionHandler() {
        super(true);
    }




To customize known error message
@Override
public String getDisplayMessage(BindingContext ctx, Exception ex) {
String message="";
if (ex instanceof oracle.jbo.ValidationException) {
String msg = ex.getMessage();
int i=msg.indexOf("JBO-25013");//When JBO-25013 Too many object match primary key exception occur.
if(i>0)
{
message= "Duplicate Employee Id Found.";
}
message= getDisplayMessage(ctx,ex);
}
else
{
message=getDisplayMessage(ctx,ex);
}
return message;
}


References
http://adfwithejb.blogspot.com/2012/05/exception-handling-in-adf-part-1.html
http://deepak-adf.blogspot.com/2014/01/adf-exception-handling-taskflow.html
http://www.adftutorials.com/adf-custom-error-handler-to-display-custom-message-to-user.html
http://www.jobinesh.com/2011/03/customizing-business-components-error.html
http://ramannanda.blogspot.com/2011/11/error-handling-in-adf.html

2.Task Flow Exception Handler


References
http://fortunefusionminds.blogspot.com/2013/08/how-to-handles-exceptions-in-adf.html
http://andrejusb.blogspot.com/2010/05/handling-exceptions-in-oracle-ui-shell.html
http://biemond.blogspot.com/2008/10/reusable-adf-task-flow-exception.html
http://multikoop.blogspot.com/2014/02/adf-handling-exceptions-from_14.html


Handling Exception at adfc-config
http://multikoop.blogspot.com/2014/02/adf-handling-exceptions-from_14.html

  public void handleExceptionShowMessageInPopupDialog() {

    ControllerContext cc = ControllerContext.getInstance();

    Exception ex = cc.getCurrentViewPort().getExceptionData();
    String message = ex.getMessage();


    FacesContext fc = FacesContext.getCurrentInstance();
    FacesMessage facesMessage =
      new FacesMessage(FacesMessage.SEVERITY_ERROR, "UTF: " + message, null);
    fc.addMessage(null, facesMessage);

    cc.getCurrentRootViewPort().clearException();
    fc.renderResponse();

  }

3.Controller Exception Handler

1)Create a Java class that extends ExceptionHandler
2)Create folder .adf\META-INF\services and add file with the name oracle.adf.view.rich.context.ExceptionHandler. Save with no extension.
Under .adf\META-INF\services File Type should be EXCEPTIONHANDLER File.
3)In the file, add the absolute name of your custom exception handler class (package name and class name without the “.class” extension)
eg.
com.exchandl.view.ArCustomExceptionHandler



References
https://blogs.oracle.com/jdevotnharvest/entry/extending_the_adf_controller_exception_handler
http://www.yenlo.nl/nl/adf-11g-handling-the-adfc-12000-controllerexception-with-custom-exception-handling/
http://ramannanda.blogspot.com/2013/04/adf-exception-handling-scenario.html


ADF Errors
http://jneelmani.blogspot.com/2012/02/erroradf.html


Trace
http://marxsoftware.blogspot.com/2008/09/surprisingly-simple-stacktraceelement.html
http://marxsoftware.blogspot.com/2010/10/reading-java-stack-traces-few-tips.html
public static String accessExceptionStackTraceViaPrintWriter(final Throwable throwable)
   {
      final Writer writer = new StringWriter();
      final PrintWriter printWriter = new PrintWriter(writer);
      throwable.printStackTrace(printWriter);
      return writer.toString();
   }

Tuesday, April 9, 2013

ADF set Focus on Table Component


 Write Below piece of code in Action / ActionListener        


 //t1 -- Your Table Id
 //it1-- Your text component inside table
 .........       
 FacesContext ctx = FacesContext.getCurrentInstance();
        String tableId = t1.getClientId(FacesContext.getCurrentInstance());
       
       
        String inputId = "";
        RowKeySet rks = t1.getSelectedRowKeys();
        if(rks != null && rks.size() > 0) {
            Object rowKey = rks.iterator().next();
            String rowId = t1.getClientRowKeyManager().getClientRowKey(FacesContext.getCurrentInstance(), t1, rowKey);
           
            inputId = tableId + ":" + rowId + ":" + "it1";
       
        }
       
        //compose JavaScript to be executed on the client
        StringBuilder script = new StringBuilder();
        //use client id to ensure component is found if located in
        //naming container 
        script.append("var textInput = ");
        script.append("AdfPage.PAGE.findComponentByAbsoluteId");
        script.append ("('"+inputId+"');");
       
        script.append("if(textInput != null){");
        script.append("textInput.focus();");
        script.append("}");
        //invoke JavaScript
        writeJavaScriptToClient(script.toString());
 .........

      public static void writeJavaScriptToClient(String script) {
        FacesContext fctx = FacesContext.getCurrentInstance();
        ExtendedRenderKitService erks = null;
        erks = Service.getRenderKitService(
                     fctx, ExtendedRenderKitService.class);
        erks.addScript(fctx, script);
      }


Detail Explanation can be found at
http://www.bartkummel.net/2009/11/oracle-adf-set-focus-to-input-field-in-data-table/

References
https://blogs.oracle.com/jdevotnharvest/entry/how_to_programmatically_set_focus

https://blogs.oracle.com/shay/entry/controlling_tab_order_in_an_ad

http://technology.amis.nl/2008/01/04/adf-11g-rich-faces-focus-on-field-after-button-press-or-ppr-including-javascript-in-ppr-response-and-clientlisteners-client-side-programming-in-adf-faces-rich-client-components-part-2/

Sunday, December 9, 2012

ADF Upload Blob File in Table Column


Create Table with Blob Column

create table xx_attachment(fileId Number, file_name VARCHAR2(255),
                                          file_content_type varchar2(100),file_data blob,
                                         CONSTRAINT xx_attach_pk PRIMARY KEY (fileId));



Create EO,VO add it to AM.

Create below variable and accessor inside Managed Bean or Backing Bean.

import org.apache.myfaces.trinidad.model.UploadedFile;
...
    private UploadedFile _file;   
   
    public UploadedFile getFile() {
        return _file;
    }

    public void setFile(UploadedFile file) {
        _file = file;
    }



On JSF Page(jspx/jsf) or Page Fragment(jsff)
1)From DataControl unde XxAttachmentVO1 --> Operations --> Drag CreateInsert method and drop as ADF Button.   (When you click this Button it creates Blank row).

2)From Common Components drag inputFile(af:inputFile) component and drop on page.
Make sure  you put value as  #{<yourMangedBean>.file}

<af:inputFile label="Upload File" id="if1"
                                  value="#{<yourMangedBean>.file}"/>
3)From Common Components drag Button and drop after inputFile component.
Write below code on Button action Listner.

<af:commandButton text="Upload" id="cb11"
                                      action="#{<yourManagedBean.uploadAttach}"/>

4)Add Commit action method in Bindings.

5)For Page Form make sure usesUpload property is True.
<af:form id="f1" usesUpload="true">


import oracle.adf.model.BindingContext;
import oracle.adf.model.binding.DCBindingContainer;
import oracle.adf.model.binding.DCIteratorBinding;
import oracle.adf.view.rich.event.PopupFetchEvent;

import oracle.binding.BindingContainer;
import oracle.binding.OperationBinding;

import oracle.jbo.Row;
import oracle.jbo.domain.BlobDomain;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.SQLException;
import javax.faces.event.ActionEvent;
...
    public String uploadAttach() {
        // Add event code here...
        //BindingContainer bindings = (BindingContainer)BindingContext.getCurrent().getCurrentBindingsEntry();
    
        UploadedFile myfile = (UploadedFile)this.getFile();
       
        BindingContext bindingctx = BindingContext.getCurrent();
        BindingContainer bindings = bindingctx.getCurrentBindingsEntry();
        DCBindingContainer bindingsImpl = (DCBindingContainer)bindings;
        DCIteratorBinding iter = bindingsImpl.findIteratorBinding("XxAttachmentVO1Iterator");
       
        Row row = iter.getCurrentRow();
        // Upload File into Blob Column
        row.setAttribute("FileData", createBlobDomain(myfile));
       
        // File Name
        String fileName = (String)myfile.getFilename();
        row.setAttribute("FileName", fileName);
       
        // File Content/MIME Type
        String fileContentType = (String)myfile.getContentType();
        row.setAttribute("FileContentType", fileContentType);
      
        //Commit Transaction
        OperationBinding method = bindings.getOperationBinding("Commit"); 
        method.execute();
       
        return null;
    }

    private BlobDomain createBlobDomain(UploadedFile file) {
        InputStream in = null;
        BlobDomain blobDomain = null;
        OutputStream out = null;

        try {
            in = file.getInputStream();

            blobDomain = new BlobDomain();
            out = blobDomain.getBinaryOutputStream();
            byte[] buffer = new byte[8192];
            int bytesRead = 0;

            while ((bytesRead = in.read(buffer, 0, 8192)) != -1) {
                out.write(buffer, 0, bytesRead);
            }

            in.close();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.fillInStackTrace();
        }

        return blobDomain;
    }






To download file.
http://hasamali.blogspot.com/2011/09/download-file-in-oracle-adf-gui.html



ADF Multi Select Options (af:selectMany)

ADF Code Corner
https://blogs.oracle.com/jdevotnharvest/entry/how_to_access_selected_rows


http://myadfnotebook.blogspot.com/2010/09/getting-string-value-or-item-code-of.html




Create Master Detail Table
create table xx_users(user_id NUMBER,user_name VARCHAR2(100),
                                  CONSTRAINT xx_users_pk PRIMARY KEY (user_Id));
create table  xx_roles(role_id NUMBER,role_name VARCHAR2(100),
                                   CONSTRAINT xx_roles_pk PRIMARY KEY (role_Id));
Create EO,VO for above 2 tables.



create table xx_user_roles(user_role_id NUMBER,user_id NUMBER,role_name VARCHAR2(100),
                    CONSTRAINT xx_user_roles_pk PRIMARY KEY (user_role_Id),
                    CONSTRAINT xx_user_roles_fk1
                      FOREIGN KEY (user_id)
                      REFERENCES xx_users(user_id));
Create ReadOnly VO based on Above table.

Add All VO instances into AppModule.

From DataControl Add CreateInsert Operation for XxUsersVo1 as Button on Page.
From DataControl XxUsersVo1 as ADF Form.

From Data Control add XxRolesLOVVO1 as ADF Select Many Choice
as
              <af:selectManyChoice value="#{bindings.XxRolesLOVVO1.inputValue}"
                                   label="#{bindings.XxRolesLOVVO1.label}"
                                   id="smc1">
                <f:selectItems value="#{bindings.XxRolesLOVVO1.items}"
                               id="si1"/>
              </af:selectManyChoice>



On Button Pressed

    public void addRoles() {
        BindingContext bctx = BindingContext.getCurrent();
        BindingContainer bindings = bctx.getCurrentBindingsEntry();
        JUCtrlListBinding allRolesList =
                 (JUCtrlListBinding) bindings.get("XxRolesLOVVO1");
          Object[] selVals = allRolesList.getSelectedValues();
          for (int i = 0; i < selVals.length; i++) {
            //Integer val = (Integer)selVals[i];
            String val = (String)selVals[i];
              System.out.println("Int Val "+val);

             // Insert into Table after getting selected Rows or your Code
              OperationBinding crRoleMethod = bindings.getOperationBinding("CreateInsertRoles"); 
              crRoleMethod.execute();
             
              DCBindingContainer bindingsImpl = (DCBindingContainer)bindings;
              DCIteratorBinding iter = bindingsImpl.findIteratorBinding("XxUserRolesVO2Iterator");

              Row row = iter.getCurrentRow();
              // Insert Role Name
              row.setAttribute("RoleName",val );
        
            //...
          }
    }


Use if you want to pull records based on Indices

    public void addRolesUsingIndices() {
        BindingContext bctx = BindingContext.getCurrent();
        BindingContainer bindings = bctx.getCurrentBindingsEntry();
        JUCtrlListBinding allRolesList =
                 (JUCtrlListBinding) bindings.get("XxRolesLOVVO1");
           int[] selVals = allRolesList.getSelectedIndices();
      
          for (int indx : selVals ) {
                  Row rw = allRolesList.getRowAtRangeIndex(indx);
                  Number id  = (Number)rw.getAttribute("RoleId");
                  String val = (String)rw.getAttribute("RoleName");
             
               // Insert into Table after getting selected Rows  or your Code
               OperationBinding crRoleMethod = bindings.getOperationBinding("CreateInsertRoles"); 
              crRoleMethod.execute();
             
              DCBindingContainer bindingsImpl = (DCBindingContainer)bindings;
              DCIteratorBinding iter = bindingsImpl.findIteratorBinding("XxUserRolesVO2Iterator");
   
              Row row = iter.getCurrentRow();
              // Insert Role Name
              row.setAttribute("RoleName",id+" "+val );
        
            //...
          }
    }






If the Choice List is Static eg.
            <af:selectManyCheckbox label="Roles" id="smc1"
                                   binding="#{backingBeanScope.Backing_xxUserCreation.smc1}"
                                   value="#{backingBeanScope.Backing_xxUserCreation.listValue}"
                                   autoSubmit="true">
              <af:selectItem label="Accountant" value="ACCOUNTANT" id="si3"
                             binding="#{backingBeanScope.Backing_xxUserCreation.si3}"/>
              <af:selectItem label="Sales Manager" value="SALES_MANAGER"
                             id="si1"
                             binding="#{backingBeanScope.Backing_xxUserCreation.si1}"/>
              <af:selectItem label="Finance Manager" value="FINANCE_MANAGER"
                             id="si2"
                             binding="#{backingBeanScope.Backing_xxUserCreation.si2}"/>
              <af:selectItem label="Buyer" value="BUYER" id="si4"
                             binding="#{backingBeanScope.Backing_xxUserCreation.si4}"/>
            </af:selectManyCheckbox>



Add below method call on Button Pressed

addRoles(listValue);


Add below code in Managed Bean or Backing Bean


    private Object[] listValue;
   
    public void setListValue(Object[] listvalue){
        this.listValue = listvalue;
    }
   
    public Object[] getListValue(){
        return listValue;
    }
   
    public String getListString(){
        return createString(listValue);
    }
   
    public String createString(Object[] arr){
        if(arr != null){
            String values = "[";
            for(int i=0;i<arr.length;i++) {
                values = values + arr[i];
                if (i <arr.length - 1)
                values = values + ",";
                }
        values = values + "]";
        return values;
       }
        return null;
     }


    public void addRoles(Object[] arr){
       
         BindingContext bindingctx = BindingContext.getCurrent();
         BindingContainer bindings = bindingctx.getCurrentBindingsEntry();
        
        if(arr != null){
            //String values = "[";
            for(int i=0;i<arr.length;i++) {
                //values = values + arr[i];
                System.out.println("Roles to be added "+arr[i]);
                    // Insert Row into USer Roles table
                    OperationBinding crRoleMethod = bindings.getOperationBinding("CreateInsertRoles"); 
                    crRoleMethod.execute();
                   
                   
                    DCBindingContainer bindingsImpl = (DCBindingContainer)bindings;
                    DCIteratorBinding iter = bindingsImpl.findIteratorBinding("XxUserRolesVO2Iterator");
                   
                    Row row = iter.getCurrentRow();
                    // Insert Role Name
                    row.setAttribute("RoleName",arr[i] );
                //if (i <arr.length - 1)
                //values = values + ",";
                }
        //values = values + "]";
       }
     }


 

Monday, November 5, 2012

R12 SLA Tables

http://apps2fusion.com/at/58-pv/303-r12-sla-subledger-accounting

http://oracleapps88.blogspot.com/2011/11/r12-subledger-accounting-tables.html

 Oracle Sub Ledger accounting (SLA) is accounting hub in Oracle Application Release 12 (R12). It is used to derive all attributes required to account a transaction in Oracle General Ledger. In R12, SLA is used to derive the very basic accounting attributes like entered amount, accounted amount, Date, Currency code etc and the complex attributes like Ledger, Code Combination ID, Periods etc. After deriving these accounting attributes the transactions are then interfaced to GL from SLA. Thus in R12 no sub ledgers (AP, PO, PA etc) interfaces the transactions directly to GL, but all the transactions are interfaced to GL in following 2 steps:
1. Sub ledgers interface the data to SLA.
2. SLA derives the accounting information and interfaces the data to GL.

SLA gives the flexibility to manage the entire accounting rule at one place, which acts as a single source of truth for GL.


Run Create Accounting to Populate Accounting events (SLA)  tables. After running Creating Accounting user can view Accounting.

Key Tables for SLA

XLA_AE_HEADERS
XLA_AE_LINES
XLA_TRANSACTION_ENTITIES
XLA_DISTRIBUTION_LINKS
GL_IMPORT_REFERENCES


XLA_TRANSACTION_ENTITIES.entity_code IN (
'TRANSACTIONS',
"RECEIPTS',
'ADJUSTMENTS',
'PURCHASE_ORDER',
'AP_INVOICES',
'AP_PAYMENTS',
'MTL_ACCOUNTING_EVENTS',
'WIP_ACCOUNTING_EVENTS'
'EXPENDITURES'

-- Mapping Identifiers
--Menu: Setup > Subledger Accounting > Accounting Methods Builder > Events > Event Modal
--Entity Code                     Column Value                                Column in xla_transaction_entities
--EXPENDITURES           EXPENDITURE_ITEM_ID         SOURCE_ID_INT_1
--REVENUE                      PROJECT_ID                                SOURCE_ID_INT_1
--REVENUE                      DRAFT_REVENUE_NUM          SOURCE_ID_INT_2
--AP_INVOICES               INVOICE_ID                                SOURCE_ID_INT_1
--AP_PAYMENTS            CHECK_ID                                   SOURCE_ID_INT_1




Taking the example of Oracle Projects in 11i where after costing the transaction user need to run the ‘PRC: Interface Cost to General Ledger’ followed by ‘Journal Import’ followed by ‘PRC: Tieback process’. But in R12 user only need to run “PRC: Generate Cost Accounting Events” which will register events in SLA and thereafter SLA will take care of accounting the transaction and interfacing it to GL. There is no tieback process in R12, as there is one to one reference of event id between SLA and sub ledger tables.



Other Oracle Table Information
http://oracleappsviews.blogspot.com/2012/06/apps-tables-with-links.html#!/2012/06/apps-tables-with-links.html

XLA_AE_HEADERS XAH,
XLA_AE_LINES XAL,
xla.XLA_TRANSACTION_ENTITIES XTE,
XLA_DISTRIBUTION_LINKS XDL,
XLA_EVENTS XEVENT


R12 Error while running
PRC: Create Accounting
The application accounting definition Projects Standard Accounting owned by Oracle is not validated.  Please validate the application accounting definition or update the application accounting definitions contained in the subledger accounting method Standard Accrual.
Solution
Run Program
Validate Application Accounting Definitions with Ledger and Application Details.


Transaction data not found in XLA_TRANSACTION_ENTITIES

Solution
Query useing xla.xla_transaction_entities



http://oracle.anilpassi.com/mo-global-dive-into-r12-multi-org-design.html





exec fnd_global.apps_initialize(11787,20707,201);
exec mo_global.init ('PO');





http://oracle-ramaraj.blogspot.com/2013/01/oracle-app-s-link-between-gl-to.html

Oracle Apps GL Base Table and Interface Table
                          
GL_JE_HEADERS                      GL_INTERFACE
GL_JE_LINES                             GL_INTERFACE_HISTORY
GL_JE_CATEGORIES                GL_DAILY_RATES_INTERFACE  
GL_JE_SOURCES                      GL_BUDGET_INTERFACE
GL_SETS_OF_BOOKS              GL_IEA_INTERFACE
GL_DAILY_RATES
GL_CODE_COMBINATIONS
GL_BALANCES
GL_PERIODS
GL_PERIOD_SETS
GL_CURRENCIES
GL_HISTORICAL_RATES
GL_LOOKUPS   

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

 
Oracle Apps  :  Link between GL to Subledger Account

GL_JE_BATCHES (je_batch_id)                                   => GL_JE_HEADERS (je_batch_id)

GL_JE_HEADERS (je_header_id)                                  => GL_JE_LINES (je_header_id)

GL_JE_LINES (je_header_id,  je_line_num)                      => GL_IMPORT_REFERENCES (je_header_id, je_line_num)

GL_IMPORT_REFERENCES (gl_sl_link_table, gl_sl_link_id)        => XLA_AE_LINES (gl_sl_link_table, gl_sl_link_id)

XLA_AE_LINES (application_id, ae_header_id)                   => XLA_AE_HEADERS (application_id, ae_header_id) 

XLA_AE_HEADERS (application_id, event_id)                     => XLA_EVENTS (application_id, event_id)  

XLA_EVENTS (application_id, entity_id)                        => XLA.XLA_TRANSACTION_ENTITIES 

Thursday, November 1, 2012

ADF Generic Code and Information

ADF Blogs
https://blogs.oracle.com/shay/entry/new_adf_blogs

http://andrejusb-samples.blogspot.com/

Examples
https://blogs.oracle.com/smuenchadf/resource/examples

Some WebCenter blogs with good ADF related content:
WebCenter A-Team - https://blogs.oracle.com/ATEAM_WEBCENTER/
John Brunswick - http://www.johnbrunswick.com/
George Maggessy - http://george.maggessy.com
And of course Frank Nimphius Code Corner
http://www.oracle.com/technetwork/developer-tools/adf/learnmore/index-101235.html

Session
https://blogs.oracle.com/jdevotnharvest/entry/accessing_the_jsessionid_from_jsf

Slideshare
http://www.slideshare.net/VinayKumar92/adf-performance-tuning-tips-slideshare
http://www.slideshare.net/maikorocha/designing-well-known-websites-with-adf-rich-faces
http://flexagon.com/2015/07/tuning-best-practices-for-adf-applications/

Oracle Demo Page
http://jdevadf.oracle.com/adf-richclient-demo/faces/feature/layoutBasics.jspx
http://jdevadf.oracle.com/adf-richclient-demo/faces/components/index.jspx

Backing Bean Handy Codes
http://biemond.blogspot.com/2009/03/some-handy-code-for-backing-beans-adf.html


ADF with OAF
https://blogs.oracle.com/jruiz/entry/adf_and_oracle_e_business2

ADF get Current Row Attribute Value
import oracle.adf.model.BindingContext;
import oracle.adf.model.binding.DCBindingContainer;
import oracle.adf.model.binding.DCIteratorBinding;
import oracle.jbo.domain.Number;
....
        DCBindingContainer dcBindings = (DCBindingContainer)BindingContext.getCurrent().getCurrentBindingsEntry(); 
        DCIteratorBinding iterBind= (DCIteratorBinding)dcBindings.get("XxTestStgVO1Iterator"); 
        Number attItemId = (Number)iterBind.getCurrentRow().getAttribute("ItemId");



Accessing Data Controls and Bindings

Access AM
DCBindingContainer bc = getBindingContainer();
MyAppModule myAM =
(MyAppModule)bc.findDataControl("MyAppModuleDataControl").getDataProvider();

Getting Attribute from Iterator Binding
DCBindingContainer bc = getBindingContainer();
String ename = (String)bc.findIteratorBinding("EmpIter").getCurrentRow().getAttribute("EName");

Access Binding Container with Convenience API
BindingContainer  bc = BindingContext.getCurrent().getCurrentBindingEntry();


Programmatic Commit
import oracle.adf.model.BindingContext;
import oracle.binding.BindingContainer;
import oracle.binding.OperationBinding;
....
        BindingContext bindingContext = BindingContext.getCurrent();
        BindingContainer bindings = bindingContext.getCurrentBindingsEntry();
        OperationBinding commitOper = (OperationBinding) bindings.get("Commit");
        commitOper.execute();

Alternate Keys
http://docs.oracle.com/cd/E28280_01/web.1111/b31974/bcentities.htm#CJACCDID

How to programmatically access ADF binding values
FacesContext fctx = FacesContext.getCurrentInstance();
ELContext elctx = fctx.getELContext();
Application application = fctx.getApplication();
ExpressionFactory exprFactory = application.getExpressionFactory();
ValueExpression valueExpr = exprFactory.createValueExpression( elctx, "#{bindings.DepartmentId.inputValue}", Object.class);
oracle.jbo.domain.Number departmentId = null;
departmentId = (oracle.jbo.domain.Number) valueExpr.getValue(elctx);

ADF LOV
https://blogs.oracle.com/prajkumar/entry/create_lov_in_adf_application
http://www.baigzeeshan.com/2010/03/how-to-create-adf-lov-with-view.html

1)Create LOVVO or ViewCriteria for MasterLookup table depending on your condition.
2)Open VO and its attribute on which you want to create List Of Values. Click on List of Values -> Add. It will open Form and default List Of Values name.
a)In Configuration Enter ListDataSource as LOV VO or ViewAccessor or Master Lookup TableVO.
   In case of MasterLookupTableVO after adding DataSource click edit to add ViewCriteria.
b)Mention ListAttribute name.
3)In UI Hints you can add Meaning or Description columns.



ADF Set on Current row after Rollback Execute or page refresh
http://oracleadf-java.blogspot.in/2012/10/set-on-current-row-after-rollback.html?goback=%2Egde_1801839_member_180755619
DCIteratorBinding Iter = (DCIteratorBinding)bindings.get("<YourIteratorName>");
Key parentKey = Iter.getCurrentRow().getKey();
BindingContainer binding = getBindings();
OperationBinding RollbackBdg = binding.getOperationBinding("Rollback");
RollbackBdg.execute();
OperationBinding ExcBdg  = binding.getOperationBinding("Execute");
ExcBdg.execute();
Iter.setCurrentRowWithKey(parentKey.toStringFormat(true));



VO WHERE Clause at Runtime
ViewObject vo = am.findViewObject("<YourViewObject>");
String whereClause = " Emp_id = 10";
vo.setWhereClause(whereClause);
vo.setOrderBy(orderByClause);



Using Named Bind Variables

ViewObject vo = am.findViewObject("<YourViewObject>");
vo.setNamedWhereClauseParam("pEmpId",10);
vo.executeQuery();

Add named Bind Variables at Runtime
vo.setWhereClause(" emp_id = :pEmpId");
vo.defineNamedWhereClauseParam("pEmpId,null,null);
vo.setNamedWhereClauseParam(pEmpId,10);



View Criteria Programmatically
ViewCriteria vc = <yourVO>.createViewCriteria();
ViewCriteriaRow   HeadDeptRow = vc.createViewCriteriaRow();
ViewCriteriaRow   MaintDeptRow = vc.createViewCriteriaRow();

HeadDeptRow.setAttribute("DeptId",10);

MaintDeptRow.setAttribute("DeptId",20);

vc.addElement(HeadDeptRow);
vc.addElement(MaintDeptRow);

<yourVO>.applyViewCriteria(vc);
<yourVO>.executeQuery();


View Object get Executed Query
Inside VORowImpl -- ExecuteQuery
sop(getQuery());
http://codingwithpassion.blogspot.in/2010/11/oracle-adf-write-view-object-query-with.html



Iterate through VO inside  VOImpl

        RowSetIterator iter = createRowSetIterator(null);
        while (iter.hasNext()) {
        Row r = iter.next();
            System.out.println("Ename *** VoImpl " + r.getAttribute("Ename"));
        // Do something with the current row.
        }
        // close secondary row set iterator
        iter.closeRowSetIterator();
        or
        Row row;
        while ((row = this.next()) != null)
        {
        System.out.println("Ename " + row.getAttribute("Ename"));
         



What are validation Options in ADF ?
I)Business services:
a)ADF BC
         Metadata (declarative validation)
         Java (programmatic validation)
b)Database (PL/SQL)
II)User interface

http://ramannanda.blogspot.com/2014/01/doing-entity-validations-at-runtime.html


ADF Logging in Deployed Apps
https://blogs.oracle.com/groundside/entry/adf_logging_in_deployed_apps?utm_source=dlvr.it&utm_medium=twitter



ADF - Passing Parameter Value between Pages
https://www.youtube.com/watch?v=4eyzBiIf5MM
https://www.youtube.com/watch?v=wrpciIzIN9A&feature=related


ADF Create with Parameters
http://www.oracle.com/technetwork/developer-tools/adf/learnmore/13-create-with-params-169140.pdf
http://andrejusb.blogspot.com/2011/02/createwithparams-operation-for-oracle.html



ADF Bounded and Unbounded Task Flows













Managed Bean and Backing Bean
Managed Bean can be configured in
a)adfc-config
b)Task Flow Definition File

Backing Bean on page can be created while
a)Creating new jsf/jspx  or jsfff
b)After creation go to Page Design . Tools --> Design --> Page Properties --> Component Binding
 Click Auto Binding if you want all components on page to be included in Backing bean with acccessors.


Task Flow Refresh
http://adfdeveloper.blogspot.com/2012/05/task-to-refresh-task-flow.html?showComment=1380229598207#c9183905827530201763




JSF ADF LifeCycle


























Custom Phase Listener
http://docs.oracle.com/cd/E12839_01/web.1111/b31974/adf_lifecycle.htm#CIAJGBID
for fragments you should extend oracle.adf.model.RegionController

http://adfpractice-fedor.blogspot.com/2012/02/understanding-immediate-attribute.html
http://www.baigzeeshan.com/2011/05/how-to-run-java-code-on-every-page-load.html
https://forums.oracle.com/thread/918299?tstart=0
https://blogs.oracle.com/jdevotnharvest/entry/how_to_configure_an_adf_phase_listener_and_where_to_put_the_file

In page add
<f:view beforePhase="#{backingBeanScope.CheckListBackingBean.refreshPageNVC}">

    public void refreshPageNVC(PhaseEvent phaseEvent) {
        refreshPage(phaseEvent);
    }


Diif in af:commandButton,af:commandLink  and  af:goButton,af:goLink
Command
Submit requests and fire action event when activated.
Typically ued for internal validation.
Go
Navigate directly without server side actions.
Do not use control flow rules.
Typically used for external validation.

Implementing Security
https://forums.oracle.com/forums/thread.jspa?threadID=2216386
http://download.oracle.com/docs/cd/E17904_01/web.1111/b31974/adding_security.htm#BABDEICH
http://download.oracle.com/docs/cd/E17904_01/web.1111/e13707/atn.htm
http://e-ammar.net/Oracle_TIPS/filtering_adf_pgaes_based_on_log.htm
http://ramannanda.blogspot.com/2011/09/opss-adf-security-utility.html

http://docs.oracle.com/cd/E14571_01/web.1111/b31974/adding_security.htm
http://docs.oracle.com/cd/E15523_01/webcenter.1111/e10273/security.htm
https://forums.oracle.com/thread/1074565

http://andrejusb.blogspot.com/2010/11/things-you-must-know-about-adf-faces.html

Security Basics
http://myadfnotebook.blogspot.com/2011/11/adf-security-basics.html


Duplicate Anonymous Role Fix
http://udayarocks.wordpress.com/2012/09/06/how-to-fix-the-adf-security-error-jpsanonymousroleimpl-in-jdev-11-1-1-6-0/
http://matt-shanto.blogspot.com/2012/07/adf-security_6473.html


ADF Working with Popups
http://www.adftips.com/2010/10/adf-ui-popuputil-class-to-show-or-hide.html



Oracle Forms to ADF
From Forms to ADF - When, Why, How?
https://www.youtube.com/watch?v=C4Dz8zO623U
When-Validate-Record  in Forms  -->  Add Entity Level Validation(Business Rules) in ADF.


http://jdeveloperandadf.blogspot.com/2011/02/oracle-adf-interview-questions-and.html



ADF Multi Choice List
http://myadfnotebook.blogspot.com/2010/09/getting-string-value-or-item-code-of.html
https://blogs.oracle.com/jdevotnharvest/entry/how_to_access_selected_rows


ADF Date Format Conversion
http://mahmoudoracle.blogspot.com/2012/03/date-classes-conversion-in-adf.html
http://journal.kaush.co/2012/03/13/how-to-convert-between-joda-and-oracles-date-classes/
http://adfandjdeveloper.blogspot.com/2012/08/get-current-date-and-time.html

ADF Using doDML
    protected void doDML(int operation, TransactionEvent e) {
       
        // super.doDML(i, transactionEvent);
        if(operation == DML_INSERT){
            Date vDate = getCurrentDateWithTime();
        setCreationDate(vDate);
        }
http://andrejusb.blogspot.com/2012/05/how-to-update-data-from-db-view-using.html
http://jneelmani.blogspot.com/2012/01/adf-11g-get-user-name-role.html


ADF Skip Validation on Page
http://andrejusb.blogspot.com/2012/12/skip-validation-for-adf-required-tabs.html
Open page definition file and select root tag in the structure window.
Go to Properties window and search for SkipValidation property. Set SkipValidation to true:


Diff in Vo.getFetchedRowCount()  and  Vo.getRowCount()
http://andrejusb.blogspot.com/2011/08/difference-between-fetched-row-count.html

To String
BigDecimal big = new BigDecimal("987654321");
String str = big.toString();

Export to PDF BI Publisher Integration or  Jasper Reports
http://www.ramkitech.com/2011/11/jsf-jpa-jasperreports-ireport.html
https://pinboard.in/search/u:OracleADF?query=BI_Publisher
http://jdevelopertips.blogspot.com/2009/08/integrating-bi-publisher-into-jdevelo.html


http://www.vogella.com/articles/JavaPDF/article.html

https://forums.oracle.com/forums/thread.jspa?threadID=2198973
https://forums.oracle.com/forums/thread.jspa?threadID=2320987

some of the links are on that threads.
http://sameh-nassar.blogspot.com/2009/10/using-jasper-reports-with-jdeveloper.html


BI Publisher/PDF Showing ???? for non English FOnts.
https://blogs.oracle.com/BIDeveloper/entry/non-english_characters_appears

https://technology.amis.nl/2006/05/07/generating-pdfs-from-adf-business-components-view-object-datasets-using-xsql/


Static Class or Static methods can not be instantiated.


System Files Location
C:\Users\<user_home>\AppData\Roaming\JDeveloper\system11.1.1.5.37.60.13

Popup Not Closing on clicking any button.
Fix -- af:popup Auto Cancel Enabled

Column value entered in Popup and after Closing popup it removes all previously entered records.
Fix -- Change Auto Submit property to True for previuos fields.



How to import custom classes from model to view controller in adf?


Right click your ViewController project > Project properties > Dependencies > Select Model and click the pencil. Here you select 'Build output' and press OK twice. Rebuild your application and you should be able to access classes from your model in your viewcontroller.


File Download
http://smconsultants.in/file-download-in-adf/

Display selected table row number and total rows
eg.
Row #{(bindings.EmpVO1Iterator.rangeStart < 0 ? 1 : bindings.EmpVO1Iterator.rangeStart+1) + ( bindings.EmpVO1Iterator.currentRowIndexInRange == -1 ? 0 : bindings.EmpVO1Iterator.currentRowIndexInRange)} of #{bindings.EmpVO1Iterator.estimatedRowCount}


Summit Application
https://blogs.oracle.com/jdevotnharvest/entry/adf_summit_sample_application_a

ADF Logger
https://blogs.oracle.com/groundside/entry/adventures_in_logging_index



ADF Refresh
http://jjzheng.blogspot.com/2010/11/manually-refresh-row-in-table-after.html


Data Dirty
http://oracleadfhowto.blogspot.com/2012/03/iterator-uncommitted-data-availability.html
#{!bindings.Commit.enabled}
#{!controllerContext.currentRootViewPort.dataDirty}
#{!controllerContext.currentViewPort.dataDirty}
 
#{!bindings.EmployeesView1Iterator.dataControl.TransactionDirty} 

http://adfbugs.blogspot.com/2009/12/pending-changes-in-adf-application.html
http://adfsnippets.blogspot.com/


AM Handle from Bean
http://ioracle-erp.blogspot.com/2012/08/different-ways-of-getting-handle-to-am.html

AM acces from VO
ViewObjectImpl.getApplicationModule()



ADF Performance Tuning
http://docs.oracle.com/cd/E16764_01/core.1111/e10108/adf.htm#BDCCCEAB



ADF Page Variables to Store Data.
http://andrejusb.blogspot.com/2011/10/page-definition-variables-to-store.html

1)Create Page Variable in Page Definition    P_INPUT
2)Add Page Variable in Bindings as _var(Just to rename)  P_INPUT_VAR
3)On Input Text put as Value    #{bindings.P_INPUT_VAR.inputValue}
4)From Backing bean access
String vinput = (String)evaluateEL("#{bindings.P_INPUT_VAR.inputValue}");


    public static Object evaluateEL(String el) {
    FacesContext facesContext = FacesContext.getCurrentInstance();
    ELContext elContext = facesContext.getELContext();
    ExpressionFactory expressionFactory =
    facesContext.getApplication().getExpressionFactory();
    ValueExpression exp =
    expressionFactory.createValueExpression(elContext, el,
    Object.class);
        return exp.getValue(elContext);
    }




ADF InputText Field Suffix
From Navaneetha
https://forums.oracle.com/forums/thread.jspa?threadID=2190564

<af:panelFormLayout id="pfl1">
<af:panelLabelAndMessage id="plam2"
label="#{bindings.Email.hints.label}">
<af:inputText value="#{bindings.Email.inputValue}"
required="#{bindings.Email.hints.mandatory}"
columns="#{bindings.Email.hints.displayWidth}"
maximumLength="#{bindings.Email.hints.precision}"
shortDesc="#{bindings.Email.hints.tooltip}" id="it1"
simple="true">
<f:validator binding="#{bindings.Email.validator}"/>
</af:inputText>
<f:facet name="end">
<af:outputText value="@SubbanaSolutions.com" id="ot1"/>
</f:facet>
</af:panelLabelAndMessage>
</af:panelFormLayout>
1) Ensure that the label for the component is set in the af:panelLabelAndMessage
2) For the inner component, set simple="true" so that there is no label displayed for it.




ADF EL Expression
Calling Method from EL Expression
http://technology.amis.nl/2009/12/04/adf-security-simple-el-expression-to-check-if-user-has-a-role/
Calling EL from Bean
http://www.oracle.com/technetwork/developer-tools/adf/learnmore/003-advanced-el-tips-169117.pdf




ADF Programmatically Select check boxes
http://umeshagarwal24.blogspot.com/2012/06/selectdeselect-all-check-box-in-table.html


ADF Download FIle
http://hasamali.blogspot.com/2011/09/download-file-in-oracle-adf-gui.html


ADF Upload Multiple Files
http://andrejusb.blogspot.com/2013/04/multiple-file-upload-unlimited-file.html

ADF Regular Expression Validation

<af:inputText label="Email Validation" id="it1"
                                         binding="#{backingBeanScope.backing_MainPage.it1}">
                                <af:validateRegExp pattern="[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"
                                  messageDetailNoMatch="The value {1} is not a valid email address:"/>
 </af:inputText>
https://forums.oracle.com/forums/thread.jspa?threadID=972049


try this one...
<af:validateRegExp pattern="^[0]{2}:[0]{2}-[2-3]{2}:[0-9]{2}$" messageDetailNoMatch="Format must be 00:00-23:99"/>

use online regex tester...http://www.regexplanet.com/advanced/java/index.html


http://vtkrishn.com/2012/09/08/how-to-in-jdeveloper-adf-to-have-hour-and-time-format-restriction-for-inputtext/


Date Validations
http://mychanneladf.blogspot.com/2012/06/comparing-dates-and-displaying.html

http://oracleanil.blogspot.com/2009/04/itemco.html

OnDate2
<af:validateDateTimeRange minimum="#{DATE1}"
                                                      messageDetailMinimum="Date2 must be greater than Date1"/>
or
On Date1
<af:validateDateTimeRange messageDetailMaximum="DATE1 must be prior to DATE2"
                                                      maximum="#{DATE2}"/>

ADF Contextual Events
http://www.jobinesh.com/2009/07/programmatically-publishing-contextual.html
http://www.jobinesh.com/2010/11/triggering-navigation-from-contextual.html
http://one-size-doesnt-fit-all.blogspot.com/2010/08/jdev-11g-programmatic-contextual-events.html
http://andrejusb.blogspot.com/2010/10/contextual-events-framework-and-adf-11g.html
http://biemond.blogspot.com/2009/11/adf-contextual-events-in-11g-r1-ps1.html

Contextual Events

http://www.oracle.com/technetwork/issue-archive/2011/11-may/o31adf-352561.html
http://docs.oracle.com/cd/E24382_01/web.1112/e16182/contextual_events.htm
http://antonis-antoniou.blogspot.in/2011/11/adf-contextual-events.html

ADF Layouts
http://www.jobinesh.com/2010/03/adf-faces-layout-tips.html


Grid Layout using Trinidad
https://blogs.oracle.com/jdevotnharvest/entry/grid_layouts_in_adf_faces_using_trinidad






ADF Mobile
https://blogs.oracle.com/brunoborges/entry/first_steps_with_oracle_adf
http://www.oracle.com/technetwork/developer-tools/adf/adf-mobile-samples-1865088.html


ADF Tree Component
http://anindyabhattacharjee.blogspot.com/2010/08/adf-tree-navigation-to-third-level-and.html

http://www.awasthiashish.com/2013/09/refreshing-child-nodes-of-aftreetable.html


ADF Maps
https://blogs.oracle.com/shay/entry/working_with_the_adf_dvt
https://blogs.oracle.com/middleware/entry/integrating_google_maps_with_adf
http://docs.oracle.com/cd/E17904_01/web.1111/b31973/dv_map.htm
https://blogs.oracle.com/imc/entry/excellent_example_of_oracle_adf
https://blogs.oracle.com/emeapartnerweblogic/entry/adf_mobile_geo_location_and



ADF Sending Email
http://rnuka.blogspot.com/2013/03/using-javamail-api-to-send-emails-from.html
http://oracleadf-java.blogspot.com/2013/04/gmail-integration-with-oracle-adf-using.html
https://forums.oracle.com/thread/2578027?start=0&tstart=0
https://forums.oracle.com/thread/2405087



ADF Error

JBO-25014: Another user has changed the row with primary key oracle.jbo.Key

http://www.jobinesh.com/2011/02/yet-another-reason-for-jbo-25014.html


ADF Exception Handling
http://www.oracle.com/technetwork/issue-archive/2013/13-mar/o23adf-1897193.html

Task Flow Exception Handler
http://www.awasthiashish.com/2013/04/global-exception-handler-for-adf-task.html


Error Message Reference
http://docs.oracle.com/cd/E16340_01/core.1111/e10113/toc.htm

Custom Error Message
http://amit-adf-work.blogspot.in/
http://jobinesh.blogspot.com/2011/03/customizing-business-components-error.html


ADF Selection Listener
http://www.adftips.com/2010/11/adf-ui-selectionlistener-example-for.html



ADF Lov Default 
http://adfnbpel.wordpress.com/2013/02/25/to-set-default-value-as-first-value-in-select-one-choice/comment-page-1/#comment-82

in VoRowImpl
    public BigDecimal getDeptId() {
        if(getAttributeInternal(DEPTID)!=null)
        return (BigDecimal) getAttributeInternal(DEPTID);
        else
        {
        Row row = (Row)this.getDeptLovVA().first();  // first row from view accessor
        if(row!=null)
        return (BigDecimal)row.getAttribute("DeptId");
        }
        return null;
    }

ADF Internationalization/Localization
http://technology.amis.nl/2012/08/11/supporting-multiple-languages-in-adf-applications-backed-by-resource-bundles-and-programmatically-controlling-the-jsf-locale/
http://biemond.blogspot.com/2009/02/change-language-locale-in-adf.html

http://hasamali.blogspot.com/2012/09/oracle-adf-model-and-view-controller.html


ADF Table Custom QueryListener
http://huysmansitt.blogspot.com/2012/09/adf-table-filters-case-insensitive-and.html?showComment=1391636428311#c1383289211844255867

ADF Search Form
http://docs.oracle.com/cd/E23943_01/web.1111/b31974/web_search_bc.htm
http://www.baigzeeshan.com/2010/04/creating-simple-search-form-in-oracle.html
http://www.awasthiashish.com/2013/07/implementing-custom-search-form-in-adf.html
http://andrejusb.blogspot.com/2009/08/oracle-adf-tuning-preventing-sql-query.html
https://tompeez.wordpress.com/2012/03/18/jdeveloper-preventing-return-of-large-row-sets-on-page-load-of-vo-using-bind-variable/

To avoid initial execution of query when page loads one raw method is to add Bind variable with No default value.
eg. STATUS = :p_sts OR NVL(:p_sts,'%') = '%'  
If you want Default value in other parameter try
1)dummy bind variable 1 = :bindDummy
2)In ExecuteWithParams bindings add namedData
NDValue   #{pageFlowScope.dummyVal}
NDName    bindDummy

NDType    java.lang.Integer
3) On Search Button
              <af:setPropertyListener from="1" to="#{pageFlowScope.dummyVal}"

                                      type="action"/>


Performance

http://andrejusb.blogspot.com/2013/12/adf-anti-patterns-dangerous-tutorials.html
http://andrejusb.blogspot.com/2011/08/how-to-control-long-sql-execution-time.html
http://flexagon.com/2015/07/tuning-best-practices-for-adf-applications/
Global Search
https://technology.amis.nl/2011/04/05/adf-11g-implementing-search-for-multiple-attributes-of-a-view-object/


http://www.jobinesh.com/2010/12/using-oraclejbodomainarray-with.html
http://www.jobinesh.com/2011/07/tips-on-using-oraclejbodomainarray-as.html
http://www.jobinesh.com/2010/12/using-oraclejbodomainarray-with.html

AF Query for Search
https://tompeez.wordpress.com/tag/afquery/
Multi Select af:Query
http://andrejusb.blogspot.com/2013/08/multiple-choice-support-in-adf-bc-view.html

ReOrder Columns
http://lucbors.blogspot.de/2010/08/adf-11g-change-attribute-order-in.html

Clear Search
http://radio-weblogs.com/0118231/stories/2007/05/23/avoidActivationErrorsByChangingRuntimeViewObjectSettingsBeforeUsingThemNotAfter.html


Table Pagination
http://andrejusb.blogspot.com/2013/04/adf-11g-ps6-adf-10g-table-pagination.html
https://blogs.oracle.com/jdevotnharvest/entry/table_pagination_with_jdeveloper_11
Scroll Policy to Page
Auto Height Roes to Zero
Bindings --> Iterator  Set Range Size for number of rows

Multi Select in Table Filter
http://www.oracle.com/technetwork/developer-tools/adf/learnmore/98-multi-select-tablefilter-1534904.pdf

http://www.oracle.com/technetwork/developer-tools/adf/learnmore/99-checkbox-for-delete-in-table-1539659.pdf

http://www.awasthiashish.com/2013/12/using-multiple-selection.html


https://blogs.oracle.com/aramamoo/entry/passing_comma_separated_string_as
https://blogs.oracle.com/smuenchadf/resource/examples
https://mjabr.wordpress.com/2011/12/22/using-comma-separeted-string-as-a-bind-variable-for-sql-query-with-in-clause/

select All in Table
http://adfdiary.blogspot.com/2014/03/generic-selectall-checkbox-feature-for.html

ADF Table copy content Functionality
http://one-size-doesnt-fit-all.blogspot.com/2011/04/aftable-restoring-basic-browser-copy.html


ADF table Column Reposition
https://technology.amis.nl/2009/01/09/adf-11g-persisted-run-time-user-ui-personalization-or-impatient-mans-mds/
http://docs.oracle.com/cd/E15523_01/web.1111/b31974/ad_persist.htm#ADFFD2551
https://technology.amis.nl/2012/02/04/intercepting-user-customization-such-as-column-reordering-in-tables-in-adf-11g-change-persistence/
https://technology.amis.nl/2012/03/01/adf-11g-programmatically-configuring-sort-for-rich-table/
https://technology.amis.nl/2012/03/02/adf-11g-programmatically-repositioning-columns-in-a-rich-table/#prettyPhoto

Sort Criteria
https://tompeez.wordpress.com/2014/04/14/jdeveloper-11g-r1-advanced-multi-column-table-sort/



ADF SelectOneRadio
http://technology.amis.nl/2010/11/11/adf-11g-selectoneradio-in-table-layout/
http://adfgoodies.blogspot.com/
http://lucbors.blogspot.com/2010/11/adf-11g-selectoneradio-in-table-layout.html




ADF Javascripts
http://biemond.blogspot.com/2010/11/adf-faces-rich-client-development.html
http://stackoverflow.com/questions/9425862/including-a-js-file-in-jsf-adf-page
http://adfgoodies.blogspot.com/

ADF Sorting Transient VO's
https://blogs.oracle.com/vijaymohan/entry/sorting_transientvo_vs_queryeo_based_vo
//Populate your transient VO rows.
//VO.setSortBy("YourVOAttrName");
//VO.setQueryMode(ViewObject.QUERY_MODE_SCAN_VIEW_ROWS);
//VO.executeQuery();



ADF Iterate Lov View Accessor
        DCBindingContainer bindings = (DCBindingContainer)ADFUtil.evaluateEL("#{bindings}");
        DCIteratorBinding voIterBndg = bindings.findIteratorBinding(pTrIteratorName);
        ViewObject mainVO = voIterBndg.getViewObject();
        Row[] mainVORow = voIterBndg.getAllRowsInRange();
        RowSet attributeVA = (RowSet)mainVORow[0].getAttribute("<YourViewAccessorName>");
        attributeVA.executeQuery();

http://middiu.blogspot.com/2012/08/adf-refresh-child-iterator.html
http://www.jobinesh.com/2012/03/forcefully-executing-view-accessor.html


ADF Skins


For 11.1.1.7.0
Fusion Dev Guide
http://docs.oracle.com/cd/E28280_01/web.1111/b31974/toc.htm

Customizing Appearance using Skins
http://docs.oracle.com/cd/E29542_01/web.1111/b31973/af_skin.htm#ADFUI330
http://docs.oracle.com/cd/E29542_01/web.1111/b31973/af_skin.htm#ADFUI335


20.2.1 How to Add a Custom Skin to an Application

The directory path to the XML schemas is similar to the following:
JDeveloper_Home/jdeveloper/modules/oracle.adf.view_11.1.1/trinidad-impl.jar!/org/apache/myfaces/trinidadinternal/ui/laf/xml/schemas/skin/trinidad-skins.xsd

Create xml Document from xml Schema
C:\JDeveloper\mywork\MyApp\ViewController\public_html\WEB-INF

1)Create mySkin.css under skins/mySkin/mySkin.css
2)Create below file under WEB-INF dir
------  trinidad-skins.css

<?xml version="1.0" encoding="UTF-8" ?>
<skins xmlns="http://myfaces.apache.org/trinidad/skin">
  <skin>
    <id>mySkin.desktop</id>
    <family>mySkin</family>
    <extends>fusion.desktop</extends>
    <render-kit-id>org.apache.myfaces.trinidad.desktop</render-kit-id>
    <style-sheet-name>skins/mySkin/mySkin.css</style-sheet-name>
  </skin>
</skins>
3)------  trinidad-config.css

<?xml version="1.0" encoding="windows-1252"?>
<trinidad-config xmlns="http://myfaces.apache.org/trinidad/config">
  <skin-family>mySkin</skin-family>
  <skin-version>v1</skin-version>
</trinidad-config>

To Refresh skin files
****   If you changed extends in trinidad-skins.css  eg.
<extends>skyros-v1.desktop</extends>   to <extends>fusion.desktop</extends>

To affect changes on actual jspx or jsff
just swap <skin-family>mySkin</skin-family>   to  <skin-family>skyros</skin-family>
and again back to  
<skin-family>mySkin</skin-family>

References
https://technology.amis.nl/2009/07/01/using-adf-faces-11g-skinning-for-setting-the-styles-of-specific-component-instances-or-groups-of-instances/
Skinning only for One Component
http://adfskinning.blogspot.com/2012/05/oracle-adf-faces-skinning-enables.html


ADF Application Module Nesting

http://docs.oracle.com/cd/E24382_01/web.1112/e16182/bcservices.htm#ADFFD1506
http://andrejusb.blogspot.com/2010/06/adf-regions-and-nested-application.html
http://one-size-doesnt-fit-all.blogspot.com/2011/05/jdev-11g-task-flows-adf-bc-one-root.html
http://www.adfkickstart.com/nested-application-modules-3
http://fortunefusionminds.blogspot.com/2013/10/how-to-define-nested-application-module.html


ADF Boolean Custom Converter
Below Blog pulled from http://adfreusablecode.blogspot.com/

af:selectBooleanCheckbox with [Y, N] values using a custom converter

In ADF, the tag af:selectBooleanCheckbox is a bit special, because the property value is Boolean type and persistent attributes generated in the entities usually are not. There are several implementations that attempt to adapt attributes data types like String or Number, but many do not usually work very well, and may require extra effort to achieve something that any developer would take for granted in a framework as ADF.
The converters are, in my opinion, a powerful tool to solve any of these problems.

A use case could be the VIP_USER table with the following structure:
create table VIP_USER
(
  vip_user_id NUMBER(6) not null,
  full_name   VARCHAR2(70),
  disabled    VARCHAR2(1) not null -- ['Y', 'N']
)

DISABLED field is a String in the EO and VO, so we need a converter to "translate" in both directions:
package view.converters;

import java.util.Collection;
import java.util.Collections;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;

import org.apache.myfaces.trinidad.convert.ClientConverter;

public class YNConverter
  implements Converter, ClientConverter
{
  public Object getAsObject(FacesContext facesContext, UIComponent uiComponent, String value)
  {
    return "true".equals(value) ? "Y" : "N";
  }

  public String getAsString(FacesContext facesContext, UIComponent uiComponent, Object value)
  {
    return "Y".equals(value) ? "true" : "false";
  }

  public String getClientLibrarySource(FacesContext facesContext)
  {
    return null;
  }

  public Collection<String> getClientImportNames()
  {
    return Collections.emptySet();
  }

  public String getClientScript(FacesContext facesContext, UIComponent uiComponent)
  {
    return null;
  }

  public String getClientConversion(FacesContext facesContext, UIComponent uiComponent)
  {
    return null;
  }
}

The converter needs to be declared in faces-config.xml:
<converter>
  <converter-id>YNConverter</converter-id>
  <converter-class>view.converters.YNConverter</converter-class>
</converter>

The tag af:selectBooleanCheckbox would look like:
<af:selectBooleanCheckbox value="#{row.bindings.Disabled.inputValue}"
                          label="#{bindings.VipUserVO.hints.Disabled.label}"
                          converter="YNConverter"
                          id="sbc1"/>

Note that the same could be done with Number type attributes [0,1], it would suffice to make a small change in the YNConverter class.




Callable Statement with Table Type
http://betteratoracle.com/posts/32-passing-arrays-of-record-types-between-oracle-and-java



VO Looping
            DCIteratorBinding dcIteratorBdg = bindings.findIteratorBinding"IteratorName");

            ViewObject prgDetVo = dcIteratorBdg.getViewObject();

        RowSetIterator prgDetRsIter = prgDetVo.createRowSetIterator(null);
        while (prgDetRsIter.hasNext()) {
            Row r = prgDetRsIter.next();

        }

      prgDetRsIter.closeRowSetIterator();


Positioning Popup at Center
http://www.jobinesh.com/2013/10/positioning-popup-at-center-of-screen.html


Dynamic UI
http://andrejusb.blogspot.com/2012/11/adf-generator-for-dynamic-adf-bc-and.html




http://andrejusb.blogspot.com/2011/12/adf-tree-how-to-add-checkbox.html
http://andrejusb.blogspot.com/2012/11/check-box-support-in-adf-tree-table.html
http://andrejusb.blogspot.com/2013/12/adf-anti-patterns-dangerous-tutorials.html
http://andrejusb.blogspot.co.uk/2012/05/how-to-disable-select-count-execution.html
http://andrejusb.blogspot.com/2014/01/improving-scrolling-performance-in-adf.html
http://andrejusb.blogspot.com/2010/07/adf-table-autoheightrows-property.html
http://andrejusb.blogspot.com/2013/04/how-to-control-adf-table-pagination-on.html
https://technology.amis.nl/2014/02/18/adf-performance-tuning-tips-on-how-to-limit-adf-bc-memory-consumption/
https://blogs.oracle.com/jdeveloperpm/entry/how_to_skin_the_navigation
http://mail-archives.apache.org/mod_mbox/incubator-adffaces-user/200610.mbox/%3C0EB5586BC84C9D438A52A7CB46EFB43080B1F6@NAVEXC.corp.int.com%3E

Performance
http://www.ateam-oracle.com/improving-adf-page-rendering-time/
http://andrejusb.blogspot.com/2014/01/improving-scrolling-performance-in-adf.html


Layout
http://www.jobinesh.com/2010/03/adf-faces-layout-tips.html


EO STATUS_INITIALIZED
http://one-size-doesnt-fit-all.blogspot.com/2008/07/adf-bc-eovo-initial-state-post-create.html



ADF Errors
http://jneelmani.blogspot.com/2012/02/erroradf.html



ADF Taskflow From Popup
https://technology.amis.nl/2011/12/01/adf-11g-close-popup-with-taskflow-inside-or-complete-taskflow-inside-popup/

Reusable ADF Dialog Framework
http://andrejusb.blogspot.com/2013/03/reusable-adf-region-with-dialog.html





TImers
http://middlewaremagic.com/weblogic/?p=987
http://docs.oracle.com/cd/E12839_01/web.1111/e13733/toc.htm#COMMJ110
http://biemond.blogspot.com/2009/09/job-scheduling-in-weblogic.html




Javascript to Java call
https://blogs.oracle.com/jdevotnharvest/entry/how-to_call_server_side_java_from_javascript