Pessoal,
Pelas minhas idas e vindas achei várias coisas interessantes sobre listas do SharePoint então resolvi mostrar algumas coisas.
Bom vamos reunir algumas informações básicas sobre a lista.
Objeto SPList tem algumas propriedades importantes que podemos usar para obter informações básicas sobre a nossa lista, como: Quem criou a lista e quando? Quantos itens da lista contém? Etc. Etc.
|
Propriedade |
Valor |
Descrição |
|
Autor |
sharepoint \ user1 |
O usuário que criou a lista |
|
Criado |
10/2/2009 9:22:55 |
A data e hora de criação para a lista |
|
Última modificação |
12/30/2009 3:38:56 |
A data que a lista foi modificada pela última vez |
|
Template |
DocumentLibrary |
O tipo de definição da lista em que a lista é baseada |
|
Versão |
9 |
O número da versão da lista |
|
Total de itens |
16 |
O número total de itens na lista |
Para gerar o relatório e listar as informações básicas podemos usar o objeto SPList exibido neste exemplo de código:
SPList ListaSP = SPContext.Current.Web.Lists[NomeLista];
this
.Controls.Add(new LiteralControl("<h3>Informações sobre a lista</h3>"));
this.Controls.Add(new LiteralControl("<table><tr><td><b>Propriedade</b></td><td><b>Value</b></td><td><b>Descrição</b></td></tr>"));
this.Controls.Add(new LiteralControl("<tr><td>Autor</td><td>" + ListaSP.Author.LoginName + "</td><td>O usuario que criou a lista. </td></tr>"));
this.Controls.Add(new LiteralControl("<tr><td>Criado</td><td>" + ListaSP.Created.ToString() + "</td><td> Data e hora da criação da lista</td></tr>"));
this.Controls.Add(new LiteralControl("<tr><td>Ultima modificação</td><td>" + ListaSP.LastItemModifiedDate + "</td><td>Ultima modificação da lista</td></tr>"));
this.Controls.Add(new LiteralControl("<tr><td>Template</td><td>" + ListaSP.BaseTemplate.ToString() + "</td><td>Template da lista</td></tr>"));
this.Controls.Add(new LiteralControl("<tr><td>Versão</td><td>" + ListaSP.Version.ToString() + "</td><td>Versão da lista</td></tr>"));
this.Controls.Add(new LiteralControl("<tr><td>Total de items</td><td>" + ListaSP.ItemCount.ToString() + "</td><td>Numero total de itens da lista</td></tr>"));
this.Controls.Add(new LiteralControl("</table>"));
Lista do SharePoint Alertas de Informação e Estatística
Uma maneira de saber se a lista é muito popular em seu site é verificar o total de avisos na lista feita pelos próprios usuários. Podemos usar a propriedade SPAlertCollection de SPUser para verificar se o usuário escreveu avisos desta lista.
|
Propriedade |
Valor |
Descrição |
|
Total de Alertas |
3 |
O número de usuários realmente se inscrever na lista |
|
Todas as modificações |
2 |
Todos os eventos relativos à lista ou item de lista |
|
Todas as inclusões |
1 |
Incluir à lista ou item de lista |
|
Modificar Alterar Tipo |
0 |
Todas as alterações feitas em uma lista ou item de lista |
|
Excluir Alterar Tipo |
0 |
Exclusão de uma lista ou item de lista |
|
Alterar tipo de discussão |
0 |
Alterações nas discussões na Web |
Para gerar a lista de alertas relatório temos de percorrer em cada SPUser SPWeb.AllUsers como apresentado neste exemplo de código:
this.Controls.Add(new LiteralControl("<h3> Lista do SharePoint Alertas de Informação e Estatisticas. </h3>"));
int totalUsers = 0;
int changeTypeAll = 0;
int changeTypeAdd = 0;
int changeTypeDelete = 0;
int changeTypeDiscussion = 0;
int changeTypeModify = 0;
foreach (SPUser user in SPContext.Current.Web.AllUsers)
{
foreach (SPAlert alert in user.Alerts)
{
if (ListaSP.ID == alert.List.ID)
{
totalUsers++;
switch (alert.EventType)
{
case SPEventType.All:
changeTypeAll++;
break;
case SPEventType.Add:
changeTypeAdd++;
break;
case SPEventType.Delete:
changeTypeDelete++;
break;
case SPEventType.Discussion:
changeTypeDiscussion++;
break;
case SPEventType.Modify:
changeTypeModify++;
break;
default:
break;
}
}
}
}
this.Controls.Add(new LiteralControl("<table><tr><td><b>Propriedade</b></td><td><b>Value</b></td><td><b>Descrição</b></td></tr>"));
this.Controls.Add(new LiteralControl("<tr><td>Total Alertas</td><td>" + totalUsers.ToString() + "</td><td>Numero de usuarios inscritos na lista</td></tr>"));
this.Controls.Add(new LiteralControl("<tr><td>Todas as alterações</td><td>" + changeTypeAll.ToString() + "</td><td>Todas as alterações referentes a listas ou itens </td></tr>"));
this.Controls.Add(new LiteralControl("<tr><td>Modificação do tipo</td><td>" + changeTypeAdd.ToString() + "</td><td>Alteração do Tipo</td></tr>"));
this.Controls.Add(new LiteralControl("<tr><td>Alteração da lista ou item da lista</td><td>" + changeTypeModify.ToString() + "</td><td>Todas as alterações feitas em uma lista ou item da lista</td></tr>"));
this.Controls.Add(new LiteralControl("<tr><td>Exclusão ou alterar o tipo</td><td>" + changeTypeDelete.ToString() + "</td><td>Exclusão da lista ou item da lista</td></tr>"));
this.Controls.Add(new LiteralControl("<tr><td>Alteração na discussão da Web</td><td>" + changeTypeDiscussion.ToString() + "</td><td> Alteração na discussão da Web </td></tr>"));
this.Controls.Add(new LiteralControl("</table>"));
Lista do SharePoint Relatório de Uso
Para manter o controle de quem está acessando nossa lista, os itens que foram acessadas pelos usuários e quando. Podemos usar o método SPWeb.GetUsageData para encontrar essa informação.
|
Arquivo |
Total Hits |
Dia Mais Recentes |
|
documento1.doc |
15 |
29-12-2009 |
|
documento2.doc |
7 |
29-12-2009 |
Para gerar o relatório de utilização da lista precisamos filtrar a DataTable para que exiba o único item da nossa lista como mostrado neste exemplo de código:
this
.
Controls.
Add(
new LiteralControl(
"<h3>Lista do SharePoint – Relatório de Uso</h3>"));
this.
Controls.
Add(
new LiteralControl(
"<table><tr><td><b>Arquivo</b></td><td><b>Total Hits</b></td><td><b>Dia Mais Recentes</b></td></tr>"));
DataTable dt = SPContext.Current.Web.GetUsageData(SPUsageReportType.
url, SPUsagePeriodType.lastMonth);
foreach (
DataRow drow in dt.Rows)
{
if (
drow[
"Arquivos"].ToString().ToLower() ==
list.RootFolder.
Url.
ToLower())
{
this.
Controls.
Add(
new LiteralControl(
"<tr><td valign=\"top\">" +
drow[
"Page"].ToString() +
"</td><td valign=\"top\">" +
drow[
"Total Hits"].ToString() +
"</td><td valign=\"top\">" +
drow[
"Dia Mais Recentes "].ToString() +
"</td></tr>"));
}
}
this.
Controls.
Add(
new LiteralControl(
"</table>"));
Lista do SharePoint Relatório de Alterações
O relatório de alteração mostrar todas as alterações feitas na lista nos últimos 30 dias
|
Item |
Alterar Tipo |
Data |
|
documento1.doc |
Adicionar |
10/31/2009 3:41:21 |
|
documento2.doc |
Atualizar |
10/31/2009 3:39:34 |
|
documento4.doc |
Adicionar |
10/31/2009 3:45:34 |
|
documento4.doc |
Atualizar |
10/31/2009 3:48:02 |
|
documento4.doc |
Atualizar |
10/31/2009 4:34:39 |
|
documento5.doc |
Adicionar |
10/31/2009 3:16:12 |
|
documento6.doc |
Adicionar |
10/31/2009 3:19:58 |
|
documento7.doc |
Adicionar |
10/31/2009 4:33:12 |
|
documento8.doc |
Adicionar |
10/31/2009 4:35:33 |
|
documento8.doc |
Atualizar |
10/31/2009 4:38:56 |
Para gerar o relatório de alteração da lista, podemos usar os objetos SPChangeToken, passe SPChangeCollection.CollectionScope.List como o construtor como mostrado neste exemplo de código:
this.Controls.Add(new LiteralControl("<h3>Lista do SharePoint Relatório de Alterações</h3>"));
this.Controls.Add(new LiteralControl("<table><tr><td><b>Item</b></td><td><b>Alteração do Tipo</b></td><td><b>data</b></td></tr>"));
SPChangeToken changeToken = new SPChangeToken(SPChangeCollection.CollectionScope.List, ListaSP.ID, DateTime.Today.AddDays(-30));
SPChangeCollection changeCollection = ListaSP.GetChanges(changeToken);
foreach (SPChange change in changeCollection)
{
if (change.GetType().ToString() == "Microsoft.SharePoint.SPChangeItem")
{
SPChangeItem changeItem = (SPChangeItem)change;
try
{
SPListItem item = ListaSP.GetItemByUniqueId(changeItem.UniqueId);
if (item != null)
{
this.Controls.Add(new LiteralControl("<tr><td>" + item.Name + "</td><td>" + changeItem.ChangeType.ToString() + "</td><td>" + changeItem.Time.ToString() + "</td></tr>"));
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
}
this.Controls.Add(new LiteralControl("</table>"));
Relatório de Usuários da lista do SharePoint
Aqui vamos reunir os usuários que realmente usam esta lista. Nós vamos ver quantos arquivos são acessados pelos usuários da lista e como muitos arquivos e versões a lista tem.
|
Propriedade |
Valor |
Descrição |
|
Total de usuários |
12 |
O número de usuários realmente na lista |
|
Total de arquivos baixados |
3 |
O total de arquivos que tem check-out por usuários da lista |
|
Total de versões de arquivos |
25 |
O número total de versões de todos os arquivos criados por lista de usuários |
|
Top utilizadores |
SharePoint \ user3 (45) Atividades sharepoint \ user1 (22) Atividades SharePoint \ user5 (19) Atividades sharepoint \ user2 (13) Atividades SharePoint \ user4 (11) Atividades
|
O top 5 usuários na lista |
Lista do SharePoint para Relatório
O relatório de armazenamento verificar a quantidade de espaço em disco ocupado pelos arquivos e suas versões em sua lista.
|
Propriedade |
Valor |
Descrição |
|
Total do tamanho dos arquivos |
12,58 MB |
Esta é a quantidade de espaço em disco ocupado pelos arquivos na sua lista |
|
Total do tamanho versões |
8,84 MB |
Esta é a quantidade de espaço em disco ocupado pelas versões em sua lista |
|
Total do Tamanho da pasta |
21,42 MB |
Esta é a quantidade total de espaço em disco ocupado pela lista |
Para os dois últimos relatórios, percorremos todos os itens na lista, como mostrado neste exemplo de código (parte código de comprimento).
Eu também uso duas classes de ajuda, a classe ListUser e GenericComparer. (Pegue AQUI)
List<ListUser> listUsers = new List<ListUser>();
List<ListUser> listFindUsers = new List<ListUser>();
int checkedFiles = 0;
int totalVersions = 0;
long filesSize = 0;
long versionsSize = 0;
foreach (SPListItem item in ListaSP.Items)
{
listFindUsers.Clear();
if (item["Autor"] != null)
{
string userValue = item["Autor"].ToString();
int index = userValue.IndexOf(';');
int id = Int32.Parse(userValue.Substring(0, index));
SPUser author = SPContext.Current.Web.SiteUsers.GetByID(id);
listFindUsers = listUsers.FindAll(delegate(ListUser listUser)
{
if (listUser.User.LoginName != author.LoginName)
{ return false; }
listUser.Activities += 1;
return true;
});
if (listFindUsers.Count == 0)
{
listUsers.Add(new ListUser(author, 1));
}
}
listFindUsers.Clear();
if (item["Editor"] != null)
{
string userValue = item["Editor"].ToString();
int index = userValue.IndexOf(';');
int id = Int32.Parse(userValue.Substring(0, index));
SPUser editor = SPContext.Current.Web.SiteUsers.GetByID(id);
listFindUsers = listUsers.FindAll(delegate(ListUser listUser)
{
if (listUser.User.LoginName != editor.LoginName)
{ return false; }
listUser.Activities += 1;
return true;
});
if (listFindUsers.Count == 0)
{
listUsers.Add(new ListUser(editor, 1));
}
}
if (item.File != null)
{
filesSize += item.File.Length;
listFindUsers.Clear();
if (item.File.Author != null)
{
listFindUsers = listUsers.FindAll(delegate(ListUser listUser)
{
if (listUser.User.LoginName != item.File.Author.LoginName)
{
return false;
}
listUser.Activities += 1;
return true;
});
if (listFindUsers.Count == 0)
{
listUsers.Add(new ListUser(item.File.Author, 1));
}
}
listFindUsers.Clear();
if (item.File.ModifiedBy != null)
{
listFindUsers = listUsers.FindAll(delegate(ListUser listUser)
{
if (listUser.User.LoginName != item.File.ModifiedBy.LoginName)
{ return false; }
listUser.Activities += 1;
return true;
});
if (listFindUsers.Count == 0)
{
listUsers.Add(new ListUser(item.File.ModifiedBy, 1));
}
}
listFindUsers.Clear();
if (item.File.CheckedOutBy != null)
{
checkedFiles = +1;
listFindUsers = listUsers.FindAll(delegate(ListUser listUser)
{
if (listUser.User.LoginName != item.File.CheckedOutBy.LoginName)
{ return false; }
listUser.Activities += 1;
return true;
});
if (listFindUsers.Count == 0)
{
listUsers.Add(new ListUser(item.File.CheckedOutBy, 1));
}
}
if (ListaSP.EnableVersioning)
{
bool currentVersion = true;
foreach (SPListItemVersion version in item.Versions)
{
if (!currentVersion)
{
totalVersions += 1;
listFindUsers = listUsers.FindAll(delegate(ListUser listUser)
{
if (listUser.User.LoginName != version.CreatedBy.User.LoginName)
{ return false; }
listUser.Activities += 1;
return true;
});
if (listFindUsers.Count == 0)
{
listUsers.Add(new ListUser(version.CreatedBy.User, 1));
}
if (version.ListItem.File != null)
{
versionsSize += version.ListItem.File.Length;
}
}
currentVersion = false;
}
}
}
}
listUsers.Sort(new GenericComparer<ListUser>("Atividades", GenericComparer<ListUser>.SortOrder.Descending));
this.Controls.Add(new LiteralControl("<h3>Lista de usuarios</h3>"));
this.Controls.Add(new LiteralControl("<table><tr><td><b>Propriedade</b></td><td><b>Valor</b></td><td><b>Descrição</b></td></tr>"));
this.Controls.Add(new LiteralControl("<tr><td>Total de usuários</td><td>" + listUsers.Count.ToString() + "</td><td>Numero atual de usuarios da lista</td></tr>"));
this.Controls.Add(new LiteralControl("<tr><td>Total de arquivos baixados</td><td>" + checkedFiles.ToString() + "</td><td>O total de arquivos que tem check-out por usuários da lista</td></tr>"));
this.Controls.Add(new LiteralControl("<tr><td>Total de versões dos arquivos </td><td>" + totalVersions.ToString() + "</td><td>O número total de versões de todos os arquivos criados por usuários da lista </td></tr>"));
string topUsers = "";
int i = 0;
foreach (ListUser listUser in listUsers)
{
i++;
if (i > 5) break;
topUsers += listUser.User.LoginName + " (" + listUser.Activities.ToString() + " Atividades)<br/>";
}
this.Controls.Add(new LiteralControl("<tr><td valign=\"top\">Top usuarios</td><td valign=\"top\">" + topUsers + "</td><td valign=\"top\">Usuarios top da lista</td></tr>"));
this.Controls.Add(new LiteralControl("</table>"));
this.Controls.Add(new LiteralControl("<h3>Lista Relatório do SharePoint</h3>"));
this.Controls.Add(new LiteralControl("<table><tr><td><b>Propriedade</b></td><td><b>Valor</b></td><td><b>Descrição</b></td></tr>"));
this.Controls.Add(new LiteralControl("<tr><td>Tamanho total de arquivos</td><td>" + (ConvertBytesToMegabytes(filesSize)).ToString("#0.00") + " MB</td><td>Esta é a quantidade de espaço em disco ocupado pelos arquivos na sua lista. </td></tr>"));
this.Controls.Add(new LiteralControl("<tr><td>Tamanho total das versões.</td><td>" + (ConvertBytesToMegabytes(versionsSize)).ToString("#0.00") + " MB</td><td>Esta é a quantidade de espaço em disco ocupado pelas versões em sua lista</td></tr>"));
this.Controls.Add(new LiteralControl("<tr><td>Tamanho total das pastas</td><td>" + ((ConvertBytesToMegabytes(versionsSize) + ConvertBytesToMegabytes(filesSize))).ToString("#0.00") + " MB</td><td>Esta é a quantidade total de espaço em disco ocupado pela lista.</td></tr>"));
this.Controls.Add(new LiteralControl("</table>"));
Conclusão
Mais e mais companhias utilizam o SharePoint principalmente para o compartilhamento de arquivos. É por isso que é importante compreender a lista e popular ela de maneira eficiente. Espero que estes relatórios possam ajudá-los a tomar melhores decisões sobre seu uso no SharePoint.