Posts recientes

El contenido de este blog tiene una licencia Creative Commons.
Creative Commons

Error al cargar y ejecutar el receptor de eventos. “<nativehr>0x8007047e</nativehr>”

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>

Autor: Anna Vilalta Gili
Publicado: 25/01/2012  10:40 | 0  Comentarios | 0  Enlaces a este post

Solucionar problema con los diseños de página al actualizar o subir una backup de otra solución o granja

En determinadas ocasiones, cuando actualizamos nuestros desarrollos en máquinas o entornos de producción, nos damos cuenta que en algunas páginas de publicación, cuando las queremos editar, apuntan hacía un Page Layout o diseño de página que apunta hacía una URL del entorno de desarrollo.

No tiene fácil solución, ya que desde el entorno de SharePoint o desde el Designer no se pueden actualizar las referencias.

Por tanto, la única solución fácil y viable es actualizarla a través de código.

A continuación os adjunto una muestra del código que deberéis de aplicar en el caso que queráis aplicar o corregir el diseño de página de una página concreta.

string SiteUrl = "http://serverUrl";
string PageName = "MyPage.aspx";
string PageLayoutURL = "/_catalogs/masterpage/WelcomeLinks.aspx";

using (SPSite site = new SPSite(SiteUrl))
{ 
	using (SPWeb web = site.OpenWeb())  
	{
		WL(web.Title);
		
		PublishingWeb spPubWeb = PublishingWeb.GetPublishingWeb(web);    
		SPList pages = spPubWeb.PagesList;   
		
		foreach (SPListItem item in pages.Items)    
		{
			PublishingPage pubPage = PublishingPage.GetPublishingPage(item);       
			SPFieldUrlValue url = new SPFieldUrlValue(pubPage.ListItem[FieldId.PageLayout].ToString());
			
			if(pubPage.Name==PageName)
			{
				WL(pubPage.Name);
				WL(url.Url.ToString());
				
				SPFieldUrlValue newurl = new SPFieldUrlValue(PageLayoutURL);          
			
			Console.WriteLine(pubPage.Name);          
			
			pubPage.CheckOut();          
			
			pubPage.ListItem[FieldId.PageLayout] = newurl;          
			
			pubPage.ListItem.UpdateOverwriteVersion();           
			
			pubPage.ListItem.File.CheckIn("Fixed URL to page layout.", SPCheckinType.MajorCheckIn);   
			}
			
			
			
		}
	}
}
Autor: Javier Tirado Pampín
Publicado: 23/01/2012  17:18 | 0  Comentarios | 0  Enlaces a este post

Desarrollo de aplicaciones móviles multiplataforma

Las tendencias tecnológicas actuales están dejando tres claros competidores en el mercado de las plataformas móviles: iOS, Android, RIM (Blackberry) y más recientemente Windows Phone. El desarrollo de una aplicación multiplataforma implica la inversión multiplicada de esfuerzos para conseguir un instalable para cada una de estas tecnologías. Es por ello que se está produciendo una clara apuesta hacía la utilización de tecnologías homogéneas que permitan disponer de la diversas versiones de una aplicación con un único desarrollo.

En esta línea han aparecido diversos frameworks de desarrollo y herramientas. HTML5 abandera este movimiento, y se erige como punta de lanza de la base tecnológica para las aplicaciones móviles desde hoy mismo. La nueva versión de HTML permite generar aplicaciones que pueden ser entendidas por todas las plataformas y que nos aisla como desarrolladores de los detalles de cada plataforma (Java, .NET, ObjectiveC…). Desarrollamos en HTML5 una única aplicación, haciendo uso de otros frameworks, como JQuery y JQuery Mobile, que nos permite reproducir el comportamiento de una aplicación típica móbil en cuanto al aspecto visual mediante HTML y Javascript. Para la comunicación con servidor podemos hacer uso de servicios web, traspasando datos en formato SOAP o JSON. Con esta mezcla tecnológica conseguimos aplicaciones web que funcionan en cualquier plataforma, pero la usabilidad no es óptima ya que el usuario nota los tiempos de espera en las transiciones entre pantallas, además de requerir conexión permanente con el servidor web.

Para solucionar este último escollo y conseguir aplicaciones realmente nativas, han aparecido utilidades que nos permiten obtener aplicaciones nativas a partir de nuestros desarrollos en HTML5. Una de ellas, una de las más extendidas y conocidas, PhoneGap, nos permite compilar nuestra aplicación y obtener paquetes instalables nativos para cada plataforma.

image

Deberemos ver hacía dónde evoluciona todo ello, pero parece claro que para una gran cantidad de aplicaciones comerciales móviles han pasado los tiempos en que se debía desarrollar para plataformas específicas.

Autor: Rubén Claramunt Vicente
Publicado: 16/01/2012  22:59 | 0  Comentarios | 0  Enlaces a este post