Adicionar WP na criação de MySite

Olá Pessoal!

Vamos ao problema da vez. Minha necessidade era colocar uma WP no MySite toda vez que ele fosse criado. Comecei a pesquisar como resolver o problema.

Alterar o modelo direto nos arquivos de sistema não é uma opção, pois ele deixa o Sharepoint em modo não suportado, além do risco de perder a modificação no caso de uma atualização. Dada a premissa vi que a minha única saída era usar o Feature Stapling.

De modo resumido o Feature Stapling permite que eu associe uma feature a um determinado modelo de site. Com isso pensei no seguinte: crio uma feature que abre a página e adiciona uma nova WP onde eu quero e depois crio uma Feature Stapling e jogo isso no modelo do MySite. Então vamos lá. Primeiro criei a feature:

<Feature
    Id="CCFCF585-E187-4b81-87F6-028F0F1D2753"
  Title="Feature"
  Scope="Web"
    Hidden="FALSE"
  ReceiverAssembly="MeuAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=0301ba6f5945c5ab"
  ReceiverClass="Minha Classe"
  xmlns="http://schemas.microsoft.com/sharepoint/">
  <ElementManifests>
    <ElementFile Location="MinhaWP.webpart"/>
    <ElementManifest Location="elements.xml"/>
  </ElementManifests>
</Feature>

Nela Atribui um ReceiverAssembly e um ReceiverClass onde eu programei o comportamento para adicionar a minha WP na página, no momento da ativação:

SPWeb oWeb = properties.Feature.Parent as SPWeb;
SPFile file = oWeb.GetFile("default.aspx");
if (file.Exists) {
    oWeb.Title = "The File Exists!";
    SPLimitedWebPartManager oWPManager = oWeb.GetLimitedWebPartManager("http://meusite.bancotiopatinhas.com.br/personal/asdrubal/default.aspx", System.Web.UI.WebControls.WebParts.PersonalizationScope.Shared); MyColleagues oWP = new MyColleagues();
    oWPManager.AddWebPart(oWP, "Middle Right Zone", 0);
}
oWeb.Update(); 

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, “Courier New”, courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

`

Depois disso criei o pacote normalmente e fiz o deploy. Teste a ativação e funcionou perfeitamente. O próximo passo foi criar o Feature Stapling:

Arquivo feature.xml:

<Feature
    Id="{96520B84-3287-46e5-AD4A-768DD4691D23}"
  Title="Stapler de criação do My Site"
  Scope="Farm"
  xmlns="http://schemas.microsoft.com/sharepoint/" >
  <ElementManifests>
    <ElementManifest Location="elements.xml" />
  </ElementManifests>
</Feature>

Arquivo Elements.xml:

<Elements xmlns="http://schemas.microsoft.com/sharepoint/" >
  <FeatureSiteTemplateAssociation Id="CCFCF585-E187-4b81-87F6-028F0F1D2753" TemplateName="SPSPERS#0"/>
</Elements>

Note que o Id do arquivo Elements.xml do Feature Stapling é o mesmo Id da Feature que eu criei acima. Achando que tinha me livrado fácil eu fiz o deploy, criei um novo MySite e… nada! Deu erro!

Debugando o problema (horas a mais e cabelos a menos) descobri que no momento da ativação da Feature a página default.aspx não havia sido criada ainda, então eu não tinha como alterar. Pesquisando no Google descobri que várias pessoas estavam com o mesmo problema.

Mais horas e menos cabelos depois fiz o seguinte. Peguei uma página completa com a minha WP configurada, copiei para o meu projeto, e provisionei para jogar na raiz do site na ativação da feature. Segue a modificação:

<Feature
    Id="CCFCF585-E187-4b81-87F6-028F0F1D2753"
  Title="Feature"
  Scope="Web"
    Hidden="FALSE"
  ReceiverAssembly="MeuAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=0301ba6f5945c5ab"
  ReceiverClass="Minha Classe"
  xmlns="http://schemas.microsoft.com/sharepoint/">
  <ElementManifests>
    <ElementFile Location="MinhaWP.webpart"/>
    <ElementFile Location="default.aspx"/>
    <ElementManifest Location="elements.xml"/>
  </ElementManifests>
</Feature>

e no elements:

<Elements Id="37411303-55FF-456b-84DA-C3D64A86A8F8" xmlns="http://schemas.microsoft.com/sharepoint/" >
  <Module Name="WebParts" List="113" Url="_catalogs/wp">
    <File Path="MinhaWP.webpart" Url="MinhaWP.webpart" Type="GhostableInLibrary">
      <Property Name="Group" Value="Minhas WPs"/>
    </File>
  </Module>
  <Module Name="DefaultWeb">
    <File Url="default.aspx"></File>
  </Module>
</Elements>

Funcionou em partes. Eu notei que dessa forma ele duplicou todas as WPs da página, exceto a minha.

Solução: criei a página com toda a estrutura e sem nenhuma WP exceto a minha (mas com todo o resto, WPs zones e etc.). E voilá! Funcionou! Está é uma saída boa para este problema!

 

Até,

  1. Deixe um comentário

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Sair / Alterar )

Imagem do Twitter

You are commenting using your Twitter account. Sair / Alterar )

Foto do Facebook

You are commenting using your Facebook account. Sair / Alterar )

Connecting to %s

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.