quarta-feira, 19 de outubro de 2011

Notes/XPages - Deletar um documento e todas seus filhos recursivamente

Bem, sabemos que um documento, em Lotus Notes, pode ter documentos filhos (Responses). E esses documentos filhos podem ter outros documentos filhos e assim vai.
Criei um Javascript Server-Side de XPages para deletar um documento e todos os seus filhos recursivamente.
Ele é bem útil para colocar em uma View, com uma coluna para deletar certo documento.

Segue o script:


function removerDocumentoComResponses(id, retornar){
 var doc:NotesDocument = database.getDocumentByUNID(id);
 var documentos:NotesDocumentCollection = doc.getResponses();
 var documentosDeleteUNID:java.util.List = new java.util.ArrayList();
 var documentoDelete:NotesDocument = documentos.getFirstDocument();
 while(documentoDelete != null){  
  if(documentoDelete.getResponses().getCount() != 0){
   documentosDeleteUNID.addAll(removerDocumentoComResponses(documentoDelete.getUniversalID(), true));
  }
  else{
   documentosDeleteUNID.add(documentoDelete.getUniversalID());
  }
  documentoDelete = documentos.getNextDocument(documentoDelete);
 }
 documentosDeleteUNID.add(doc.getUniversalID());
 documentos = null;
 if(retornar){
  return documentosDeleteUNID;
 }
 var iterator:java.util.Iterator = documentosDeleteUNID.iterator();
 while(iterator.hasNext()){
  var unid = iterator.next();
  database.getDocumentByUNID(unid).removePermanently(true);
 }
}

Esse código deve ser chamado passando o UniversalID do documento e um false no primeiro argumento.