UAla!!

Entradas de Julio 2009

Modificar el formato de los formularios de SharePoint

23 Julio 2009 · Dejar un comentario

En varias ocasiones, diferentes usuarios me han comentado que no entienden porque los formularios que genera SharePoint muestran la descripción de los campos bajo el área de edición de los mismos. Resulta poco “usable” y no es lógico tener que ir al final de campo para leer una explicación sobre el mismo.

En realidad, si miramos los formularios de administración de SharePoint (al modificar el título o la descripción de un sitio, al añadir una columna o al configurar los parámetros se seguridad) los textos con la explicación de los campos a introducir, aparecen bajo el título del mismo, en el área situada a la izquierda del formulario.

Formulario de sistema

He estado analizando la forma en que ShrarePoint renderiza los formularios y he creado una sencilla utilidad que nos permite aplicar la misma configuración estética sobre nuestras listas y bibliotecas de documentos.

Básicamente, esta utilidad permite pasar de esta situación:

Antes de la modificación

 A esta:

Después de la modificación

SharePoint utiliza un conjunto de plantillas (RenderingTemplate’s) para crear los formularios (edit/display/new) de las listas y bibliotecas de documentos. Estas plantillas están situadas en los ficheros ASCX situados en el directorio de SharePoint: 12\Templates\ControlTemplates.

Si creamos nuestros própios controles y los depositamos en este directorio podremos redefinir algunos de los comportamientos estándar. En nuestro caso, redefiniremos uno de los templates existentes llamado “CompositeField”. Este template se encarga de generar cada una de las filas de la tabla del formulario. Para cada campo se crea una fila (tr) en base a esta definición. Si miramos el template original, situado en el fichero DefaultTemplates.ascx, podremos ver que crea dos columnas (TD), una para el título (<SharePoint:FieldLabel …) y otra para el campo y la descripción (<SharePoint:FormField … y <SharePoint:FieldDescription …).

<SharePoint:RenderingTemplate ID="CompositeField" runat="server">
 <Template>
  <TD nowrap="true" valign="top" width="190px"><H3><SharePoint:FieldLabel runat="server"/></H3></TD>
  <TD valign="top" width="400px">
  <!-- FieldName="<SharePoint:FieldProperty PropertyName="Title" runat="server"/>"
    FieldInternalName="<SharePoint:FieldProperty PropertyName="InternalName" runat="server"/>"
    FieldType="SPField<SharePoint:FieldProperty PropertyName="Type" runat="server"/>"
    -->
   <SharePoint:FormField runat="server"/>
   <SharePoint:FieldDescription runat="server"/>
   <SharePoint:AppendOnlyHistory runat="server"/>
  </TD>
 </Template>
</SharePoint:RenderingTemplate>

Lo que tenemos que hacer es crear un nuevo fichero ASCX con el RenderingTemplate y depositarlo en el directorio. Para este nuevo template trasladamos el FieldDescription a la primera TD bajo el título.

<SharePoint:RenderingTemplate ID="CompositeField" runat="server">
 <Template>
  <TD nowrap="true" valign="top" width="190px">
   <H3><SharePoint:FieldLabel runat="server"/></h3>
   <table><tr><td class="ms-descriptiontext"><SharePoint:FieldDescription runat="server"/></td></tr></table>
  </TD>
  <TD valign="top" width="400px">
  <!-- FieldName="<SharePoint:FieldProperty PropertyName="Title" runat="server"/>"
    FieldInternalName="<SharePoint:FieldProperty PropertyName="InternalName" runat="server"/>"
    FieldType="SPField<SharePoint:FieldProperty PropertyName="Type" runat="server"/>"
    -->
   <SharePoint:FormField runat="server"/>
   <SharePoint:AppendOnlyHistory runat="server"/>
  </TD>
 </Template>
</SharePoint:RenderingTemplate>

Para que SharePoint lo tenga en cuenta y lo aplique, es necesario realizar un IISReset en el servidor.

Pudes descargarte tanto el código fuente como una solución que podrás desplegar directamente en tu servidor desde el área CodePlex de Kaldeera.

Categorías: Componentes · Sharepoint

Como extraer assemblies del GAC – Segunda parte

15 Julio 2009 · Dejar un comentario

Hace ya un tiempo publiqué una entrada en la que hacía referencia a un proyecto CodePlex que nos permite visualizar el contenido de la GAC y extraer sus DLL’s.

Hoy he descubierto otra manera mucho más simple para hacer lo mismo. Solo necesitas mapear una unidad de red sobre el directorio \\<servername>\c$\windows\assembly.

El resultado:

gac

Categorías: .NET

Web Development Helper

15 Julio 2009 · Dejar un comentario

Cuando desarrollo en la web, tengo un conjunto de herramientas imprescindibles que me ayudan a ver que ocurre bajo las páginas (no siempre es evidente).

Hoy quiero recomendar una herramienta gratuita llamada Web Development Helper. Se trata de un add-in para Internet Explorer que sirve para trazear todo el tráfico que ocurre entre el browser y el servidor.

Podremos medir los tiempos de descarga de cada uno de los elementos de nuestras páginas, detectar descargas con error (401) o ver los parámetros (post/get) que nuestro navegador envía al servidor entre otras funcionalidades.

Encuentro especialmente útil este tipo de herramientas cuando desarrollo aplicaciones Flash, AJAX o Silverlight que utilizan toda la potencia de nuestros navegadores al realizan actualizaciones parciales de las páginas mediante llamadas a WebServices. Podremos ver que llamadas se están realizando, que información se descarga, que información se devuelve al servidor, … en definitiva, donde está el fallo!!!   :-)

Espero que os sirva tanto como a mí.

Categorías: Ajax · Flash · Herramientas · Silverlight

SharePoint 2010 (Technical Preview) Developer Documentation

15 Julio 2009 · Dejar un comentario

En el sitio MSDN ya podemos encontrar una versión beta de la Documentación Técnica correspondiente a la nueva versión SharePoint 2010.

Contiene un documento detallado donde explica como modificar la Ribbon de nuestras páginas (añadir botones, modificar los existentes, …). Sin duda, este nuevo elemento de la interfaz de SharePoint será uno de los más “manoseados” por toda la comunidad. Podemos esperar ver de todo.

También se incluye una primera versión de la guía de referencia del modelo de objetos (SDK). Aún no podemos ver la nueva versión pero mirando el SDK ya nos podemos hacer una buena idea de las novedades que incluirá.

Podéis descargar toda la documentación de SharePoint Products and Technologies: 2010 (Technical Preview) Developer Documentation.

Categorías: Sharepoint

SharePoint form Web Controls

14 Julio 2009 · Dejar un comentario

Hace un tiempo encontré una entrada publicada en el blog de René Hézser donde explica con detalle como funcionan los campos de nuestras listas y los controles que se generan para visualizarlos (en edit, new o display mode).

Dispone de un claro ejemplo en el que crea un tabla con todos los campos de un item de una lista. Muestra el título, el campo en DisplayMode y en campo en EditMode.

En el caso de trabajar con campos especiales desarrollados por terceros, el código de René no funciona correctamente ya que no pueden resolver el código (Assembly) correspondiente al campo. He generado una nueva versión de su código que realiza la carga dinámica del assembly asociado al campo y permite su correcta visualización.

public static Control GetSharePointControls(SPField field, SPList list, SPListItem item, SPControlMode mode)
{
    // check if the field is a buildIn field, or can be rendered by a SharePoint Control
    if (field == null || field.FieldRenderingControl == null || field.Hidden) return null;
   
    try
    {
        // BaseFieldControl webControl = field.FieldRenderingControl;

        BaseFieldControl webControl = (BaseFieldControl)this.loadObject(field.FieldRenderingControl.GetType().Assembly.ToString(), field.FieldRenderingControl.ToString());

        webControl.ListId = list.ID;
        webControl.ItemId = item.ID;
        webControl.FieldName = field.Title;
        webControl.ID = GetControlID(field);
        webControl.ControlMode = mode;

        return webControl;
    }
    catch (Exception ex)
    {
        var errorLabel = new Label
                     {
                         ID = "ErrorLabel",
                         Text = string.Format("Error in GetSharePointControls:<br/>{0}", ex)
                     };
        return errorLabel;
    }
}    // GetSharePointControls
private Object loadObject(string assemblyString, string className)
{
    Object o = null;
    try
    {
         // Try to instantiate the object without load any DLL (if it was loaded early)
         o = Activator.CreateInstance(Type.GetType(className, true, true));
    }
    catch
    {
        try
        {
            // Try again loading the assembly
            Assembly assembly = Assembly.Load(assemblyString);
            o = Activator.CreateInstance(assembly.GetType(className, true, true));
        }
        catch (Exception ex)
        {
            throw new Exception("There has been a problem when instantiate object " + className + " de " + assemblyString, ex);
        }
    }
    return o;
} // loadObject

Con la llamada al método loadObject conseguimos realizar la carga de la DLL que contiene el Assembly si este no se encuentra ya cargado anteriormente.

Categorías: .NET · Sharepoint

SharePoint 2010 – Technical Preview

14 Julio 2009 · Dejar un comentario

SharePoint 2010

El equipo de desarrollo de SharePoint ha publicado tres videos a modo de aperitivo de lo que será la conferencia de las Vegas en Octubre. Se trata de un video de introducción, otro dirigido a profesionales IT y otro para desarrolladores.

Por fin podemos ver en acción al tan esperado SharePoint 2010. Dificil resumir todas las nuevas características:

  • Ribbon
  • Integración con Silverlight
  • Búsquedas mejoradas
  • Nuevas experiencias de usuario
  • Modelos de desarrollo en cliente (SDK)
  • Flujos de trabajo mejorados
  • BDC’s

Poco a poco iremos descubriendo todas sus virtudes (y sus defectos). Con estos tres videos y la noticia publicada en su blog donde anuncian el lanzamiento de la Thecnical Preview, Microsoft inicia el lanzamiento de la nueva versión SharePoint 2010. Excitante!!.

Categorías: Sharepoint

Kalddera ScanIN

1 Julio 2009 · Dejar un comentario

Logo Kaldeera ScanIN

Desde Kaldeera tenemos el placer de presentar nuestro nuevo producto Kaldeera ScanIN. Una herramienta que permite escanear y publicar documentos directamente sobre las bibliotecas de documentos de SharePoint de forma totalmente integrada. ScanIN también ofrece la posibilidad de escanear documentos para ser adjuntados a cualquier elemento de las listas de nuestro sistema.

En definitiva, una herramienta de gran utilidad para aquellos usuarios que realizan la entrada y registro de documentos sobre sistemas de gestión documental y un complemente ideal a los flujos de trabajo desarrollados con Kaldeera Workflow Designer.

Categorías: Componentes · Sharepoint