Devido a problemas de Acessibilidade Web encontrados num projecto recente desenvolvido em tecnologia Sharepoint, decidiu-se construir uma pequena aplicação com o objectivo de automatizar a localização e substituição de tags html obsoletas de acordo com as normas de acessibilidade a cumprir.
Estes atributos são gerados pelo Sharepoint, aquando a inserção/edição de conteúdos em controlos do tipo RichHtmlField.
Estes atributos são gerados pelo Sharepoint, aquando a inserção/edição de conteúdos em controlos do tipo RichHtmlField.

Com este controlo, o utilizador tem a possibilidade de formatar o conteúdo que insere e, após a publicação da página, o html que é gerado pelo Sharepoint nem sempre cumpre as normas de acessibilidade estabelecidas pelo W3C, entidade que define as directivas para a acessibilidade do conteúdo da Web.
Neste caso específico, poderíamos, por exemplo, pesquisar num site (e nos seus sites “filhos”) de acordo com o URL que o utilizador indicar e substituir os parâmetros indicados em Localizar pelos de Substituir, como é ilustrado na imagem seguinte.
/******************************Abrir o site indicado no campo URL*******************************/
using (SPSite site = new SPSite(tbUrl.Text))
{
SPWeb web = null;
try
{
SPContext context = SPContext.GetContext(site.RootWeb);
SPSecurity.RunWithElevatedPrivileges(delegate()
{
web = context.Site.OpenWeb(tbUrl.Text);
});
Localizar(web);
}
finally
{
if (web != null)
web.Dispose();
}
/***********************Localizar o que está indicado no campo Localizar*********************/
private void Localizar(SPWeb web)
{
try
{
SPQuery query = new SPQuery();
//Pesquisa no Field CorpoArtigoGenerico substituindo os caracteres <> pelo seu valor hexadecimal
query.Query = "<Where><And><Contains><FieldRef Name='CorpoArtigoGenerico' /><Value Type='HTML'>" + tbLocalizar.Text.Replace("<", "<").Replace(">", ">") + @"</Value></Contains><IsNotNull><FieldRef Name='TituloArtigoGenerico'/></IsNotNull></And></Where>";
SPListItemCollection listItem = web.Lists["Páginas"].GetItems(query);
if (listItem.Count != 0)
{
Substituir(listItem, web);
}
//se nao retornar resultados ou não tiver encontrado paginas do tipo artigos genericos
else
{
MessageBox.Show("No site " + web.ToString() + " não foi encontrado o termo pesquisado");
}
}
catch
{
MessageBox.Show("Erro");
}
//para cada site filho vai ser feita a pesquisa e substituiçao
for (int i = 0; i < web.Webs.Count; ++i)
{
Localizar(web.Webs[i]);
}
}
Para essa substituição acontecer, são percorridos os passos normais de uma edição de página em Sharepoint: a saída da página, a entrada da página e a publicação da mesma.
/***Editar a página, substituir pelo termo indicado no campo Substituir e Publicar a página******/
private void Substituir(SPListItemCollection listItem, SPWeb web)
{
foreach (SPListItem li in listItem)
{
if (PublishingPage.IsPublishingPage(li))
{
PublishingPage page = PublishingPage.GetPublishingPage(li);
try
{
page.ListItem.File.CheckOut();
string corpoAntigo = page.ListItem["CorpoArtigoGenerico"].ToString();
string corpoNovo = corpoAntigo.Replace(tbLocalizar.Text, tbSubstituir.Text);
//faz a substituiçao do texto antigo pelo novo
page.ListItem["CorpoArtigoGenerico"] = corpoNovo;
//faz o update, checkin, publish e aprove da pagina
page.Update();
page.ListItem.File.CheckIn("Actualizado pela Aplicacao Find&Replace");
page.ListItem.File.Publish("Publicado pela Aplicacao Find&Replace");
page.ListItem.File.Approve("Aprovado pela Aplicacao Find&Replace");
}
catch
{
MessageBox.Show("Houve um problema na saida do ficheiro");
}
}
}
MessageBox.Show("No site " + web.ToString() + " foram feitas alteraçoes");
}
Mais uma vez, dando como exemplo este caso, estas substituições estavam restritas a campos específicos de determinados esquemas de página. Por exemplo, a pesquisa seria feita para encontrar/substituir os parâmetros em causa apenas no campo Descrição do esquema de página Artigo.
Em suma, esta aplicação está construída com um objectivo muito específico mas pode servir como base para uma ideia com os mesmos propósitos.
Sem comentários:
Enviar um comentário