Necesitaba que al crear cualquier site todas sus páginas tuviesen un diseño de página customizado.
Aunque en la configuración del site padre tenía configurado que tan sólo podían crearse páginas con el diseño de página en concreto, cuando se creaba el site, la página por defecto (Pages/default.aspx) seguía teniendo el diseño de página “WelcomeLinks”.
Para cambiarlo creé un EventReceiver sobreescribiendo el WebProvisioned (que se dispara una vez que el site se ha creado). Dentro del método, cambiaba el PageLayout y también su ContentType también customizado (añadiéndolo también a la biblioteca de Páginas, ya que no existía por defecto).
Éste es el código del event receiver:
SPWeb w = properties.Web;
PublishingWeb curPubWeb = PublishingWeb.GetPublishingWeb(properties.Web);
SPSite s = properties.Web.Site;
SPContentType contentType = s.RootWeb.ContentTypes["PaginaInvestigador"];
SPList spList = curPubWeb.PagesList;
PublishingPageCollection ppc = curPubWeb.GetPublishingPages();
foreach (PageLayout curLayout in curPubWeb.GetAvailablePageLayouts())
{
if (ppc.Count > 0)
{
PublishingPage curPage = ppc[0];
curPage.CheckOut();
curPage.Layout = curLayout;
curPage.ListItem["ContentTypeId"] = curLayout.AssociatedContentType.Id;
curPage.ListItem.Update();
curPage.Update();
curPage.CheckIn("");
}
}
Para probarlo creaba un nuevo sitio. Cuando lo había creado intentaba editar la página default para comprobar que tanto el diseño de página como el tipo de contenido se habían cambiado correctamente y me daba el siguiente error:
Error al cargar y ejecutar el receptor de eventos Client.Web.SharePointApp.ResearcherSiteEventReceiver.ResearcherSiteEventReceiver en Client.Web.SharePointApp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d3b00d8781e2eddd. A continuación se incluye información adicional.
: <nativehr>0x8007047e</nativehr><nativestack></nativestack>
Lo solucioné registrando el event receiver como síncrono de la siguiente forma:
En el fichero Elements.xml, añadir dentro de <Receiver>:
<Synchronization>Synchronous</Synchronization>