Hello All,
this post is about exporting a viewObject data to a XML document.
Sometimes we need to generate XML document with the same data in ViewObject, for this ADF provides a facility to directly export data to a XML document using ViewObjectImpl class
See the steps to generate XML for a ViewObject
- Create a Fusion Web application and model using HR schema (Departments & Employees) table (master detail relation using viewLink)
- Now to generate XML, i have used writeXML method of ViewObjectImpl class, it produce XML using two parameters
from oracle docs-
writeXML(int depthCount, long options)
here depthCount - no. of ViewLink levels that should be traversed to produce XML 
options- how many rows you want to export, It can be set any of flags given below
    XMLInterface.XML_OPT_ALL_ROWS
    Includes all rows in the view object's row set in the XML.
    XMLInterface.XML_OPT_LIMIT_RANGE
    Includes only the rows in the current range in the XML.
- created a method in DepartmentsVOImpl class to export data to XML, added it to client Interface
    /**Method to generate XML from ViewObject data
     * @param level
     * @return
     */
    public String writeVoToXml(int level) {
        FileOutputStream out;
        ByteArrayOutputStream opStream = new ByteArrayOutputStream();
        try {
            // Generating XML for All rows and adding it to Output Stream
            ((XMLNode) this.writeXML(level, XMLInterface.XML_OPT_ALL_ROWS)).print(opStream);
            System.out.println(opStream);
            // Creating a XML document in D Drive
            out = new FileOutputStream("D://Departments.xml");
            out.close();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        return opStream.toString();
    }
 
- Now run application module to execute method and see generated XML on console
- i have created a simple page with a af:codeEditor to show generated XML , button to generate XML and a spinner to pass depth level of viewLink accessor
In case depth level is '0' , it export data only for Departments viewObject
Change level to '1' , Now it generate XML for Departments --> Employess  relation
- now to how to customize XML ? How to change default tags for attribute names and rows ?
- To change attribute label (tag in xml)- Suppose i have to change DepartmentName to Name in XML
- Add attribute level custom property named XML_ELEMENTto a valueAnyOtherNameto change the XML element name used for that attribute
- To change Row label (tag in xml)- Suppose i have to change DepartmentsVORow to DepartmentLine in XML
- Add ViewObject level custom property named XML_ROW_ELEMENTto a valueAnyOtherNameto change the XML element name used for that Row
- Now Run and see generated XML -

 
Cheers :-) Happy Learning