Showing posts with label VO. Show all posts
Showing posts with label VO. Show all posts

Monday, 29 June 2015

How to know whether current row is new row or from database?

A row or view has four states:
  • New
  • Modified
  • Un-Modified
  • Initialized
To get the state using expression: #{row.row.entities[0].entityState}

You can use this expression to control the display or rows in the UI. Like to display new rows in diff colors.
    Ex: #{row.row.entities[0].entityState==0 ? 'background-color:yellow' :  ''} 
Now in RowImpl, you can access the state using:
    Ex: byte entityState = this.getEntity(0).getEntityState() 

Friday, 23 January 2015

How to filter rows in VO

There are different ways to filter the data/rows in a VO.

1. Using Where clause:
  You can use setWhereCluse() method from VO to set filter constraint before calling executeQuery() method to filter data based on the input condition. This means we are appending the where clause while querying the data to the DB. This will take string as in input.
Ex: ViewObjectImpl empVO = am.getEmployeeVO();
   //filtering data using  setWhereClause on employee_id
   empVO.setWhereClause("employee_id=" + empId);
   empVO.executeQuery();
 


Note: Here employee_id is the column name from the db table.

 You can have multiple constraints in where clause just like in sql.
 emp.setWhereClause("employee_id=" + empId + "employee_name like " + empName);

2. Using getFilteredRows(): getFilteredRows() is from VO, this method is used to filter rows based on one column only and returns Row[]. getFilteredRows() returns the Row[] by filtering the rows from VO cache based on the column attribute passed.
Ex: ViewObjectImpl empVO = am.getEmployeeVO();
    //filtering data using  setWhereClause on employee_id
    empVO.executeQuery();
    Row[] rows = empV.getFilteredRows("EmployeeId", empId);


Note: EmployeeId is the attribute name from VO.


3. Using Row Qualifier: Using RowQualifier you can filter the data based on multiple columns from VO cache.
Ex: ViewObjectImpl empVO = am.getEmployeeVO();
    //Create RowQualifier from VO 
    RowQualifier rowQualifier = new RowQualifier(empVO);
    //set where clause to row qualifier 
    rowQualifier.setWhereClause("EmployeeId="+empId+" AND EmployeeName="+empName);
    //get filtered rows using row qualifier 
    Row[] filteredRows = emp.getFilteredRows(rowQualifier);  

Note: EmployeeId & EmployeeName are the attribute names from VO.

Wednesday, 27 August 2014

Missing IN and OUT parameters

If you are using bind variables as part of the VO query, then

Make sure that, Required property is enabled for the bind variables which are used in the query.

Programmatic validation UI side

1.Class implements Validator{
2.    @Override
    public void validate(FacesContext facesContext, UIComponent uIComponent,Object newValue) throws ValidatorException {
       String val = String.valueOf(newValue);     
        if (val != null) {
            if (!getMethodResult(val)) {
                throw new ValidatorException(new FacesMessage("Name " + val + " already exists."));
            }
        }
    }

    public boolean getMethodResult(String name) {
        ViewObjectImpl vo = this.getAm().getVo1();
        RowQualifier rowQualifier = new RowQualifier(vo);
                rowQualifier.setWhereClause("Name='"+name+"'");
                Row[] rowsList = vo.getFilteredRows(rowQualifier);
                if(rowsList.length>0){
                        return false;
                    }
                return true;
    }

3. in jsff validator="#{backingBeanScope.myManagedBean.validate}"