Exportar tabela como arquivo XML no ADF

Desde que eu escrevi sobre como exportar tabela para Excel no Oracle ADF, este tem sido um dos posts mais lidos do blog. Eu sei que a exportação de dados é uma característica importante em uma aplicação, desta forma, vou mostrar como exportar linhas (todas ou algumas) da tabela como um arquivo XML.

Faça o download do aplicativo de amostra: ADFXMLApp.zip.

Crie uma nova aplicação ADF que irá utilizar os dados dos funcionários.

export-table-to-xml-in-adf1

Vá para o View Object EmployeesView e gere a implementação da classe View Object.

export-table-to-xml-in-adf2

Copie o seguinte código dentro classe EmployeesViewImpl.

public RowSet filterById(String id) {
  ViewCriteria myCriteria = this.createViewCriteria();
  myCriteria.setName("myCriteria");
  ViewCriteriaRow criteriaRow = myCriteria.createViewCriteriaRow();
  criteriaRow.setAttribute("EmployeeId", "IN (" + id + ")");
  myCriteria.addElement(criteriaRow);

  ViewRowSetImpl rs = (ViewRowSetImpl) findByViewCriteria(myCriteria, -1, ViewObject.QUERY_MODE_SCAN_VIEW_ROWS);

  removeRowSet(rs);
  rs.setName("EmployeesRowSet");
  addRowSet(rs);

  return rs;
}

export-table-to-xml-in-adf3

A página empView.jsf contém uma tabela de funcionários e dois botões para exportar linhas como arquivo XML.

export-table-to-xml-in-adf4

Vá para a aba source e remova a propriedade selectedRowKeys da tag af:table.
Se você não removê-la, quando você tentar obter todas as linhas selecionadas da tabela, o método getSelectedRowKeys retornará apenas a última linha selecionada.

export-table-to-xml-in-adf5

A classe EmployeesBean contém dois métodos.

public void exportSelectedRowsToXML(FacesContext facesContext, OutputStream outputStream) {
  RichTable table = (RichTable) JSFUtils.findComponentInRoot("t1");
  RowKeySet rksSelectedRows = table.getSelectedRowKeys();
  Iterator itrSelectedRows = rksSelectedRows.iterator();

  StringBuilder id = new StringBuilder("");
  while (itrSelectedRows.hasNext()) {
    Key key = (Key) ((List) itrSelectedRows.next()).get(0);
    id.append(key.getKeyValues()[0]);

    if (itrSelectedRows.hasNext()) {
      id.append(",");
    }
  }

  DCIteratorBinding dcIteratorBindings = ADFUtils.findIterator("EmployeesView1Iterator");
  ViewObject vo = dcIteratorBindings.getViewObject();
  RowSet rs = ((EmployeesViewImpl) vo).filterById(id.toString());

  try {
    ((XMLNode) (rs.writeXML(0, XMLInterface.XML_OPT_ALL_ROWS))).print(outputStream);
  } catch (IOException e) {
    e.printStackTrace();
  }
}

public void exportAllRowsToXML(FacesContext facesContext, OutputStream outputStream) {
  DCIteratorBinding dcIteratorBindings = ADFUtils.findIterator("EmployeesView1Iterator");
  ViewObject vo = dcIteratorBindings.getViewObject();

  try {
    ((XMLNode) (vo.writeXML(0, XMLInterface.XML_OPT_ALL_ROWS))).print(outputStream);
  } catch (IOException e) {
    e.printStackTrace();
  }
}

export-table-to-xml-in-adf6

Agora, quando você executar a aplicação, você pode exportar todas as linhas como um arquivo XML.

export-table-to-xml-in-adf7

Você pode exportar apenas as linhas selecionadas como um arquivo XML, também.

export-table-to-xml-in-adf8

Para alterar os nomes dos elementos XML, use as propriedades personalizadas: XML_ELEMENT e XML_ROW_ELEMENT.

export-table-to-xml-in-adf9

export-table-to-xml-in-adf10

export-table-to-xml-in-adf11

Waslley Souza

Autor: Waslley Souza

Consultor Oracle com foco em tecnologias Oracle Fusion Middleware e SOA. Certificado Oracle WebCenter Portal, Oracle ADF e Java.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *