Jul01

[MOSS]Asociar un event receiver a un ContentType

Tags: MOSS/WSS

 

Los event receivers son una opción muy interesante que dan mucho juego a la hora de desarrollar soluciones de SharePoint.

Básicamente son eventos que se pueden asociar a elementos de listas o documentos de bibliotecas de documentos, tareas de listados de tareas,a sitios… en el momento de creación , borrado, modificación….

El objeto que implementa esta funcionalidad es SPEventReceiver del que heredaremos a la hora de declarar la clase que determine dicha funcionalidad.

Para definir la funcionalidad de un event receiver normalmente lo desarrollaremos integrado dentro de una feature, y en el fichero feature.xml vincularemos el código a ejecutar como assembly de la nueva feature.

En la mayoría de las situaciones que se me habían presentado era suficiente con declarar un event receiver asociado a una lista, ya que la problemática que solucionaba estaba circunscrita a dicha lista.

Actualmente me encuentro desarrollando un portal con variaciones y hay múltiples listas de diferentes sitios que debería vincular con el event receiver, tras investigar un rato averigüé que no solamente puede asociarse un event receiver a una lista, elemento o sitio, sino que también puede asociarse a un content type. Independiente de donde esté almacenado la lógica se ejecutará sin tener en cuenta el sitio o lista contenedor, por lo tanto para mi esta era la solución correcta.

Para esto en la feature que despliega este tipo de contenido hay que añadirle un nodo de tipo XmlDocuments, donde definiremos el evento de cada uno de los elementos que asociaremos, pro ejemplo en el siguiente caso el evento se ejecutará cada vez que se añada un nuevo elemento de este tipo de contenido o que se modifique:

 

<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
  <ContentType ID="CONTENT TYPE ID" Name="CONTENT TYPE NAME" Group="Custom" Description="CONTENT TYPE DESCRIPTION" Version="0">
    <FieldRefs>
      <FieldRef ID="FIELD ID" Name="FIELD NAME" />
    </FieldRefs>
   <XmlDocuments>
      <XmlDocument NamespaceURI="
http://schemas.microsoft.com/sharepoint/events">
        <spe:Receivers xmlns:spe="
http://schemas.microsoft.com/sharepoint/events">
          <Receiver>
            <Name>Event Receiver Item added</Name>
            <Type>ItemAdded</Type>
            <SequenceNumber>10000</SequenceNumber>
Assembly>Prueba, Version=1.0.0.0, Culture=neutral, PublicKeyToken=0a26195ff03df1fd</Assembly>
            <Class>Prueba.EventRec</Class>
            <Data></Data>
            <Filter></Filter>
          </Receiver>
          <Receiver>
            <Name> Event Receiver Item updated </Name>
            <Type>ItemUpdated</Type>
            <SequenceNumber>10000</SequenceNumber>
            <Assembly>Prueba, Version=1.0.0.0, Culture=neutral, PublicKeyToken=0a26195ff03df1fd</Assembly>
            <Class>Prueba.EventRec</Class>
            <Data></Data>
            <Filter></Filter>
          </Receiver>
        </spe:Receivers>
      </XmlDocument>
    </XmlDocuments>
  </ContentType>
</Elements>

Y el código que se ejecutaría asociado a cada una de las acciones:

namespace Prueba

{

public class EventRec:SPItemEventReceiver

{

public override void ItemUpdated(SPItemEventProperties properties)

{

base.ItemUpdated(properties);

///Codigo a ejecutar posterior evento update……

}

public override void ItemAdded(SPItemEventProperties properties)

{

base.ItemUpdated(properties);

///Codigo a ejecutar posterior evento add……

}

}}

Publicado: 01-Jul-09 | 0 Comentarios | 0 Enlaces a este post

Jun18

[IE8/VS2005]Problemas al depurar en IE8 con VS2005

Tags: IE8, VS2005

 

En muchos blogs se hacen eco de los problemas derivados de actualizar la versión de Internet Explorer, y los problemas que este causa a la hora de la depuración con Visual Studio 2005.

En resumen se trata de que el Visual Studio no es capaz de “attacharse” automáticamente al proceso del IE8 y hay que hacerlo manualmente. Esto se produce ya que la nueva versión de IE8 incorpora una característica llamada Loosely-Coupled Internet Explorer (LCIE), que básicamente hace que el IE8 se ejecute en múltiples procesos independientes, volviéndolo menos vulnerable a fallos y mejorando su rendimiento:

“Loosely-coupled Internet Explorer (LCIE) is an architectural effort to improve the browser by separating its components and loosening their interdependence; most notably, it is an attempt to isolate the Internet Explorer frame and its tabs into separate processes. In Internet Explorer 8, this isolation brings about improved performance and scalability, as well as more potent methods to recover from problems like disk or system failure.”

Por lo tanto si a la hora de depurar nuestra aplicación web tenemos mas de una pestaña de IE8 abierta el compilador de VS2005 (me imagino que con VS2003 ocurrirá lo mismo) no será capaz de averiguar cual es el proceso asociado para depurar.

Por lo tanto la solución mas evidente es no tener abierto el IE8 antes de depurar nuestra aplicación si bien desde otros blogs apuntan a que realizando una modificación del registro esto también se soluciona:

    1. Open RegEdit
    2. Browse to HKEY_LOCAL_MACHINE -> SOFTWARE -> Microsoft -> Internet Explorer -> Main
    3. Add a DWORD value called TabProcGrowth with a value of 0
    4. Turn off protected mode browsing in IE (Security page of Internet Options) if you are running on Vista or newer.
Publicado: 18-Jun-09 | 0 Comentarios | 0 Enlaces a este post

Jun16

[MOSS] ¿Qué versión de SharePoint está instalada?

Tags: MOSS/WSS

 

Para ver que versión de MOSS o VSS tenemos instalada en la configuración del sitio o “Site Settings” podemos ver el número de versión:

clip_image002

También podemos verlo en la administración central en “Operations”—>”Servers in farm”:

clip_image004

En mi caso es la 12.0.0.6318, siguiendo esta tabla que me he hecho recogiendo datos de sitios como éste:

Service Pack/Hotfix

Versión de MOSS

Office SharePoint Server 2007(RTM)

12.0.0.4518

October public update (2007)

12.0.0.6036

Service Pack 1

12.0.0.6219

Post-SP1 hotfix (KB948945)

12.0.0.6303

Post-SP1 hotfix (KB941274)

12.0.0.6301

Post-SP1 hotfix (KB941422)

12.0.0.6300

Infrastructure Update (KB951695 & KB951297)

12.0.0.6318

August Cumulative Update

12.0.0.6327

October Cumulative Update

12.0.0.6331

December Cumulative Update

12.0.0.6335

February Cumulative Update

12.0.0.6341

Service Pack 2

12.0.0.6420

April Cumulative Update

12.0.0.6504

Es fácil ver que lo último que tengo instalado es el Infraestructure Update.

Hay que tener cuidado con esto de la versión que está instalada, y hacer un poco de seguimiento o te puedes encontrar con cosas como esta:

MOSS December CU 960011 is not available anymore

Publicado: 16-Jun-09 | 0 Comentarios | 0 Enlaces a este post

Jun15

[Heramientas]SysCompare

Tags: Arquitectura

 

Una herramienta muy interésate y que permite comparar el estado de diferentes máquinas, además de mostrar toda la información relativa al hardware, software, actualizaciones…

clip_image002

Normalmente en las implantaciones de MOSS, o de otros productos, es muy importante contar con entornos idénticos, ya que esto evitará errores que por experiencia propia puedo decir que son bastante complicados de identificar.

Pues bien con esta herramienta de una forma sencilla y rápida se pueden ver las diferencias entre distintas máquinas, en esta imagen vemos las diferencias a nivel de sistema operativo entre dos máquinas, también muestra las actualizaciones que están en una y no en otra:

clip_image004

Supongo que esta será una herramienta bastante típica para la gente dedicada a infraestructuras, que no es mi caso, pero aun así me parece de mucha utilidad a la hora de mantener entornos de MOSS, y muy a tener en cuenta a la hora de realizar seguimientos sobre algunas incidencias.

Me imagino que habrá varias herramientas similares, para descargar el SysCompare:

http://www.processlist.com/info/syscompare.html

Publicado: 15-Jun-09 | 1 Comentario | 0 Enlaces a este post

Jun04

[MOSS]Como ocultar la opción de cargar varios documentos

Tags: MOSS/WSS

 

Hay muchas situaciones en las que debido a las exigencias del cliente es necesario eliminar la opción de cargar más de un documento simultáneamente que por defecto implementa MOSS en cualquier librería de documentos:

clip_image002

Es lógico si tenemos en cuenta que aunque el proceso de carga de varios documentos, es bastante mas cómodo cuando se trata de cargar muchos documentos, sin embargo también es el posible punto de partida de inconsistencia en los metadatos de los documentos, ya que al realizar este tipo de carga de datos, los documentos se quedan desprotegidos y no tenemos la necesidad de indicarle ningún metadato a la hora de cargarlo en la biblioteca, por esto en muchos sitios he visto que los clientes prefieren eliminar esta opción y que la carga de documentos se produzca de uno en uno obligando así al usuario a rellenar metadatos, críticos en muchas ocasiones.

En este artículo intentaré explicar cómo es posible eliminar esta opción de una biblioteca de documentos determinada:

En primer lugar para eliminar la opción del menú de la lista la solución más sencilla me parece utilizar el WebPart Toolbar Manager:

This Feature allows you to selectively show and hide menu items on the standard list/library toolbar. The feature adds a new web part to the gallery that you can place on any list/library view page. Once placed on the page, you can use the properties of the web part to show or hide menu items. This is the perfect solution for hiding a single menu item such as “Export to Spreadsheet” to prevent users from taking that action. A complete article on this feature can be found here http://scothillier.spaces.live.com/blog/cns!8F5DEA8AEA9E6FBB!280.entry

Esta es la descripción de una feature sacada de Codeplex, este último enlace no parece funcionar, pero en codeplex podéis descargar la última versión.

Una vez que está instalada la feature, añadiremos el WebPart del ToolBar Manager en la página de visualización donde queramos modificar los elementos que se van a mostrar en el menú de la biblioteca:

clip_image004

clip_image006

El ToolBar Manager permitirá seleccionar aquellas opciones de menú que queremos mostrar y cuáles no, para esto hay que añadir el WebPart a la página de visualización de la biblioteca:

clip_image008

Y tal y como se muestra en la configuración del WebPart anterior, la opción de carga de varios documentos esta deshabilitada y por lo tanto no aparecerá:

clip_image010

Una vez solucionada esta parte hay que reseñar que desde la carga de un único documento también existe un enlace que permitirá cargar más de un documento simultáneamente redirigiéndonos a la página de carga de múltiples documentos, en este caso lo más sencillo es ocultar el enlace usando los estilos, mediante el Developer Toolbar averiguamos que el estilo en cuestión en este caso ctl00_PlaceHolderMain_ctl01_ctl02_UploadMultipleLink

clip_image012

Sobreescribiremos este estilo en nuestra hoja de estilos, que incluiremos en nuestra master o en una nueva hoja de estilos que podemos indicar como predeterminada para un sitio o una colección de sitios:

clip_image014

Y ahora ya no habrá posibilidad de cargar más de un documento para una biblioteca determinada.

Hay que resaltar que si ocultamos este enlace, este se ocultará en todos los sitios donde el CSS esté siendo usado, mientras que la opción de no mostrar la carga de varios archivos mediante el ToolBar Manager estará restringida a aquellas bibliotecas donde añadamos el WebPart y se configure que no se muestre dicha opción, por tanto es necesario tener cuidado ya que los ámbitos de las dos partes de la solución no es el mismo y esto podría ocasionar algún tipo de problema.

Publicado: 04-Jun-09 | 0 Comentarios | 0 Enlaces a este post

May27

[Groove]Microsoft Groove será Groove SharePoint Workspace 2010

Tags: Groove

Hace unos días diferentes blogs se hacían eco de la noticia del cambio de denominación que sufrirá Groove en la release de Office 2010, pasando a llamarse Groove SharePoint WorkSpaces 2010:

Heads up – Groove is getting a new name as of the coming release of Office 2010.  Please welcome SharePoint Workspace 2010! 

The name makeover is in concert with the direction the product is going.  SharePoint Workspace will provide easy access to SharePoint content (or content from any server that implements the publicly documented protocols) in an effort to provide a seamless online/offline experience.

SharePoint Workspace 2010 will be easier to deploy and easier to manage, and it supports a new set of scenarios to help Office and SharePoint users be more productive.  It will also make it easier for IT folks to implement a consistent information strategy based on SharePoint technology throughout the organization.

There will be changes in the way the product is delivered, as well – e.g. SharePoint Workspace (and OneNote, for that matter) will be added to the Microsoft Office Professional Plus 2010 release.  Keep an eye peeled for further announcements from Microsoft on new product plans for Office.

Parece que no solo habrá un cambio en el nombre sino que fomentarán la integración con SharePoint apostando claramente por este producto como complemento para aquellas situaciones en las que no siempre dispongamos de conexión con SharePoint.

También se ha actualizado el sitio de usuarios de Groove, un buen sitio de referencia para informarse y ponerse en contacto con otros usuarios de Groove.

Publicado: 27-May-09 | 0 Comentarios | 0 Enlaces a este post

May22

[.NET]Idioma del Tooltip del control de calendario ASP

Tags: .NET

 

El calendario de ASP por defecto no es gran cosa, pero en muchas ocasiones es útil.

En mi caso a partir he desarrollado un WebPart de MOSS para mostrar una serie de documentos asociados a su respectivo día de publicación.

El problema llego cuando un usuario me alerto de que el tooltip asociado al mes siguiente/anterior estaba en inglés…. Una tontería pensé…. Pues no, el calendario de ASP no tiene la opción de especificar el tooltip asociado a los meses anterior y siguiente, y por si fuera poco, tampoco sabía porque estaba en inglés si los días del calendario y los nombres de los meses estaban en español.

Para ilustrar el problema y la solución partiré de un control de calendario básico de ASP:

clip_image002

Y en el pageInit indicaremos el idioma en que queremos que se muestre nuestro calendario, para este caso he elegido sueco…. (Aquí están los nemotécnicos de cada uno de los idiomas.)

clip_image004

Otra forma de indicar el idioma podría haber sido en el web.config:

clip_image006

Pero como bien comente antes en mi caso esto me pasa en un entorno con MOSS y prefiero no modificar el Web.config.

Pues bien en este caso el tooltip del calendario se muestra así:

 clip_image008

¿Por qué el texto de los tooltip está en inglés si debería estar en sueco, como el resto del calendario?

Pues bien, hay un LanguagePack para el FrameWork 2.0, supongo que los literales que carga mediante JavaScript no están en el mismo lugar que los ficheros de recursos que indica los nombres de los meses en sueco.

Aquí teneis el enlace para descargaros los LanguagePacks:

· x86

· x64

Después de la típica pantalla de descarga de de Microsoft en sueco:

clip_image010

Y una vez lo instalamos en nuestra máquina pues el tooltip del calendario se muestra como debe de mostrarse y en este caso en sueco:

clip_image012

Publicado: 22-May-09 | 0 Comentarios | 0 Enlaces a este post

Apr29

[MOSS]Bug en el WorkFlow de envío de correo con SPD

Tags: MOSS/WSS, Bugs

 

Crear un WorkFlow con SPD (SharePoint Designer) es bastante sencillo, pero me ha ocurrido algo que yo diría que es un pequeño bug del producto.

Para ponernos en situación digamos que mediante el SPD queremos diseñar un WorkFlow de envió de correo cada vez que se cree un nuevo elemento en una lista.

Para simplificarlo aun mas en esta lista solo contaremos con el campo título que se corresponderá con el título del correo electrónico a enviar, el campo cuerpo, que se corresponde con el cuerpo del mensaje y el campo “EnvioCorreo”, un campo de tipo Persona de SharePoint y donde indicaremos los usuarios que van a recibir el correo electrónico.

clip_image002

El campo EnvioCorreo lo definimos como ya comente antes de tipo persona, y permitimos que pueda seleccionarse más de un usuario indicando que permita la selección múltiple:

clip_image004

Se crea en WorkFlow de envío de correo en SPD:

clip_image006

Y cuando vamos a buscar nuestro campo “Asignado a” entre los campos presentes en el nuevo elemento que se está creando, el campo no aparece:

clip_image008

El campo “EnvioCorreo” no aparece ya que lo tenemos marcado para que permita la selección múltiple de usuarios, si volvemos a configurarlos para que solo pueda contener a uno, si que aparecerá:

clip_image010clip_image012

Una vez configuramos el WorkFlow de envío de correo, al crear un nuevo elemento este se envía con normalidad:

clip_image014clip_image016

Y si ahora modificamos nuevamente el campo “EnvioCorreo” para que admita la selección múltiple, funcionará con normalidad:

clip_image018clip_image020clip_image022

Moss es así…..

Publicado: 29-Apr-09 | 1 Comentario | 0 Enlaces a este post

Apr14

[MOSS]Problemas con el RenderAsHtml

Tags: MOSS/WSS

 

Un contratiempo bastante extraño que me ha ocurrido hoy con un WebPart desarrollado por nosotros que visualiza elementos de una biblioteca de documentos.

Al añadirlo a una página que ya contenía mas WebParts de visualización de elementos se comportaba de manera errática, al editar un documento desde el menú desplegable del propio elementos accedía en modo edición a los elementos de otra lista, y sin embargo cuando el WebPart se encontraba el solo en una página todo este comportamiento extraño desaparecía.

 

Después de pasar todo el día dándole vueltas y buscando alguna información al respecto me tope con este post de los foros de MSDN, donde a alguien le ocurría lo mismo.

En resumen el problema ocurre debido al hecho de que los enlaces que se crean automáticamente en el desplegable de los elementos de cualquier lista, están basados en un objeto de JavaScript "ContextInfo()", y el método RenderAsHtml() siempre llama a estos objetos ctx1, así que en el momento que coinciden varios WebParts de visualización de elementos que usan este método pues MOSS se hace un lío, y lo que tu crees que es una acción de edición sobre un documento de la lista A se convierte en una edición de un elemento de la lista B en el mejor de los casos, normalmente no encuentra el elemento....

 

Para resolverlo como bien dice Nicky W. en el post anteriormente mencionado, pues hay que capturar el texto que se genera con el RenderAsHtml() y modificar las referencias a "ctx1" tal y como muestra el siguiente código:

SPList list = web.Lists[list name];
SPView view = list.DefaultView;
lit = new Literal();
lit.Text = view.RenderAsHtml();
lit.Text =lit.Text.Replace("ctx1",string.Format("ctx{0}",N.ToString()));
lit.Text = lit.Text.Replace("ctxId = 1", "ctxId= " +N.ToString());
lit.Text = lit.Text.Replace("CtxNum=\"1\"", "CtxNum=\""+ N.ToString() +"\"");
phGrid.Controls.Add(lit);

 

Donde N es un valor incremental, si vais a renderizar varios controles del mismo tipo o aleatorio, si solo vais a renderizar uno, pero siempre que no sea un 1.

Publicado: 14-Apr-09 | 0 Comentarios | 0 Enlaces a este post

Apr11

[MOSS] Disponible Ram Up: SharePoint for Developers Parte 2

Tags: MOSS/WSS

 

Microsoft ha hecho publico el recurso de Ram Up: Sharepoint for Developers-Part 2

Aun no lo he visto en profundidad pero tiene bastante buena pinta y es una opción mas que interesante para aquellos que se inician en este mundillo.

Se compone de lo siguiente:

  • Level 1: Page Navigation
  • Level 2: Page Branding
  • Level 3: Web Services
  • Level 4: Custom Content Types
  • Level 5: User Management

Esto se suma a la parte 1:

  • Level 1: Web Parts
  • Level 2: Data Lists
  • Level 3: Event Handlers
  • Level 4: Workflow
  • Level 5: Silverlight Web Parts
Publicado: 11-Apr-09 | 0 Comentarios | 0 Enlaces a este post

 Siguientes >>