Cambiar la página de inicio de SharePoint no funciona hasta que hago clic en el título del sitio

sharepoint.stackexchange https://sharepoint.stackexchange.com//questions/59021

  •  10-12-2019
  •  | 
  •  

Pregunta

Estoy instalando un Sub-siton en SharePoint 2010 usando PowerShell.Para todos los subsitios, hemos configurado SharePoint para iniciar una página predeterminada de Sub-sitones en particular como Página de destino después de iniciar sesión.Para mi caso de uso, quiero anular este comportamiento al iniciar una página que se está creando como parte de una función utilizada en este Sub-Sitio.Estoy apiñado por lo tanto mediante el uso de un código siguiente en la función eventreciever.cs:

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);
}

El código no funciona hasta que haga clic en el título del sitio (en la parte superior izquierda), o habilite y luego vuelva a habilitar la función.Parece que el código necesita algún tipo de evento de activación.¿Estoy haciendo algo mal?Por favor ayuda ...

¿Fue útil?

Solución

Este código en su función, el receptor de eventos se ejecutará después de la finalización de la activación de su función.

de MSDN Método SPFEATORENTECEIVER.featureactivado :

Maneja el evento que se eleva después de que se activa una característica.

y

Este método se llama cuando se activa una característica.

Si desea configurar arbitrariamente su página de bienvenida, podría usar el usuario 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"

Otros consejos

Otra alternativa sería esperar intencionalmente hasta que el usuario llegue al sitio y use un control inyectado en el cabezal de página adicional que establece el valor, redirige al usuario y se desactiva.

Archivo 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 detrás para inyector.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 bajo: CC-BY-SA con atribución
scroll top