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 e bem util 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 codigo deve ser chamado passando o UniversalID do documento e um false no primeiro argumento. Segue o link para download de um livro sobre XPages escrito pela propria IBM:http://www.wowebook.com/web-development/mastering-xpages.html- 784 paginas- Editora: IBM Press- Data de publicacao: Janeiro de 2011Boa leitura. Postarei hoje uma forma que encontrei, e que estou usando, para gerar thumbnail de uma imagem armazenada em byte[].No meu caso, estou armazenando a imagem no banco de dados e tenho um bean Imagem que tem o atributo 'arquivo' do tipo byte[]. No momento que quero exibi-lo como um thumbnail, eu uso tal codigo. Esse codigo pode ser usado em Servlets, por exemplo. Estou usando para gerar um StreamedContent para o p:graphicImage do PrimeFaces.Vamos ao codigo:@Transientprivate static final int MAX_THUMBNAIL_WIDTH = 100; @Transientpublic byte[] getThumbnail(byte[] arquivo){ ImageIcon imageIcon = new ImageIcon(arquivo); Image inImage = imageIcon.getImage(); double scale = (double) MAX_THUMBNAIL_WIDTH / (double) inImage.getWidth(null); int scaledW = (int) (scale * inImage.getWidth(null)); int scaledH = (int) (scale * inImage.getHeight(null)); BufferedImage outImage = new BufferedImage(scaledW, scaledH, BufferedImage.TYPE_INT_RGB); AffineTransform tx = new AffineTransform(); if(scale < 1.0d){ tx.scale(scale, scale); } Graphics2D g2d = outImage.createGraphics(); g2d.drawImage(inImage, tx, null); g2d.dispose(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); try { ImageIO.write(outImage, "jpeg", baos); return baos.toByteArray(); } catch (IOException e) { e.printStackTrace(); } finally{ try { baos.close(); } catch (IOException e) { e.printStackTrace(); } } return null;} <Bom, a um tempo atras tive que pegar todos os campos de dada pagina atraves de um Server-Side Javascript. Normalmente, podemos usar um getComponent("nomeDoComponent"), mas quando queremos pegar de forma geral todos os campos da pagina, nao ha um metodo getAllComponents.Entao criei um codigo recursivo que retorna uma List de components. Sendo que essa lista ja contem os components, nao e necessario usar getComponent.Bem, vamos ao codigo:function pegarCamposPagina(viewRoot:javax.faces.component.UIViewRoot){ var listaCampos:java.util.ArrayList = new java.util.ArrayList(); function iterate(component:javax.faces.component.UIComponent){ //testa de qual tipo e o component if(component instanceof com.ibm.xsp.component.xp.XspInputText || component instanceof com.ibm.xsp.component.xp.XspInputRichText || component instanceof com.ibm.xsp.component.xp.XspInputTextarea || component instanceof com.ibm.xsp.component.xp.XspInputCheckbox || component instanceof com.ibm.xsp.component.xp.XspInputRadio || component instanceof com.ibm.xsp.component.xp.XspSelectManyCheckbox || component instanceof com.ibm.xsp.component.xp.XspSelectOneRadio || component instanceof com.ibm.xsp.component.xp.XspSelectOneMenu){ listaCampos.add(component); } //testa se o component atual tem filhos if(component.getChildCount() > 0){ var lista:java.util.List = component.getChildren(); for(var i:int=0; i<lista.size(); i++){ iterate(lista.get(i)); } } return null; } iterate(viewRoot); return listaCampos;}Para usar esse script, pode-se criar uma Server-Side JavaScript Library e importar na pagina, ou simplesmente jogar no evento. Deve-se chamar esse metodo da seguinte forma:pegarCamposPagina(getView())O metodo getView() retorna a viewRoot da pagina. Entao enviamos para o metodo e ele faz chamadas recursivas