O Cenário
Recentemente precisei fazer manutenção em uma webpart que mostrava a famosa frase
Estamos a X dias sem acidente de trabalho, nosso record é de Y dias.
Tão simples que chega a dar preguiça de fazer certo? Nem tanto!
Essa webpart deveria ter duas propriedades customizadas (Custom Properties) uma onde seria informada a Data do Ultimo Acidente e a outra onde seria informado o record atual de dias sem acidente. Aqui esta a webpart
O problema
Pense, a partir do dia em que o record fosse batido, o administrador do site deveria, todos os dias, alterar a webpart e incremetar o valor do record, então começei a pesquisar como se altera o valor de uma propriedade via código, descobri a a API do Sharepoint não fornece uma meio “oficial” de se fazer isso.
A solução
A solução? bem, ela não é nada elegante, olha só:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
private void SetRecordDiasSemAcidenteTrabalho(int dias) { SPWeb web = SPContext.Current.Web; string url = HttpContext.Current.Request.Url.AbsoluteUri; SPFile newPage = web.GetFile(url); SPLimitedWebPartManager mgr = newPage.GetLimitedWebPartManager(PersonalizationScope.Shared); foreach (System.Web.UI.WebControls.WebParts.WebPart webPart in mgr.WebParts) { if (webPart is WP_ContadorAcidenteTrabalho) { WP_ContadorAcidenteTrabalho wp1 = webPart as WP_ContadorAcidenteTrabalho; wp1.RecordDiasSemAcidenteTrabalho = dias; mgr.SaveChanges(webPart); } } } |
Não é elegante mas funciona muito bem.