Alterar a página inicial do SharePoint não funciona até clicar no título do site
-
10-12-2019 - |
Pergunta
Estou instalando um subsite no Sharepoint 2010 usando o PowerShell.Para todos os subsites, configuramos o sharepoint para lançar a página default.aspx de um subsite específico como página inicial após o login.Para meu caso de uso, desejo substituir esse comportamento iniciando uma página que está sendo criada como parte de um recurso usado neste subsite.Estou fazendo isso usando o seguinte código no EventReciever.cs do recurso:
public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
using (var currentWeb = properties.Feature.Parent as SPWeb)
{
if (currentWeb != null)
{
var root = currentWeb.RootFolder;
if (root != null)
{
root.WelcomePage = @"Management\Pages\LandingPage.aspx";
root.Update();
}
//this.AddNavigationNodes(currentWeb);
}
}
base.FeatureActivated(properties);
}
O código não funciona até que eu clique no título do site (no canto superior esquerdo) ou ative e reative o recurso.Parece que o código precisa de algum tipo de evento desencadeador.Estou fazendo algo errado?Por favor ajude...
Solução
Este código no seu receptor de evento de recurso será executado após a conclusão da ativação do seu recurso.
Do MSDN Método SPFeatureReceiver.FeatureActivated:
Lida com o evento gerado após a ativação de um recurso.
e
Este método é chamado quando um recurso é ativado.
Se quiser definir arbitrariamente sua página de boas-vindas, você pode usar o PowerShell como:
$site = Get-SPSite -Identity "http://server:port/";
$web = $site.OpenWeb("WebName");
$web.RootFolder.WelcomePage = "/Path/Page.aspx";
$web.Update();
$web.Dispose();
$site.Dipose();
Write-Host "Successfully updated the Welcome Page"
Outras dicas
Outra alternativa seria esperar intencionalmente até que o usuário acesse o site e usar um controle injetado no cabeçalho da página adicional que define o valor, redireciona o usuário e se desativa.
Arquivo de elementos:
<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<Control
Id="AdditionalPageHead"
Sequence="1000"
ControlSrc="~/_controltemplates/MySites.Branding/WebPartInjector.ascx">
</Control>
</Elements>
código por trás para Injector.ascx:
public partial class WebPartInjector : UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
using (new SPMonitoredScope("MySites.Branding WebPartInjector Page_Load"))
{
SPWeb curWeb = SPContext.Current.Web;
try
{
//*******DO STUFF HERE********
SPSecurity.RunWithElevatedPrivileges(delegate()
{
try
{
curWeb.Features.Remove(new Guid("This-is-where-you-put-the-guid-of-the-feature"));
}
catch
{
//swallowing deactivation of self error
}
});
curWeb.AllowUnsafeUpdates = false;
Context.Response.Redirect(curWeb.Url);
}
catch (Exception g)
{
Logger.LogError(g, "WebPartInjector"); ;
}
}
}
}