title: rollback in Managed bean doesn't not ignore form validation
body: <p>Dear Fellow ADF Expert,</p>
  
  <p>I am using the below managed bean code to insert a new row into a detail table of a master detail relation-ship. "insertNewReturnReason" is used whenever the user clicks a row in a table as SelectionListener event handler. It is supposed to kind of play the role of createInsert binding operation except it tries to rollback the row created before, and then insert a new row under the new id of the master iterator ("AstAssetVOIter"). The other event listener I have is "saveAssetReturn" which is supposed to commit the changes. </p>
  
  <p>The issue I have is with "insertNewReturnReason" which does a rollback first and then inserts new rows in the details table. For some reason the form keeps alerting a field is required which is a foreign key in another table. </p>
  
  <p>The same code was exactly working fine in another project and I didn't have any issue with it and the only things I changed is the name of the iterators and the view object.</p>
  
  <p>I have set the immediate property of the button to true too.</p>
  
  <p>Please let me know if anything comes to your mind.</p>
  
  <p>Thank you,</p>
  
  <pre><code>package com.asrandisheh.mis.asset.viewcontroller;
  
  
  import javax.faces.event.ActionEvent;
  
  import oracle.adf.model.BindingContext;
  
  import oracle.adf.model.binding.DCIteratorBinding;
  
  import oracle.jbo.Row;
  
  //import util.JSFUtils;
  import com.asrandisheh.mis.asset.viewcontroller.JSFUtils;
  
  import org.apache.myfaces.trinidad.event.SelectionEvent;
  import oracle.binding.BindingContainer;
  import oracle.jbo.ViewObject;
  
  
  
  
  import oracle.binding.OperationBinding;
  
  import oracle.jbo.Key;
  
  public class AssetReturn {
      public AssetReturn() {
          super();
      }
  
      public void insertNewReturnReason(SelectionEvent selectionEvent) {
          //
          System.out.println("Method Call: insertNewReturnReason");
  
          // maintain the makecurrent behavior
          JSFUtils.resolveMethodExpression("#{bindings.AstAssetsVO1.collectionModel.makeCurrent}", null, 
                                             new Class[]{SelectionEvent.class}, new Object[]{selectionEvent});        
  
  
          // Set the binding context
          BindingContext bctx = BindingContext.getCurrent(); 
          BindingContainer bindings = bctx.getCurrentBindingsEntry();
  
  
          // get the current row for AST_ASSET table
          DCIteratorBinding astAssetsVOIterator = (DCIteratorBinding) bindings.get("AstAssetsVOIterator");
  
          Key parentKey = astAssetsVOIterator.getCurrentRow().getKey();
  
          //You can add your operation code here, i have used simple Cancel operation with Rollback and Execute
  
  
          OperationBinding ob= bindings.getOperationBinding("Rollback");
          ob.execute();
  //        OperationBinding ob1= bindings.getOperationBinding("Execute");
  //        ob1.execute();
  
          //Set again row key as current row
          astAssetsVOIterator.setCurrentRowWithKey(parentKey.toStringFormat(true));
  
  
          Row assetRow = astAssetsVOIterator.getCurrentRow();        
  
          // print out the current ID
          System.out.println(assetRow.getAttribute("Id"));
  
          // get the AstAssetReturnsVOIterator and create a new row with default values
          DCIteratorBinding astAssetReturnsVOIterator = (DCIteratorBinding) bindings.get("AstAssetReturnsVOIterator");
          ViewObject assetReturnVO = astAssetReturnsVOIterator.getViewObject();
          assetReturnVO.executeEmptyRowSet();
  
          // pre-set values for ast_asset_return 
          Row assetReturnRow = assetReturnVO.createRow();
          assetReturnRow.setAttribute("AsetId", assetRow.getAttribute("Id"));
          assetReturnRow.setAttribute("AsrtDate", "1395/12/31");
          assetReturnRow.setAttribute("Stat", 1);
  
          // switch the status to "RETURNED"
  //        assetRow.setAttribute("Status", "RETURNED");
  
  
          assetReturnVO.insertRow( assetReturnRow );
      }
  
      public void saveAssetReturn(ActionEvent actionEvent) {
          // Set the binding context
          BindingContext bctx = BindingContext.getCurrent(); 
          BindingContainer bindings = bctx.getCurrentBindingsEntry();
  
  
          // get the current row for AST_ASSET table
          DCIteratorBinding astAssetsVOIterator = (DCIteratorBinding) bindings.get("AstAssetsVOIterator");        
          astAssetsVOIterator.getCurrentRow().setAttribute("Status", "Returned");
  
          OperationBinding ob = bindings.getOperationBinding("Commit");
          ob.execute();
      }
  //
  //    public void saveAssetReturn(ActionEvent actionEvent) {
  //        // Add event code here...
  //    }
  }
  </code></pre>