<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-42052780587253856</id><updated>2012-01-31T18:20:24.311-02:00</updated><category term='VBScript'/><category term='Sorting'/><category term='Document'/><category term='NotesDocument'/><category term='Transferencia'/><category term='Thread'/><category term='IO'/><category term='String'/><category term='Clipper'/><category term='Sort'/><category term='Java'/><category term='IDE'/><category term='Collection'/><category term='Lotus'/><category term='PieChart'/><category term='LotusScript'/><category term='Compare'/><category term='8.5'/><category term='NotesDocumentCollection'/><category term='compareTo'/><category term='Notes'/><category term='Comparable'/><category term='Pie'/><category term='Chart'/><category term='6.5'/><category term='Lotus Notes'/><category term='Facade'/><category term='Google Chart'/><title type='text'>Felipe Rotilho</title><subtitle type='html'>Pense menos, faça mais.
&lt;br&gt;
Refatorando para uma vida melhor ;)</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.rotilho.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/42052780587253856/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://www.rotilho.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Felipe Rotilho</name><uri>https://profiles.google.com/102330577097051160370</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-MefpcurRRlE/AAAAAAAAAAI/AAAAAAAAAVg/LlUYEv6aTQ4/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>6</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-42052780587253856.post-895000040667043920</id><published>2010-08-01T14:30:00.012-03:00</published><updated>2010-08-02T13:46:34.205-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Google Chart'/><category scheme='http://www.blogger.com/atom/ns#' term='PieChart'/><category scheme='http://www.blogger.com/atom/ns#' term='Facade'/><category scheme='http://www.blogger.com/atom/ns#' term='Chart'/><category scheme='http://www.blogger.com/atom/ns#' term='VBScript'/><category scheme='http://www.blogger.com/atom/ns#' term='LotusScript'/><category scheme='http://www.blogger.com/atom/ns#' term='Pie'/><category scheme='http://www.blogger.com/atom/ns#' term='Lotus Notes'/><title type='text'>Pie Chart - Facade para o Google Charts</title><content type='html'>Bom, resolvi desenvolver um facade para o google chart, está super simples de entender. Espero adicionar mais gráficos com o tempo além de dar maior suporte aos principais recursos do GoogleChart.&lt;br /&gt;&lt;br /&gt;Exemplo de Uso:&lt;br /&gt;&lt;pre class="brush: vb"&gt;Sub Initialize()&lt;br /&gt; Dim pie As New Pie(500, 200)&lt;br /&gt; &lt;br /&gt; Dim pieSlice As New PieSlice("Felipe","100")&lt;br /&gt; Call pie.addSlice(pieSlice)&lt;br /&gt; Set pieSlice = New PieSlice("Rotilho","200")&lt;br /&gt; Call pie.addSlice(pieSlice)&lt;br /&gt; Set pieSlice = New PieSlice("FelipeRotilho","150")&lt;br /&gt; Call pie.addSlice(pieSlice)&lt;br /&gt; Call pie.setChartType("p3")&lt;br /&gt; &lt;br /&gt; Print pie.getURL()&lt;br /&gt;End Sub&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;img alt="Imagem gerada a partir método .getURL"src="http://chart.apis.google.com/chart?cht=p3&amp;chs=500x200&amp;chd=t:100,200,150&amp;chl=Felipe|Rotilho|FelipeRotilho"/&gt;&lt;br /&gt;&lt;br /&gt;Source Code:&lt;br /&gt;&lt;pre class="brush: vb"&gt;Const errNotImplemented = 13001&lt;br /&gt;Const googleChartURL = "http://chart.apis.google.com/chart?"&lt;br /&gt;%REM&lt;br /&gt; Class Chart&lt;br /&gt; Description: Chart class monta um link do Google Chart&lt;br /&gt; Atualizado no dia 2, de Agosto de 2010.&lt;br /&gt;%END REM&lt;br /&gt;Class Chart&lt;br /&gt; Private chartType As String&lt;br /&gt; &lt;br /&gt; %REM&lt;br /&gt;  Sub setChartType&lt;br /&gt;  Description: Types: p, p3 e pc&lt;br /&gt; %END REM&lt;br /&gt; Public Sub setChartType(strType As String)&lt;br /&gt;  chartType = "cht=" + strType + |&amp;|&lt;br /&gt; End Sub&lt;br /&gt; &lt;br /&gt; %REM&lt;br /&gt;  Function getChartType&lt;br /&gt;  Description: Comments for Function&lt;br /&gt; %END REM&lt;br /&gt; Public Function getChartType As String&lt;br /&gt;  getChartType = chartType&lt;br /&gt; End Function&lt;br /&gt; &lt;br /&gt; %REM&lt;br /&gt;  Function getURL&lt;br /&gt;  Description: Retorna URL do Google Chart&lt;br /&gt; %END REM&lt;br /&gt; Public Function getURL As String&lt;br /&gt;  Error errNotImplemented, "Function não implementada"&lt;br /&gt; End Function&lt;br /&gt; &lt;br /&gt;End Class&lt;br /&gt;&lt;/pre&gt;&lt;pre class="brush: vb"&gt;%REM&lt;br /&gt; Class Pie&lt;br /&gt; Description: Comments for Class&lt;br /&gt;%END REM&lt;br /&gt;Class Pie As Chart&lt;br /&gt; Private x As String&lt;br /&gt; Private y As String&lt;br /&gt; Private index As Integer&lt;br /&gt; Private slices() As PieSlice&lt;br /&gt; %REM&lt;br /&gt;  Sub New&lt;br /&gt;  Description: Constructor&lt;br /&gt; %END REM&lt;br /&gt; Public Sub New(x As Double, y As Double)&lt;br /&gt;  Me.x = CStr(x)&lt;br /&gt;  Me.y = CStr(y)&lt;br /&gt;  Call Me.setChartType("p3")&lt;br /&gt; End Sub&lt;br /&gt; &lt;br /&gt; %REM&lt;br /&gt;  Function getURL&lt;br /&gt;  Description: Comments for Function&lt;br /&gt; %END REM&lt;br /&gt; Public Function getURL As String&lt;br /&gt;  Dim link As String&lt;br /&gt;  link = googleChartURL&lt;br /&gt;  link = link + Me.getChartType()&lt;br /&gt;  link = link + Me.getChartSize()&lt;br /&gt;  link = link + Me.getValues()&lt;br /&gt;  link = link + Me.getLabels()&lt;br /&gt;  getURL = link&lt;br /&gt; End Function&lt;br /&gt; &lt;br /&gt; %REM&lt;br /&gt;  Sub addSlice&lt;br /&gt;  Description: Comments for Sub&lt;br /&gt; %END REM&lt;br /&gt; Public Sub addSlice(pieSlice As PieSlice)&lt;br /&gt;  Set slices(nextPosition) = pieSlice&lt;br /&gt; End Sub&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; %REM&lt;br /&gt;  Function getValues&lt;br /&gt;  Description: Comments for Function&lt;br /&gt; %END REM&lt;br /&gt; Public Function getValues As String&lt;br /&gt;  Dim values As String&lt;br /&gt;  values = "chd=t:"&lt;br /&gt;  &lt;br /&gt;  Dim i As Integer&lt;br /&gt;  For i = 0 To index - 1&lt;br /&gt;   values = values + slices(i).getValue()&lt;br /&gt;   If i &lt; (index - 1) Then&lt;br /&gt;    values = values + "," &lt;br /&gt;   End If&lt;br /&gt;  Next&lt;br /&gt;  getValues = values + |&amp;|&lt;br /&gt; End Function&lt;br /&gt; &lt;br /&gt; %REM&lt;br /&gt;  Function getLabels&lt;br /&gt;  Description: Comments for Function&lt;br /&gt; %END REM&lt;br /&gt; Public Function getLabels As String&lt;br /&gt;  Dim labels As String&lt;br /&gt;  labels = |chl=|&lt;br /&gt;  &lt;br /&gt;  Dim i As Integer&lt;br /&gt;  For i = 0 To index - 1&lt;br /&gt;   labels = labels + slices(i).getLabel()&lt;br /&gt;   If i &lt; (index - 1) Then&lt;br /&gt;    labels = labels + "|"&lt;br /&gt;   End If&lt;br /&gt;  Next&lt;br /&gt;  getLabels = labels + |&amp;|&lt;br /&gt; End Function&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; %REM&lt;br /&gt;  Function nextPosition&lt;br /&gt;  Description: Comments for Function&lt;br /&gt; %END REM&lt;br /&gt; Private Function nextPosition As Integer&lt;br /&gt;  ReDim Preserve slices(index)&lt;br /&gt;  nextPosition = index&lt;br /&gt;  index = index + 1&lt;br /&gt; End Function&lt;br /&gt; &lt;br /&gt; %REM&lt;br /&gt;  Function getChartSize&lt;br /&gt;  Description: Comments for Function&lt;br /&gt; %END REM&lt;br /&gt; Private Function getChartSize As String&lt;br /&gt;  getChartSize = |chs=| +CStr(x) + |x| + CStr(y) + |&amp;|&lt;br /&gt; End Function&lt;br /&gt; &lt;br /&gt;End Class&lt;/pre&gt;&lt;pre class="brush: vb"&gt;%REM&lt;br /&gt; Class PieSlice&lt;br /&gt; Description: Slice of Pie&lt;br /&gt;%END REM&lt;br /&gt;Class PieSlice&lt;br /&gt; Private label As String&lt;br /&gt; Private value As String&lt;br /&gt; %REM&lt;br /&gt;  Sub New&lt;br /&gt;  Description: Comments for Sub&lt;br /&gt; %END REM&lt;br /&gt; Public Sub New(label As String, value As String)&lt;br /&gt;  Me.label = label&lt;br /&gt;  Me.value = value&lt;br /&gt; End Sub&lt;br /&gt; &lt;br /&gt; %REM&lt;br /&gt;  Function getLabel&lt;br /&gt;  Description: Comments for Function&lt;br /&gt; %END REM&lt;br /&gt; Public Function getLabel As String&lt;br /&gt;  getLabel = label&lt;br /&gt; End Function&lt;br /&gt; &lt;br /&gt; %REM&lt;br /&gt;  Function getValue&lt;br /&gt;  Description: Comments for Function&lt;br /&gt; %END REM&lt;br /&gt; Public Function getValue As String&lt;br /&gt;  getValue = value&lt;br /&gt; End Function&lt;br /&gt;End Class&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/42052780587253856-895000040667043920?l=www.rotilho.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.rotilho.com/feeds/895000040667043920/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.rotilho.com/2010/08/pie-chart-facade-para-o-google-charts.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/42052780587253856/posts/default/895000040667043920'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/42052780587253856/posts/default/895000040667043920'/><link rel='alternate' type='text/html' href='http://www.rotilho.com/2010/08/pie-chart-facade-para-o-google-charts.html' title='Pie Chart - Facade para o Google Charts'/><author><name>Felipe Rotilho</name><uri>https://profiles.google.com/102330577097051160370</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-MefpcurRRlE/AAAAAAAAAAI/AAAAAAAAAVg/LlUYEv6aTQ4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-42052780587253856.post-3175856051904863696</id><published>2010-07-31T12:40:00.002-03:00</published><updated>2010-08-01T11:16:35.592-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='NotesDocument'/><category scheme='http://www.blogger.com/atom/ns#' term='Thread'/><category scheme='http://www.blogger.com/atom/ns#' term='Transferencia'/><category scheme='http://www.blogger.com/atom/ns#' term='Lotus Notes'/><category scheme='http://www.blogger.com/atom/ns#' term='IO'/><category scheme='http://www.blogger.com/atom/ns#' term='Clipper'/><title type='text'>Transferindo documentos para outras database</title><content type='html'>Recentemente fiz uma migração de uma aplicação legado em Clipper para NSF, só que perdia muito tempo no I/O. Para contornar este problema optei por utilizar threads, tendo um ganho significativo de performance. Durante a resolução deste problema criei um Connector que se encarregava da transferir os documents.&lt;br /&gt;&lt;br /&gt;Connector: &lt;a href="http://sites.google.com/site/feliperotilho/RotilhoConnector.jar"&gt;RotilhoConnector.jar&lt;/a&gt; &lt;i&gt;2k&lt;/i&gt;&lt;br /&gt;&lt;i&gt;Atualizado no dia 1, de Agosto de 2010.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Segue um exemplo de sua utilização:&lt;br /&gt;&lt;pre class="brush: java"&gt;import edu.rotilho.RotilhoConnector;&lt;br /&gt;import lotus.domino.Database;&lt;br /&gt;import lotus.domino.DocumentCollection;&lt;br /&gt;import lotus.domino.NotesException;&lt;br /&gt;&lt;br /&gt;public class TransferCollection implements Runnable{ &lt;br /&gt; private DocumentCollection documentCollection;&lt;br /&gt; private Database targetDatabase;&lt;br /&gt; public TransferCollection(DocumentCollection documentCollection, Database targetDatabase){&lt;br /&gt;  this.documentCollection = documentCollection;&lt;br /&gt;  this.targetDatabase = targetDatabase;&lt;br /&gt; }&lt;br /&gt; public void run() {&lt;br /&gt;  RotilhoConnector con = new RotilhoConnector(){&lt;br /&gt;   public Database getDatabase() {&lt;br /&gt;    return targetDatabase;&lt;br /&gt;   }&lt;br /&gt;  };&lt;br /&gt;  try {&lt;br /&gt;   con.copyToDatabase(documentCollection);&lt;br /&gt;  } catch (NotesException e) {&lt;br /&gt;   e.printStackTrace();&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;} &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;O método &lt;b&gt;copyToDatabase&lt;/b&gt; aceita como parâmetro Document, DocumentCollection, ViewEntry, ViewEntryCollection, Database e View,&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/42052780587253856-3175856051904863696?l=www.rotilho.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.rotilho.com/feeds/3175856051904863696/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.rotilho.com/2010/07/transferindo-documentos-para-outras.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/42052780587253856/posts/default/3175856051904863696'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/42052780587253856/posts/default/3175856051904863696'/><link rel='alternate' type='text/html' href='http://www.rotilho.com/2010/07/transferindo-documentos-para-outras.html' title='Transferindo documentos para outras database'/><author><name>Felipe Rotilho</name><uri>https://profiles.google.com/102330577097051160370</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-MefpcurRRlE/AAAAAAAAAAI/AAAAAAAAAVg/LlUYEv6aTQ4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-42052780587253856.post-4173195593958544138</id><published>2010-07-30T21:47:00.000-03:00</published><updated>2010-07-30T21:47:20.184-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Lotus'/><category scheme='http://www.blogger.com/atom/ns#' term='IDE'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Notes'/><category scheme='http://www.blogger.com/atom/ns#' term='LotusScript'/><category scheme='http://www.blogger.com/atom/ns#' term='8.5'/><category scheme='http://www.blogger.com/atom/ns#' term='6.5'/><category scheme='http://www.blogger.com/atom/ns#' term='Lotus Notes'/><title type='text'>Parando de Adaptar a Roda - Lotus (Agora) Sabe</title><content type='html'>"Não reinvente a roda" é o que sempre costumo ouvir, entretanto me deparo constantemente com situações onde é necessário estudar a roda de uma outra plataforma e simular o seu funcionamento, seja por limitações da versão do Lotus Notes que utilizo (6.5 / 2003) ou da própria API. Porém, o que mais me deixa de cabelo branco são algumas limitações do próprio LotusScript, tendo que muitas vezes escrever um código não tão bom quanto poderia ser simplesmente por não poder utilizar, por exemplo, interfaces.&lt;br /&gt;&lt;br /&gt;Estes problemas, limitações da linguagem, são facilmente contornados com o Java. A IBM logo teve esta sacada, porém demorou a apresentar uma IDE a altura, consequentemente o LotusScript acabou virando o jogador principal da maioria das aplicações no mercado enquanto o Java aguardou no banco de reservas.&lt;br /&gt;&lt;br /&gt;Com o lançamento do 8.5 percebi que a comunidade como um todo se empolgou, uma lista a perder de vista de novas funcionalidade enchem a boca de qualquer desenvolvedor Lotus Notes, mas o que mais me animou foi a nova IDE, muito mais robusta e intuitiva.&lt;br /&gt;&lt;br /&gt;Como será o Lotus Notes 9? ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/42052780587253856-4173195593958544138?l=www.rotilho.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.rotilho.com/feeds/4173195593958544138/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.rotilho.com/2010/07/parando-de-adaptar-roda-lotus-agora.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/42052780587253856/posts/default/4173195593958544138'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/42052780587253856/posts/default/4173195593958544138'/><link rel='alternate' type='text/html' href='http://www.rotilho.com/2010/07/parando-de-adaptar-roda-lotus-agora.html' title='Parando de Adaptar a Roda - Lotus (Agora) Sabe'/><author><name>Felipe Rotilho</name><uri>https://profiles.google.com/102330577097051160370</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-MefpcurRRlE/AAAAAAAAAAI/AAAAAAAAAVg/LlUYEv6aTQ4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-42052780587253856.post-2914569812848123229</id><published>2010-07-30T17:59:00.006-03:00</published><updated>2010-08-02T13:45:57.836-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='LotusScript'/><category scheme='http://www.blogger.com/atom/ns#' term='Sorting'/><category scheme='http://www.blogger.com/atom/ns#' term='Sort'/><category scheme='http://www.blogger.com/atom/ns#' term='NotesDocumentCollection'/><category scheme='http://www.blogger.com/atom/ns#' term='Collection'/><title type='text'>Sorting Collection</title><content type='html'>Exemplo de uso:&lt;br /&gt;&lt;pre class="brush: vb"&gt;Private Function getAllRecursos As String&lt;br /&gt;  Dim html As String&lt;br /&gt;  Dim col As NotesDocumentCollection&lt;br /&gt;  Dim doc As NotesDocument&lt;br /&gt;  &lt;br /&gt;  Set col = p.getAllRecursos&lt;br /&gt;  Dim sc As New SortCollection(col, col.Parent)&lt;br /&gt;  Call sc.addCampo("dataDistribuicao")&lt;br /&gt;  Set col = sc.Sort&lt;br /&gt;  &lt;br /&gt;  Set doc = col.GetFirstDocument&lt;br /&gt;  &lt;br /&gt;  html = html + |RECURSO(S):|&lt;br /&gt;  While Not doc Is Nothing&lt;br /&gt;   html = html + Me.getRecurso(doc)&lt;br /&gt;   Set doc = col.GetNextDocument(doc)&lt;br /&gt;  Wend&lt;br /&gt;  getAllRecursos = html&lt;br /&gt; End Function&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Source Code:&lt;br /&gt;&lt;pre class="brush: vb"&gt;Use "DocumentEntry"&lt;br /&gt;%REM&lt;br /&gt; Class SortCollection&lt;br /&gt; Description: Comments for Class&lt;br /&gt; Atualizado no dia 2, de Agosto de 2010.&lt;br /&gt;%END REM&lt;br /&gt;Class SortCollection&lt;br /&gt; Private col As NotesDocumentCollection&lt;br /&gt; Private db As NotesDatabase&lt;br /&gt; Private index As Integer &lt;br /&gt; Private campos() As String&lt;br /&gt; Private documentEntries() As DocumentEntry&lt;br /&gt; Private order As String&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;%REM&lt;br /&gt;  Sub New&lt;br /&gt;  Description: Comments for Sub&lt;br /&gt;%END REM&lt;br /&gt; Sub New(col As NotesDocumentCollection, dbOfCollection As NotesDatabase)&lt;br /&gt;  Set Me.col = col&lt;br /&gt;  Set Me.db = dbOfCollection&lt;br /&gt;  Me.order = "[ASCENDING]"&lt;br /&gt;  Redim campos(0)&lt;br /&gt;  &lt;br /&gt; End Sub&lt;br /&gt; &lt;br /&gt;%REM&lt;br /&gt;  Sub setOrder&lt;br /&gt;  Description: Comments for Sub&lt;br /&gt;%END REM&lt;br /&gt; Sub setOrder(order As String)&lt;br /&gt;  Me.order = order&lt;br /&gt; End Sub&lt;br /&gt; &lt;br /&gt;%REM&lt;br /&gt;     Sub addCampo&lt;br /&gt;     Description: Comments for Function&lt;br /&gt;%END REM&lt;br /&gt; Public Sub addCampo(nome As String) &lt;br /&gt;  campos(nextPosition) = nome &lt;br /&gt; End Sub &lt;br /&gt; &lt;br /&gt;%REM&lt;br /&gt;     Function nextPosition&lt;br /&gt;     Description: Comments for Function&lt;br /&gt;%END REM&lt;br /&gt; Private Function nextPosition As Integer &lt;br /&gt;  Redim Preserve campos(index) &lt;br /&gt;  nextPosition = index &lt;br /&gt;  index = index + 1 &lt;br /&gt; End Function &lt;br /&gt; &lt;br /&gt;%REM&lt;br /&gt;     Function Sort&lt;br /&gt;     Description: Comments for Function&lt;br /&gt;%END REM&lt;br /&gt; Public Function Sort As NotesDocumentCollection&lt;br /&gt;  If col.Count &gt; 0 And campos(0) &lt;&gt; "" Then&lt;br /&gt;   Dim colSorted As NotesDocumentCollection&lt;br /&gt;   &lt;br /&gt;   Call instanceAllEntries&lt;br /&gt;   Call sortAllEntries&lt;br /&gt;   Set colSorted = Me.getEmptyCollection&lt;br /&gt;   &lt;br /&gt;   Dim i As Double&lt;br /&gt;   For i = 0 To Ubound(documentEntries)&lt;br /&gt;    Call colSorted.Adddocument(documentEntries(i).Document)&lt;br /&gt;   Next&lt;br /&gt;   Set col = colSorted&lt;br /&gt;  End If&lt;br /&gt;  Set Sort = col&lt;br /&gt; End Function&lt;br /&gt; &lt;br /&gt;%REM&lt;br /&gt;     Function getCollection&lt;br /&gt;     Description: Comments for Function&lt;br /&gt;%END REM&lt;br /&gt; Public Function getCollection As NotesDocumentCollection&lt;br /&gt;  Set getCollection = col&lt;br /&gt; End Function&lt;br /&gt; &lt;br /&gt;%REM&lt;br /&gt;     Sub instanceAllEntries&lt;br /&gt;     Description: Comments for Sub&lt;br /&gt;%END REM&lt;br /&gt; Private Sub instanceAllEntries&lt;br /&gt;  Redim documentEntries(col.Count - 1)&lt;br /&gt;  &lt;br /&gt;  Dim contador As Integer&lt;br /&gt;  Dim doc As NotesDocument&lt;br /&gt;  &lt;br /&gt;  Set doc = col.Getfirstdocument()&lt;br /&gt;  While Not doc Is Nothing&lt;br /&gt;   Set documentEntries(contador) = New DocumentEntry(doc.Universalid,db)&lt;br /&gt;   Set doc = col.Getnextdocument(doc)&lt;br /&gt;   contador = contador + 1&lt;br /&gt;  Wend&lt;br /&gt; End Sub&lt;br /&gt; &lt;br /&gt;%REM&lt;br /&gt;     Sub sortAllEntries&lt;br /&gt;     Description: Comments for Sub&lt;br /&gt;%END REM&lt;br /&gt; Private Sub sortAllEntries  &lt;br /&gt;  Call quickSort(0, Ubound(documentEntries))&lt;br /&gt; End Sub&lt;br /&gt; &lt;br /&gt;%REM&lt;br /&gt;     Sub quickSort&lt;br /&gt;     Description: Comments for Sub&lt;br /&gt;%END REM&lt;br /&gt; Private Sub quickSort(inicio As Double, fim As Double)  &lt;br /&gt;  Dim i As Double&lt;br /&gt;  Dim k As Double&lt;br /&gt;  &lt;br /&gt;  i = inicio&lt;br /&gt;  k = fim&lt;br /&gt;  &lt;br /&gt;  If (fim - inicio &gt;= 1) Then&lt;br /&gt;   Dim pivo As DocumentEntry&lt;br /&gt;   Set pivo = documentEntries(inicio)&lt;br /&gt;   While (k &gt; i)&lt;br /&gt;    While (pivo.compareTo(documentEntries(i), order, campos) &gt;= 0 And i &lt;= fim And k &gt; i)&lt;br /&gt;     i = i + 1&lt;br /&gt;    Wend&lt;br /&gt;    While (pivo.compareTo(documentEntries(k), order, campos) = -1 And k &gt;= inicio And k &gt;= i)&lt;br /&gt;     k = k - 1&lt;br /&gt;    Wend    &lt;br /&gt;    If (k &gt; i) Then Call swap(i,k)   &lt;br /&gt;   Wend&lt;br /&gt;   &lt;br /&gt;   Call swap(inicio, k)&lt;br /&gt;   Call quickSort(inicio, k - 1)&lt;br /&gt;   Call quickSort(k + 1, fim) &lt;br /&gt;  End If&lt;br /&gt;  &lt;br /&gt; End Sub&lt;br /&gt; &lt;br /&gt;%REM&lt;br /&gt;     Sub swap&lt;br /&gt;     Description: Comments for Sub&lt;br /&gt;%END REM&lt;br /&gt; Private Sub swap(i As Double, j As Double)&lt;br /&gt;  Dim entryAux As DocumentEntry&lt;br /&gt;  &lt;br /&gt;  Set entryAux = documentEntries(i)&lt;br /&gt;  Set documentEntries(i) = documentEntries(j)&lt;br /&gt;  Set documentEntries(j) = entryAux &lt;br /&gt;  Exit Sub&lt;br /&gt; End Sub&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;%REM&lt;br /&gt;     Function getEmptyCollection&lt;br /&gt;     Description: Comments for Function&lt;br /&gt;%END REM&lt;br /&gt; Public Function getEmptyCollection As NotesDocumentCollection&lt;br /&gt;  Set getEmptyCollection = db.GetProfileDocCollection("FelipeRotilho13") &lt;br /&gt; End Function&lt;br /&gt;End Class&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/42052780587253856-2914569812848123229?l=www.rotilho.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.rotilho.com/feeds/2914569812848123229/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.rotilho.com/2010/07/sorting-collection.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/42052780587253856/posts/default/2914569812848123229'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/42052780587253856/posts/default/2914569812848123229'/><link rel='alternate' type='text/html' href='http://www.rotilho.com/2010/07/sorting-collection.html' title='Sorting Collection'/><author><name>Felipe Rotilho</name><uri>https://profiles.google.com/102330577097051160370</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-MefpcurRRlE/AAAAAAAAAAI/AAAAAAAAAVg/LlUYEv6aTQ4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-42052780587253856.post-8945147792809372761</id><published>2010-07-29T23:26:00.007-03:00</published><updated>2010-08-02T13:45:43.770-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='compareTo'/><category scheme='http://www.blogger.com/atom/ns#' term='Compare'/><category scheme='http://www.blogger.com/atom/ns#' term='NotesDocument'/><category scheme='http://www.blogger.com/atom/ns#' term='LotusScript'/><category scheme='http://www.blogger.com/atom/ns#' term='Document'/><category scheme='http://www.blogger.com/atom/ns#' term='Comparable'/><title type='text'>Compare Documents</title><content type='html'>Exemplo de Uso:&lt;br /&gt;&lt;pre class="brush: vb"&gt;Dim i As Double&lt;br /&gt; Private Sub quickSort(inicio As Double, fim As Double)  &lt;br /&gt;  Dim i As Double&lt;br /&gt;  Dim k As Double&lt;br /&gt;  &lt;br /&gt;  i = inicio&lt;br /&gt;  k = fim&lt;br /&gt;  &lt;br /&gt;  If (fim - inicio &gt;= 1) Then&lt;br /&gt;   Dim pivo As DocumentEntry&lt;br /&gt;   Set pivo = documentEntries(inicio)&lt;br /&gt;   While (k &gt; i)&lt;br /&gt;    While (pivo.compareTo(documentEntries(i), order, campos) &gt;= 0 And i &lt;= fim And k &gt; i)&lt;br /&gt;     i = i + 1&lt;br /&gt;    Wend&lt;br /&gt;    While (pivo.compareTo(documentEntries(k), order, campos) = -1 And k &gt;= inicio And k &gt;= i)&lt;br /&gt;     k = k - 1&lt;br /&gt;    Wend    &lt;br /&gt;    If (k &gt; i) Then Call swap(i,k)   &lt;br /&gt;   Wend&lt;br /&gt;   &lt;br /&gt;   Call swap(inicio, k)&lt;br /&gt;   Call quickSort(inicio, k - 1)&lt;br /&gt;   Call quickSort(k + 1, fim) &lt;br /&gt;  End If&lt;br /&gt;  &lt;br /&gt; End Sub&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Source Code:&lt;br /&gt;&lt;pre class="brush: vb"&gt;Use "Sort"&lt;br /&gt;%REM&lt;br /&gt; Class DocumentEntry&lt;br /&gt; Description: Comments for Class&lt;br /&gt; Atualizado no dia 2, de Agosto de 2010.&lt;br /&gt;%END REM&lt;br /&gt;Class DocumentEntry&lt;br /&gt; Private UNID As String&lt;br /&gt; Private db As NotesDatabase&lt;br /&gt; %REM&lt;br /&gt;  Sub New&lt;br /&gt;  Description: Comments for Sub&lt;br /&gt; %END REM&lt;br /&gt; Sub New(UNID As String, dbOfDocument As NotesDatabase)&lt;br /&gt;  If Len(UNID) = 32 Then&lt;br /&gt;   Me.UNID = UNID&lt;br /&gt;   Set Me.db = dbOfDocument&lt;br /&gt;  Else&lt;br /&gt;   Error 4091, "Invalid Universal ID"&lt;br /&gt;  End If&lt;br /&gt; End Sub&lt;br /&gt;  &lt;br /&gt; %REM&lt;br /&gt;  Function Document&lt;br /&gt;  Description: Comments for Function&lt;br /&gt; %END REM&lt;br /&gt; Public Function Document As NotesDocument&lt;br /&gt;  Set Document = db.GetDocumentByUNID(UNID)&lt;br /&gt; End Function&lt;br /&gt;  &lt;br /&gt; %REM&lt;br /&gt;  Function compareTo&lt;br /&gt;  Description: Comments for Function&lt;br /&gt; %END REM&lt;br /&gt; Public Function compareTo(documentEntry As DocumentEntry, order As String, campos As Variant) As Integer&lt;br /&gt;  compareTo = Compare(Me,documentEntry,LBound(campos), order, campos)&lt;br /&gt; End Function&lt;br /&gt;  &lt;br /&gt; %REM&lt;br /&gt;  Function Compare&lt;br /&gt;  Description: Comments for Function&lt;br /&gt; %END REM&lt;br /&gt; Private Function Compare(arg1 As DocumentEntry, arg2 As DocumentEntry, index As Integer, order As String,  campos As Variant) As Integer&lt;br /&gt;  Dim campo1 As String&lt;br /&gt;  Dim campo2 As String&lt;br /&gt;  campo1 = arg1.getNthFieldValue(index,campos)&lt;br /&gt;  campo2 = arg2.getNthFieldValue(index,campos)&lt;br /&gt;  If campo1 = campo2 Then&lt;br /&gt;   If index = UBound(campos) Then&lt;br /&gt;    Compare = 0&lt;br /&gt;   Else&lt;br /&gt;    Compare = Compare(arg1,arg2,index + 1, order, campos)&lt;br /&gt;   End If&lt;br /&gt;  Else&lt;br /&gt;   Dim s As New Sort(Split(campo1 + "&amp;&amp;&amp;" + campo2,"&amp;&amp;&amp;"))&lt;br /&gt;   Call s.setOrder(order)&lt;br /&gt;   Dim sorted As Variant&lt;br /&gt;   sorted = s.Sort()&lt;br /&gt;   If ArrayGetIndex(sorted,campo1) = 0 Then&lt;br /&gt;    Compare = -1&lt;br /&gt;   Else&lt;br /&gt;    Compare = 1&lt;br /&gt;   End If&lt;br /&gt;  End If&lt;br /&gt; End Function&lt;br /&gt;  &lt;br /&gt; %REM&lt;br /&gt; Function getNthFieldValue&lt;br /&gt; Description: Comments for Function&lt;br /&gt; %END REM&lt;br /&gt; Public Function getNthFieldValue(index As Integer,  campos As Variant) As String&lt;br /&gt;  getNthFieldValue = Me.Document().Getitemvalue(campos(index))(0)&lt;br /&gt; End Function&lt;br /&gt;  &lt;br /&gt;End Class&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/42052780587253856-8945147792809372761?l=www.rotilho.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.rotilho.com/feeds/8945147792809372761/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.rotilho.com/2010/07/compare-documents.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/42052780587253856/posts/default/8945147792809372761'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/42052780587253856/posts/default/8945147792809372761'/><link rel='alternate' type='text/html' href='http://www.rotilho.com/2010/07/compare-documents.html' title='Compare Documents'/><author><name>Felipe Rotilho</name><uri>https://profiles.google.com/102330577097051160370</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-MefpcurRRlE/AAAAAAAAAAI/AAAAAAAAAVg/LlUYEv6aTQ4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-42052780587253856.post-3094657642653070584</id><published>2010-07-29T20:20:00.005-03:00</published><updated>2010-08-01T11:19:14.986-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='LotusScript'/><category scheme='http://www.blogger.com/atom/ns#' term='Sorting'/><category scheme='http://www.blogger.com/atom/ns#' term='Sort'/><category scheme='http://www.blogger.com/atom/ns#' term='String'/><title type='text'>Sorting String Array</title><content type='html'>&lt;pre class="brush: vb"&gt;%REM  &lt;br /&gt;Class Sort   &lt;br /&gt; Description: Comments for Class v0.3&lt;br /&gt; Atualizado no dia 1, de Agosto de 2010.&lt;br /&gt;%END REM &lt;br /&gt;Class Sort&lt;br /&gt; Private Vector As Variant&lt;br /&gt; Private order As String&lt;br /&gt; Sub New(forSort As Variant)&lt;br /&gt;  Me.Vector = forSort&lt;br /&gt;  order = "[ASCENDING]"&lt;br /&gt; End Sub&lt;br /&gt; &lt;br /&gt; 'Deprecated&lt;br /&gt; Public Function getSortedVector As Variant&lt;br /&gt;  getSortedVector = Sort&lt;br /&gt; End Function&lt;br /&gt; &lt;br /&gt; Public Function Sort As Variant&lt;br /&gt;  Dim varTemp As Variant&lt;br /&gt;   &lt;br /&gt;  If Not IsEmpty(Vector) Then              &lt;br /&gt;   varTemp = Join(Vector,|":"|)&lt;br /&gt;   varTemp = Evaluate(|@Sort("|+ varTemp + |"; | + order + |)|)&lt;br /&gt;   &lt;br /&gt;   Sort = varTemp&lt;br /&gt;  Else&lt;br /&gt;   Sort = Vector&lt;br /&gt;  End If&lt;br /&gt; End Function&lt;br /&gt; &lt;br /&gt; Public Sub setOrder(order As String)&lt;br /&gt;  Me.order = order&lt;br /&gt; End Sub&lt;br /&gt;End Class&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/42052780587253856-3094657642653070584?l=www.rotilho.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.rotilho.com/feeds/3094657642653070584/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.rotilho.com/2010/07/sorting-string-array.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/42052780587253856/posts/default/3094657642653070584'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/42052780587253856/posts/default/3094657642653070584'/><link rel='alternate' type='text/html' href='http://www.rotilho.com/2010/07/sorting-string-array.html' title='Sorting String Array'/><author><name>Felipe Rotilho</name><uri>https://profiles.google.com/102330577097051160370</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-MefpcurRRlE/AAAAAAAAAAI/AAAAAAAAAVg/LlUYEv6aTQ4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry></feed>
