Mostrando postagens com marcador Object Model. Mostrar todas as postagens
Mostrando postagens com marcador Object Model. Mostrar todas as postagens

terça-feira, 27 de maio de 2008

Collection was modified; enumeration operation may not execute

Olá Amigos,

Tenho duas listas relacionadas (tópicos,respostas), preciso remover todas as respostas relacionadas a um determinado tópico.

O primeiro código que vem a cabeça é fazer um for each e deletar item por item.

Como no exemplo abaixo:

SPQuery q = new SPQuery();
q.Query = "<Where><Eq><FieldRef Name='Topico' /><Value Type='Lookup'>" + sTopico + "</Value></Eq></Where>";

SPList listRespostas = SPContext.Current.Web.Lists["Respostas"];
SPListItemCollection itensTopicos = listRespostas.GetItems(q);

foreach (SPListItem itemResposta in itensTopicosFake)
{
itemResposta.Delete();
}

Porém quando executamos este código, nos deparamos com o seguinte erro.

Collection was modified; enumeration operation may not execute

Este erro acontece porque a collection que eu estou usando no for each, está sendo modificada dentro dele mesmo.

Para resolver este problema substitui o for each pelo while abaixo.

while (itensTopicos.Count > 0)
itensTopicos[0].Delete();

Abraços,
Leonardo

segunda-feira, 8 de outubro de 2007

Passeio pelo Object Modelo Sharepoint - Part I

Olá Amigos,

Apartir de hoje escreverei uma serie de posts sobre o Object Model do sharepoint.
Mas afinal, oque é object model?
É a Arquitetura de programação do WSS, através dele conseguimos programaticamente manipular totalmente a estrutura do sharepoint.

SPFarm

Está no topo da hierarquia do object model.
Cada objeto SPFarm tem uma coleção de servidores associados a ele representados pelo objeto SPServerCollection object.
Você pode usar uma estrutura de repetição para iterar em cada servidor através do objeto SPServerCollection.

SPFarm myFarm = SPFarm.Local;
SPServerCollection myServerCollection = myFarm.Servers;
foreach (SPServer myServer in myServerCollection){
    //adiciona o código para executar a ação
}

SPWebApplication

Representa um IIS load-balanced Web application.
No WSS, aplicações web são representadas pela classe SPWebApplication.
Cada objeto SPWebApplication tem uma coleção de coleções de site associadas a ele e que são representados pelo objeto SPSiteCollection.
Você pode usar uma estrutura de repetição para interar com cada coleção de site no objeto SPSiteCollection.
Coleções de site individuais são representadas pelos objetos SPSite.

SPSite mySiteCollection =   new SPSite("site_collection_URL");
SPWebApplication myWebApp = mySiteCollection.WebApplication; SPSiteCollection mySiteCollections =  myWebApp.Sites;
foreach (SPSite siteCollection in mySiteCollections){
    //executa a ação na coleção de sites
}

Por hora é isso =]

Abraços,
Leonardo