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...

Foi útil?

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"); ;
            }
        }
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a sharepoint.stackexchange
scroll top