Monday 16 April 2012

Oracle ADF : How to change an attribute value of the read-only iterator's current row

// change attribute value of current row in iterator
DCIteratorBinding iterBind = ADFUtils.findIterator("MyVOIterator");
Row currRow = iterBind.getCurrentRow();
BackingBeanUtils.setRowEditable(currRow);
currRow.setAttribute("MyAttribute", "MY_VALUE");

// commit transaction
iterBind.getDataControl().commitTransaction();


...and for reference purposes, the setRowEditable(Row) utility method:
public static void setRowEditable(Row row) {
    int attribCount = row.getAttributeCount();
    for(int i = 0; i < attribCount; i++) {
      ViewAttributeDefImpl attrDef = (ViewAttributeDefImpl)
              row.getStructureDef().getAttributeDef(i);
      attrDef.setEditable(true);
      attrDef.setSDOHidden(false);
      attrDef.setUpdateableFlag(ViewAttributeDefImpl.UPDATEABLE);
    } 
}