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

Imprimir directamente una imagen. Quitar el asistente de impresión de fotografías de windows.

En el último post hablé de cómo mandar varios documentos a una impresora pdf para terminar imprimiento un sólo documento que los contuviera todos.

Me encontré que cuando mandaba una imagen y PDFCreator la queria imprimir se abría siempre el cuadro de diálogo del asistente de impresión de fotografías de windows. Intenté cambiar el programa por defecto según la extensión, etc. pero nada dió resultado.

La solución: entrar en el registro de windows (regedit) y seguir los siguientes pasos:

1. Ir a: HKEY_CLASSES_ROOT\SystemFileAssociations\image\shell\print\

2. Cambiar el nombre de la carpeta “DropTarget” a “DropTarget.old”.

image

3. Dentro de la carpeta “command” cambiar el valor por la cadena siguiente:

"%SystemRoot%\System32\rundll32.exe" "%SystemRoot%\System32\shimgvw.dll",ImageView_PrintTo /pt "%1" "PDFCreator" "" ""

Con esto debería funcionar!

Autor: Anna Vilalta Gili
Publicado: 20/12/2011  18:32 | 0  Comentarios | 0  Enlaces a este post

PDFCreator no ordena correctamente los documentos

Para generar un pdf que contenga varios documentos se puede utilizar la impresora PDFCreator. Añadiendo la referencia a vuestro proyecto podréis enviar varios documentos a la impresora y cuando deseéis hacer una impresión que recoja todo lo que tenga en la cola y lo plasme en un sólo pdf.

Creé una función para ir añadiendo dichos documentos, que tenía el siguiente aspecto:

public void AddPrintJob(string FileName)
{
       jobs++;
       creator.cPrintFile(FileName);
}

Si os encontráis con que mandáis varios documentos seguidos y luego, en el pdf final, os aparecen en distinto orden al que los habéis mandado, añadid el siguiente código a la función anterior:

public void AddPrintJob(string FileName)
{
       jobs++;
       creator.cPrintFile(FileName);

       while (creator.cCountOfPrintjobs != jobs)
       {
       }
}

El bucle simplemente esperará hasta que la impresora pdf (en este caso “creator”) haya añadido el documento a la cola de impresión.

Autor: Anna Vilalta Gili
Publicado: 13/12/2011  18:16 | 0  Comentarios | 0  Enlaces a este post

URLs incorrectas en las alertas de SharePoint

Al realizar una migración de un sitio de SharePoint a otro servidor y DNS nos hemos topado con que algunas alertas de estan enviando con el antiguo nombre de servidor. Ello es debido a que el antiguo nombre ya no forma parte de las rutas de acceso alternativas de la web, con lo que SharePoint no se toma la molestia de realizar ningún cambio

Para corregir este problema basta con pasar un sencillo script de PowerShell que recorrerá todas las webs del sitio en cuestión y actualizará las URLs de sitio.

get-spsite -webapplication http://xxxxx -limit all | get-spweb -limit all | foreach-object{$_.alerts | foreach-object{$_.properties["siteurl"] = "http://xxxxx"; $_.update()}}
Autor: Rubén Claramunt Vicente
Publicado: 19/10/2011  10:24 | 0  Comentarios | 0  Enlaces a este post

Publicación de portales web públicos en SharePoint 2010 para plataformas móviles

SharePoint 2010 dispone de vistas especiales pensadas para dispositivos móviles, más reducidas en tamaño y más dirigidas a la gestión de la información almacenada en las bibliotecas y listas que en las propias páginas de publicación. Al desplegar un portal público nos podemos encontrar la sorpresa que el mismo portal no es visible en según que dispositivos móviles, precisamente por la existencia de estas vistas para móviles.

La solución más sencilla, a no ser que queramos desarrollar un aspecto distinto para dispositivos reducidos, es forzar la vista estándar también para estos dispositivos. Para ello debe retocarse un fichero de configuración en el directorio App_Browsers del directorio virtual de IIS (p.e. \inetpub\wwwroot\wss\VirtualDirectories\80App_Browsers\compat.browser). El fichero compat.browser es el responsable de distinguir los distintos dispositivos que se conectan a la web y determinar ciertas características de visualización. Si cambiamos el atributo IsMobileDevice a false de este fichero para cada una de las entradas forzaremos a que se visualice la web siempre en el mismo formato sea cual sea el dispositivo.

Autor: Rubén Claramunt Vicente
Publicado: 10/10/2011  14:20 | 0  Comentarios | 0  Enlaces a este post

SharePoint pide credenciales al descargar documento con usuario anónimo

Seguro que os ha pasado que en las webs públicas que habéis desarrollado en SharePoint 2007 o 2010 y que con acceso anónimo nos pedían credenciales al intentar descargar cualquier documento o abrir cualquier documento Office.

Pues parece que tiene fácil solución.

En primer lugar, hemos de ir a la administración central de SharePoint 2010 – > Administración de aplicaciones web – Seleccionamos nuestra aplicación y pinchamos sobre Proveedores de autenticación.

Seleccionamos la zona donde queremos que no nos pida los credenciales y seleccionamos la opción de “Integración con clientes” tal como se muestra en la siguiente imagen.

image

Ya por último, debemos dirigirnos al IIS para denegar dos verbos HTTP. Os explico los pasos.

En primer lugar, pinchamos sobre la aplicación web de SharePoint dentro del IIS 7 –> Filtrado de solicitudes –> Verbos HTTP

En este momento hemos de denegar los verbos OPTIONS y PROPFIND

image

Con esto no deberíais de tener el mas mínimo problema.

Espero que os sirva de utilidad

Autor: Javier Tirado Pampín
Publicado: 07/10/2011  11:57 | 0  Comentarios | 0  Enlaces a este post

Depuración lenta en Firefox

Si os ha ocurrido esto alguna vez y queremos corregir este problema, debemos abrir dicho navegador y teclear en la barra de direcciones “about:config”.

A continuación, en el filtro, teclead “ipv6”, lo que provocará que en la lista de parámetros del sistema se quede únicamente el que nos permitirá desactivar la resolución de nombres, llamado network.dns.disableIPv6. Pues bien, en ese punto, simplemente hay que modificar su valor a true.

Autor: Anna Vilalta Gili
Publicado: 20/09/2011  10:47 | 0  Comentarios | 0  Enlaces a este post

Academia Virtual de Microsoft

Hace un par de días me llegó un e-mail de Microsoft anunciándome que “aprovechase al máximo las oportunidades de Cloud Computing con Microsoft Virtual Academy. Entré a probar, más que nada por curiosidad, y me encontré una especie de portal de formación con bastantes cursos divididos en lecciones, por ejemplo: Sharepoint 2010, SQL Server 2008 R2, Cloud Computing, etc… Además, después de leer la série de documentos de cada lección puedes pasar un examen evaluando los conocimientos adquiridos.

image

La verdad es que me pareció una idea genial: una forma de aprender en la que cada cuál puede ir a su ritmo. Os dejo el enlace por si os interesa!

http://www.microsoftvirtualacademy.com/Home.aspx

Autor: Anna Vilalta Gili
Publicado: 16/09/2011  10:32 | 0  Comentarios | 0  Enlaces a este post

 Siguiente >>