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é,