SharePoint 4 Developers

Guia de referência adicional em desenvolvimento .NET / SharePoint

SocialCommentControl - html5 bug

Este post mostra o fix para fazer o controle SocialCommentControl funcionar com Html5. No SP2013 este controle foi descontinuado (deprecated), o que explica o porquê de nada ter sido feito ao controle. Veja como corrigir o bug.

Oi pessoal,

Bom estar de volta falando sobre minhas experiências com SharePoint 2013. Já faz um tempinho desde meu último post, dessa vez estou postando sobre um fix para fazer o controle SocialCommentControl funcionar com Html5.

No SP2013 este controle foi descontinuado (deprecated), o que explica o porquê de nada ter sido feito ao controle. Ao adicioná-lo a uma page layout o markup quebra.

Nesse post estou falando desse controle, mas se você está usando SocialCommentWebpart o comportamento é o mesmo, pois ele empacota o controle com propriedades da webpart.

Googling não ajudou muito, então decidi fazer engenharia reversa dos assemblies SharePoint e ver a implementação. O problema está na html div tag. Com Html 5 self-closing tags não funcionam, e esse controle utiliza esse tipo de implementação, veja abaixo:

  1. protected override void CreateChildControls()
  2. {
  3.     base.CreateChildControls();
  4.     if (!this.IsUPAEnabled)
  5.     {
  6.         string text = SPHttpUtility.HtmlEncode(StringResourceManager.GetString(LocStringId.SocialComment_NeedAuthenticatedMessage));
  7.         text = string.Format(CultureInfo.InvariantCulture, "<span>{0}</span>", new object[]
  8.         {
  9.             text
  10.         });
  11.         this.Controls.Add(new LiteralControl(text));
  12.         return;
  13.     }
  14.     this.Controls.Add(new LiteralControl("<div class=\"ms-socialCommentContents\" id=\"" + this.RootElementId + "\">"));
  15.     if (this.IsShowNewArea)
  16.     {
  17.         this.RenderNewArea();
  18.     }
  19.     this.RenderEditArea();
  20.     this.RenderErrorArea();
  21.     this.RenderPagingControlContainer();
  22.     this.Controls.Add(new LiteralControl("<div id=\"" + this.ClientID + "_PlaceHolder\" />"));
  23.     this.Controls.Add(new LiteralControl("</div>"));
  24. }
A linha 14 mostra o problema. A tag div é self-closed, o que não funciona com html 5.

A solução para esse caso é simples. Pelo fato de não haver uma closing tag, adicionando-a o problema é eliminado.

Crie uma nova classe, faça a herança de SocialCommentControl e override o método CreateChildControls() adicionando a closing tag. Conforme exibido abaixo:

  1. public class SocialCommentHtml5Control : SocialCommentControl
  2.     {
  3.         protected override void CreateChildControls()
  4.         {
  5.             base.CreateChildControls();
  6.             this.Controls.Add((Control)new LiteralControl("</div>"));
  7.         }
  8.     }

É isso. Adicione o controle a sua page layout e utilize no SP2013.

Espero que isso ajude.

[]’s,

Referência:
Microsoft Forum

Clique aqui para ler o mesmo conteúdo em Inglês.

Channel 9 Videos - TechEd New Zealand 2013

TechEd &#233; um evento t&#233;cnico da Microsoft com foco educacional e de networking para qualquer profissional de tecnologia interessado em aprender, se atualizar e explorar a vasta gama de tecnologias Microsoft, atuais e futuras, incluindo ferramentas, plataformas e servi&#231;os.

Oi pessoal,

Se você perdeu a oportunidade de ver o TechEd 2013 na Nova Zelândia, você pode bisbilhotar no Channel 9.

 

Todas as sessões estão disponíveis aqui:

http://channel9.msdn.com/Events/TechEd/NewZealand/2013

[]'s,

Marcel

Clique aqui para ler o mesmo conteúdo em Inglês.

Renomeando os databases do Search service application no SharePoint 2013

Se voc&#234; estiver utilizando esse artigo http://technet.microsoft.com/pt-br/library/jj219654.aspx para renomear search service application databases, preste aten&#231;&#227;o que a seguinte abordagem n&#227;o funciona para alguns databases. Segue aqui o workaround.

Oi pessoal,

Se você estiver utilizando esse artigo: http://technet.microsoft.com/pt-br/library/jj219654.aspxpara renomear search service application databases, preste atenção que a seguinte abordagem não funciona:

 
Para renomear os bancos de dados usando o SQL Server Management Studio
  1. No Management Studio, conecte-se à instância de fonte do SQL Server e expanda o nó Banco de Dados.

  2. Clique com o botão direito no banco de dados do aplicativo de serviço de Pesquisa que deseja renomear, clique em Renomear e digite o novo nome. Repita essa etapa para cada banco de dados que deseja renomear.

OBS: Isso não é correto se aplicado a todos os databases!

Essa abordagem só funciona com o AnalyticsReporting database!

Aqui está a parte crítica que não é explicada no artigo:

Se você quiser renomear os databases Crawl e Links, faça o backup de cada um deles e então faça o restore com os novos databases renomeados.

Então prossiga com o artigo. Preste atenção que existem erros de digitação com os trechos de código fornecidos, conforme já mencionado aqui.

Espero que isso ajude,

[]'s,

Marcel Medina

Clique aqui para ler o mesmo conteúdo em Inglês.