SharePoint 2010: Introducción a los Document Sets!

Otra de las novedades de SharePoint 2010 es la posibilidad de trabajar con grupos de documentos (algo inviable en SharePoint 2007) como si se tratase de una única unidad de trabajo. Esta unidad de trabajo compuesta por varios documentos es la que en SharePoint 2010 se conoce como Document Sets (Nota: Esta característica únicamente está disponible en SharePoint Server 2010). En la práctica, los Document Sets son un tipo especial de carpetas que disponen de una interfaz de usuario especial en SharePoint 2010, metadatos, comportamientos y un modelo de objetos que facilitan el trabajo con un conjunto de documentos.

Fundamentos de los Document Sets

Para trabajar con Document Sets, SharePoint Server 2010 incorpora:

  • Un tipo de contenido Document Set que se puede configurar como cualquier otro tipo de contenido estándar.
  • Un página de uso de Document Sets.
  • Un modelo de objetos diseñado para trabajar con Document Sets.
  • Versionado de Document Sets independientes del versionado de documentos individuales.
  • Nuevas actividades de workflow para trabajar con Document Sets. Se puede asociar un workflow a un Document Set, ya que de fondo estos son una extensión el objeto SPFolder que admitía estas asociaciones.

Trabajo con Document Sets

Lo primero que tenemos que hacer es activar la característica de Document Sets en un sitio de SharePoint 2010:

  • Nos vamos a la página de administración de la colección de sitios y pinchamos sobre Características de la colección de sitios.
  • En el listado de características buscamos una denominada Conjunto de documentos (estoy trabajando con la versión en español de SharePoint 2010) y la activamos.
  • Lo siguiente que vamos a hacer es crear varios Tipos de Contenido para poder trabajar de forma adecuada con los Document Sets:
    • Creamos dos tipos de contenido de tipo Document y les asociamos dos plantillas de documentos.
    • Creamos un tipo de contenido de tipo Document Set:
      • Elegimos como Tipo de contenido primario: Tipo de contenido del conjunto de documentos.
      • Tipo de contenido primario: Conjunto de documentos.
image image image
  • Le añadimos al Tipo de Contenido de tipo Document Set algunas columnas de trabajo y a través de la opción Configuración del conjunto de documentos:
    • Especificamos que queremos utilizar los dos tipos de contenidos creados en primer lugar.
    • Especificamos el contenido por defecto del Document Set (los dos tipos de contenido creados antes).
    • Añadimos como columnas compartidas las columnas que forman parte del tipo de contenido Document Set.
    • Añadimos las columnas anteriores como columnas de página principal
  • Guardamos todo.
  • Vamos hasta una biblioteca de documentos en la que queramos usar la característica de Document Sets. La configuramos para que utilice el Tipo de Contenido de Document Set creado.
  • Añadimos un elemento a la biblioteca de acuerdo a este Tipo de Contenido (Nota: Cuidado aquí si tenéis una columna de metadatos del Almacén de Términos de SharePoint 2010, os dará un casque curioso).
image image image
  • Una vez se acabe de crear el Document Set, aparece la página de administración del mismo. Básicamente, la idea es que el Document Set se muestra como un contenedor de documentos.
  • Las ventajas de de trabajar con Document Sets son las siguientes:
    • Me permiten trabajar con conjuntos de documentos en formato atómico, es decir, como una unidad.
    • Se le puede asociar a un conjunto de documentos un flujo de trabajo.
    • Soporta versionado que es diferente a las versiones de los documentos contenidos.
    • Soporta metadatos.
    • También se debería poder descargar el contenido del document set en un archivo .zip, pero aparentemente esta opción no está en la beta pública (si lo estaba en la CTP de julio de 2010). 
image
Y hasta aquí llega este post sobre los Document Sets de SharePoint 2010.

Cmdlets personalizados para SharePoint 2010

Siguiendo como referencia el articulo de Gary Lapointe : Creating Custom SharePoint 2010 Cmdlets using Visual Studio 2010. Lo que se pretende es crear cmdlets (commandlets) personalizados para SharePoint 2010 mediante la Beta 2 de Visual Studio 2010, con lo cual podremos agilizar multitud de tareas de administración en el servidor mediante la creación de scripts (fácilmente modificables) unas pocas líneas de texto en la consola de administración de SharePoint 2010.

Como al iniciar cualquier proyecto en Visual Studio iremos a: File > New > Project, posteriormente en el lenguaje que tengamos marcado como predeterminado (C# en este caso) Visual C# > SharePoint > 2010 > de las plantillas que se nos ofrecen seleccionaremos Empty SharePoint Project.

image

Al seleccionar el proyecto vacío nos saldrá la siguiente ventana, en la cual tendremos que seleccionar la aplicación web para la cual va destinada el proyecto y los privilegios que tendremos sobre la misma, desplegar como sandbox (caja de arena y puede ser desplegadas por el propietario del sito, sin necesidad del administrador) o como solución completa de granja (acceso de administrador).

image

Una vez se nos muestre nuestro proyecto vacío lo primero que debemos hacer es añadir dos referencias esenciales:  image

En la fuente de la información (marcada al inicio de este articulo) nos dice que lo podemos encontrar mediante click con botón derecho sobre References > Add Reference, en la ventana que se despliega nos movemos a la pestaña .Net y deberemos buscar las referencias marcadas en la imagen:

clip_image001 Microsoft.SharePoint.PowerShell

clip_image001[1] System.Management.Automation

En mi caso no se encontraban en esa pestaña asique tuve que buscar, las encontré en la GAC del sistema (C:Windowsassembly). Desde la pestaña Browse podremos acceder a esta ruta y veremos la carpeta GAC_MSIL, accedemos y dentro encontraremos las dos librerías que necesitamos. Una vez añadidas no olvidarse del using Microsoft.SharePoint.PowerShell; cuando necesitemos hacer uso de ellas. Tendremos una estructura similar.

image

El siguiente paso que debemos dar es añadir el mapeo a un directorio de SharePoint donde introduciremos un XML donde especificaremos las características de cmdlet como por ejemplo el nombre y el ensamblado. Para ello debemos hacer click derecho sobre el nombre del proyecto > Add… > SharePoint Mapped Folder… En la ventana que se despliega seleccionaremos la siguiente ruta: {SharePointRoot}/Config/PowerShell/Registration.

 

image

Con esto se nos creara en la estructura del proyecto otra carpeta llamada Registration en la cual introduciremos añadiremos un nuevo archivo xml con el mismo nombre del proyecto:

image

En el interior del xml introducimos el siguiente código, que como podemos ver contiene el nombre que utilizara el cmdlet (con la nomenclatura correspondiente a SharePoint):

<?xml version=”1.0″ encoding=”utf-8″ ?>

<ps:Config xmlns:ps=”urn:Microsoft.SharePoint.PowerShell”

xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”

xsi:schemaLocation=”urn:Microsoft.SharePoint.PowerShell SPCmdletSchema.xsd”>

<ps:Assembly Name=”$SharePoint.Project.AssemblyFullName$”>

<ps:Cmdlet>

<ps:VerbName>Get-SPQuotaTemplate</ps:VerbName>

<ps:ClassName>SharePointProject.Quotas.SPCmdletGetQuotaTemplate</ps:ClassName>

<ps:HelpFile>SharePointProject.Quotas.dll-help.xml</ps:HelpFile>

</ps:Cmdlet>

</ps:Assembly>

</ps:Config>

Como se puede ver la ayuda del cmdlet se puede definir en este mismo apartado llamando a un xml dedicado solo a la ayuda, aunque no se vaya a crear, no dará errores.

En el siguiente apartado crearemos la lógica del cmdlet, crearemos una carpeta en la raíz del proyecto llamada Quotas y en ella incluiremos un nuevo archivo de clase, al cual llamaremos: SPCmdletGetQuotaTemplate.cs.

image

Para esta nueva clase introduciremos el siguiente código, el cual permite mostrar los datos de una plantilla de cuota en las colecciones de sitios que tengamos para la aplicación web que haya sido seleccionada al inicio del documento:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using Microsoft.SharePoint;

using Microsoft.SharePoint.PowerShell;

using Microsoft.SharePoint.Administration;

using System.Management.Automation;

namespace SharePointProject.Quotas

{

[Cmdlet(VerbsCommon.Get, “SPQuotaTemplate”),

SPCmdlet(RequireLocalFarmExist = true, RequireUserFarmAdmin = true)]

public class SPCmdletGetQuotaTemplate : SPGetCmdletBase<SPQuotaTemplate>

{

protected override void InternalValidate()

{

if (this.Identity != null)

{

base.DataObject = this.Identity.Read();

if (base.DataObject == null)

{

base.WriteError(new PSArgumentException(“The quota template does not exist.”), ErrorCategory.InvalidArgument, this.Identity);

base.SkipProcessCurrentRecord();

}

}

}

protected override IEnumerable<SPQuotaTemplate> RetrieveDataObjects()

{

List<SPQuotaTemplate> list = new List<SPQuotaTemplate>();

if (base.DataObject != null)

{

list.Add(base.DataObject);

return list;

}

SPWebService webService = SPWebService.ContentService;

if (webService != null)

{

foreach (SPQuotaTemplate quota in webService.QuotaTemplates)

{

list.Add(quota);

}

}

return list;

}

[Parameter(Mandatory = false, ValueFromPipeline = true, Position = 0), Alias(new string[] { “Name” })]

public SPQuotaTemplatePipeBind Identity

{

get;

set;

}

}

}

Después podemos hacer build, para asegurarnos de que no hay errores de código y ya solo nos queda definir las características de despliegue del proyecto, ya que necesitaremos que intervenga por necesidad PowerShell. Para ello definimos una nueva regla de despliegue, seleccionamos las propiedades del proyecto (ya sea mediante botón derecho sobre el nombre del proyecto en el explorador de la solución o en el menú superior desplegable proyecto).

Una vez presentadas las características del proyecto debemos movernos a la pestaña SharePoint, y ahí en la zona marcada como Edit Configurations crearemos una nueva llamada PowerShell con las siguientes opciones:

image Aceptamos y seleccionamos en el desplegable la nueva configuración creada:

image

Ahora vemos seleccionar esta forma de despliegue en las características del proyecto que se muestran en el cuadro de propiedades debajo del explorador de la solución (podemos hacer botón derecho sobre el nombre del proyecto y pulsar sobre propiedades o simplemente F4 estando seleccionado el nombre del proyecto), la primera característica es Active Deployment Configuration, tendremos un desplegable y seleccionamos PowerShell:

image

Para finalizar solo debemos configurar la forma de ejecución ya que debemos ejecutarla con una aplicación externa (PowerShell para administración de SharePoint). Para ello vamos a la pestaña debug, en la opción Start action seleccionamos la segunda opción que se ofrece en los radio buttons (Start external program) y añadimos la ruta del ejecutable de PowerShell que será C:WindowsSystem32WindowsPowerShellv1.0PowerShell.exe.

En los argumentos de línea de comandos le indicaremos que se trata de la consola de administración de SharePoint 2010 (con base de PowerShell ):

-NoExit  ” & ‘ C:Program FilesCommon FilesMicrosoft SharedWeb Server Extensions14CONFIGPOWERSHELLRegistrationsharepoint.ps1 ‘ “

image

Una vez terminado podemos lanzar el proyecto con F5 y se nos mostrara la consola de PowerShell, si no ha habido ningún error podremos directamente consultar sobre nuestro nuevo cmdlet (que como dije anteriormente se encarga de mostrar datos de las cuotas de plantillas que utilizan las colecciones de sitios que tengamos)

clip_image001[6] Get-Command Get-SPQuotaTemplate | Format-List (consultamos sobre el cmdlet)

clip_image001[7] Get-SPQuotaTemplate (muestra los datos que haya encontrado sobre las plantillas aplicadas a las colecciones de sitios).

image

SharePoint 2010: Extensibilidad de VS 2010 Tools para SharePoint 2010!

Como sabéis, una de los grandes avances en lo que a desarrollo sobre plataforma en SharePoint 2010 se refiere es la disponibilidad de una serie de herramientas integradas en Visual Studio 2010 (VS 2010) que facilitan el desarrollo de distintos tipos de artefactos para SharePoint. Además, gracias a la propia concepción de VS 2010 podemos extender estas herramientas y añadir las nuestras propias. La clave: la tecnología Managed Extensibility Framework incluida como parte de .NET Framework 4.0 que habilita la extensión de VS 2010 y de cualquier aplicativo que la utilice. En el caso de SharePoint 2010, ya tenemos algunas extensiones disponibles y ejemplos disponibles en la red en torno a como podemos extender las herramientas disponibles en VS 2010 para desarrollar en SharePoint 2010. Os dejo un primer recopilatorio de ejemplos y extensiones:

  • Finalmente, os recomiendo el blog del propio Waldek, en el que podéis encontrar un montón de post relativos a la extensibilidad de las herramientas de desarrollo para SharePoint 2010 en VS 2010.

Office 2010: Subir varios documentos a un sitio de SharePoint 2007!

Desde hace unos días tengo instalado la suite de Microsoft Office 2010 y francamente, va bastante bien y sobre la base de Office 2007 Microsoft ha sido capaz de dotar de más funcionalidad y usabilidad a los clásicos Word, Excel o PowerPoint. El caso es que esta mañana me he llevado una pequeña sorpresa en lo que a carga de múltiples documentos se refiere en SharePoint 2007. La interfaz de carga, que depende de la versión de Office instalada, ya no es la misma sino que es nueva (al estilo de la que tenemos en el SkyDrive o en SharePoint 2010, y  se facilita el subir documentos sin más que arrastrarlos a la zona de carga…simplemente muy útil.

image image  image

SharePoint 2010: Duet Enterprise para SharePoint y SAP!

Uno de los últimos blogs que he agregado a mi lista es el blog del equipo de Business Connectivity Services. En este blog podemos encontrar posts relativos al BCS en SharePoint 2010 y también relativos a como hacer más interoperable si cabe a la plataforma. En este sentido me hago eco de una plataforma que ya conocía y que parece que se va a extender para que SAP y SharePoint 2010 sean más interoperables. Se trata de Duet Enterprise para SharePoint y SAP, la idea es la de seguir mejorando la interoperabilidad entre plataforma Microsoft y SAP que se había centrado en Duet (interoperabilidad Outlook – SAP) aprovechando las capacidades del BCS.

image

SharePoint 2010: Uso de los SharePoint REST Services (I)!

Siguiendo con la serie de posts sobre novedades en desarrollo en SharePoint 2010, en esta ocasión toca hablar sobre como podemos usar los servicios REST que expone la plataforma para consumir datos de la misma de forma más sencilla a lo que podíamos hacer en SharePoint 2007 (en cuanto nos salíamos del servidor, sólo nos quedaba la opción de los servicios web. Empecemos.

Los servicios REST de SharePoint 2010

Como os comentaba, dado un sitio de SharePoint 2010 podremos acceder a los datos contenidos a través del correspondiente servicio de ADO.NET Data Services. Para que el servicio funciones sin problemas, necesitáis tener instalada la CTP2 de ADO.NET Data Services. Basta conque pongáis /_vti_bin/ListData.svc”>http://<servidor>/_vti_bin/ListData.svc para acceder al servicio y ver las “entidades” con las que podéis jugar para consultar información.

imagePor ejemplo, con /_vti_bin/ListData.svc/Anuncios”>http://<servidor>/_vti_bin/ListData.svc/Anuncios accederéis a los anuncios almacenados en la lista el mismo nombre .

Uso de los servicios REST fuera de SharePoint 2010

Usar los servicios REST de SharePoint 2010 fuera del mismo es similar a llamar a un servicio de ADO.NET Data Services convencional que exponga un modelo de entidades de ADO.NET Entity Framework o de LINQ To SQL:

  • Creamos un proyecto de tipo Windows Forms en VS 2010.
  • Añadimos una nueva fuente de datos en VS 2010: Add-> Add New Data Source.  De esta forma se inicia el clásico asistente de datos para crear una nueva fuente de datos.
  • Escogemos que sea de tipo Service o de tipo SharePoint.
  • En la siguiente pantalla especificamos el servicio ADO.NET Data Services de SharePoint 2010.
  • Añadimos al proyecto la referencia a Microsoft.Data.Services.Client y eliminamos la referencia a System.Data.Services.Client (añadida cuando se creó la referencia al servicio).
image image image
  • Diseñamos el formulario, en mi caso en primera instancia consta de:
    • Un botón btnListar para lanzar la consulta al servicio ADO.NET Data Services de SharePoint 2010.
    • Un control de tipo GridView en el que volcar los resultados de la consulta.
  • Diseñado el formulario, ya estamos listos para añadirle la lógica:
    • Añadimos una directiva using al servicio REST.
    • Añadimos una directiva using a System.Net
  • Codificamos el manejador del botón como sigue:
    • Creamos una instancia del objeto Contexto de Datos creado al añadir la referencia al servicio REST de SharePoint. Este objeto espera en el constructor un tipo Uri en el que especificaremos la Url del servicio REST.
    • Especificamos la credenciales de acceso al servicio (Default.Credentials).
    • Especificamos como fuente del control GridView la lista Anuncios expuesta por el servicio REST.

using System;

 using System.Collections.Generic;

using System.ComponentModel;  

using System.Data; 

using System.Drawing;

using System.Linq; 

using System.Text; 

using System.Windows.Forms;  

using SPRESTServices.IntranetServiceReference;  

using System.Net;  

namespace SPRESTServices  

{

     public partial class Form1 : Form  

     

        public Form1()  

         

            InitializeComponent();  

         

        private void btnListar_Click(object sender, EventArgs e)  

         

            IntranetDataContext ctx =  

                new IntranetDataContext 

                    new Uri(“http://pegaso/_vti_bin/ListData.svc”));  

            ctx.Credentials = 

                CredentialCache.DefaultCredentials; 

            grdData.DataSource = ctx.Anuncios.ToList();   

       

     

}

  • Si ejecutamos el proyecto, el resultado debería ser el siguiente:

image

A continuación, lo que hice fue modificar el formulario para añadirle los controles necesarios para poder insertar datos en la lista utilizando el servicio REST:

  • Un botón btnCreate para insertar datos en una lista de SharePoint a través del servicio.
  • Dos cajas de texto en las que se podrá especificar los datos a insertar en la lista.
  • En el código del manejador del botón simplemente:
    • Creamos una instancia del objeto contexto de datos.
    • Especificamos las credenciales de acceso al servicio.
    • Creamos una instancia de elemento de la lista anuncios.
    • Configuramos las propiedades del elemento.
    • Para añadir el elemento, tendremos que:
      • Llamar al método AddToAnuncios definido en el objeto contexto de datos. Este evento recibe el elemento a añadir.
      • Guardar los cambios llamando a SaveChanges().

        private void btnCreate_Click(object sender, EventArgs e)  

       

            IntranetDataContext ctx = 

                new IntranetDataContext(

                    new Uri(“http://pegaso/_vti_bin/ListData.svc”));

            ctx.Credentials =

                CredentialCache.DefaultCredentials;  

            AnunciosItem anItem = new AnunciosItem();

            anItem.Título = textBox1.Text;

            anItem.Cuerpo = richTextBox1.Text; 

           ctx.AddToAnuncios(anItem);

            ctx.SaveChanges();

        }

 Sin más, probamos que la funcionalidad de crear elementos funciona:

image image image

Y hasta aquí llega este primer post sobre el uso de los servicios REST de SharePoint 2010.

Patterns & Practices: Disponible la 2ª Edición de la Microsoft Application Architecture Guide!

Ya tenemos disponible la 2ª Edición de la Microsoft Application Architecture Guide para descarga. Además de este enlace de descarga os dejo otros enlaces relevantes relativos a pattterns & practices:

image

SharePoint 2010: Novedades en la Instalación (II)!

Después del primer post sobre instalación de SharePoint 2010, y más en concreto sobre la instalación en modo granja de SharePoint Foundation 2010, en esta ocasión toca hablar de las pocas diferencias que os encontraréis al instalar SharePoint Server 2010 en modo granja. Básicamente el proceso de instalación implica:

  • Instalar el Hotfix de WCF para Windows Server 2008, Windows Server 2008 R2 o Windows 7.
  • Si vais a utilizar SQL Server 2008 tendréis que instalar el SP1 además de la Cumulative Update 2. En el caso de SQL Server 2008 R2, esto no es necesario.
  • Una vez que estos requisitos previos están instalados, ya podéis proceder a realizar la instalación de SharePoint Server 2010. Con respecto a esta:
    • La etapa de instalación de pre-requisitos es la misma que para SharePoint Foundation 2010. Os recuerdo que tenéis que estar conectados a Internet para que todos estos componentes se descarguen. De lo contrario, los tendréis que instalar manualmente.
    • A continuación, iniciaríamos la instalación propiamente dicha de SharePoint Server 2010.

Con respecto a instalar SharePoint Server 2010:

  • Lo primero que tenéis que especificar es la clave de producto. En este caso tendremos dos posibles claves:
    • Una para la versión Enterprise: PKXTJ-DCM9D-6MM3V-G86P8-MJ8CY.
    • Otra para SharePoint Server 2010 for Internet Sites: BV7VC-RMR6B-26P6Y-BTQDG-DX2KQ
  • ¿Son ambas versiones diferentes? Pues en esencia, en la versión Enterprise no tenemos las características de Publishing por lo que os recomiendo que indiquéis la segunda clave.
  • Una vez indicada la clave, el proceso de instalación en modo granja es idéntico al que os expliqué para SharePoint Foundation 2010.
  • Una vez que finaliza el asistente de configuración de SharePoint 2010, se abre la página de la Administración Central con el asistente de configuración inicial de los servicios de SharePoint Server 2010. Lógicamente, aquí el número de servicios se dispara notablemente.
image image image
  • Una vez que el asistente de configuración finaliza, y si todo ha ido bien, aparece la página de resumen con la “pila” de servicios en ejecución.
image image
 
Y para finalizar el post, aquí os dejo el aspecto que tiene un sitio de publicación de SharePoint Server 2010:
SharePointServer_6 

SharePoint 2010 + jQuery

Recién instalada la beta de SharePoint 2010 lo primero que se me ocurrió fue intentar migrar mis andanzas con jQuery a la nueva plataforma, tras la “aventura” de instalarlo (gracias a la inestimable ayuda JC´s)  en vhd bootable de x64 (no hay mas remedio) sobre un Windows Server 2008 R2, pude empezar a trastear.

Lo primero que he encontrado muy cambiado es la web part Content Editor, con el nuevo estilo de navegación, la que podemos encontrar en el grupo Medios y contenidos, además ya no disponemos de los botones que nos permitían la edición de código fuente y editor de texto enriquecido que teníamos en 2007.

WPeditorcontenido

 PropiedadesContent             image

Pero hay una solución (gracias a JC´s de nuevo), situados en la web part podemos movernos en la ribbon a un opción que si nos permite modificar el código en la pestaña formato de texto –> HTML (desplegable) –> Editar código fuente : 

Contentmetercodigo

Ahí meteríamos nuestro código, que como se puede ver en la captura utilizaremos jqDock para crear un menú deslizante que nos agranda el elemento por el que naveguemos.

También se puede realizar la inserción de código mediante la web part formulario de HTML, ya que esta si nos permite directamente la edición y ese código queda fijo en la pagina (con la web part editor de contenido he observado que mete código de mas para ajustar estilos):

PropiedadesHtml

Para este apartado me cree un directorio en 14/Template/Images llamado Dock, el cual contiene todo lo necesario para que el menú funcione correctamente, necesitaremos la librería jQuery, el javascript de jqDock, hojas de estilo y las imágenes. En este enlace encontraremos ejemplos de estilos y diferentes opciones que nos permite jqDock, aunque no especifican compatibilidad con SharePoint… pero funciona  xD.

A continuación comparto mi código que va incrustado en la web part de formulario HTML, el cual principalmente tiene las llamadas a jQuery, jqDock y a las hojas de estilo, el siguiente paso es definir las opciones del Dock y finalmente jugar con los enlaces y las imágenes (recomiendo imágenes cuadradas 128×128 px para no descompensar el menú):

<link type=”text/css” rel=”stylesheet” href=”/_layouts/Images/dock/dock.css” />
<script type=’text/javascript’ src=’_layouts/Images/Dock/jquery-1.3.2.min.js’></script>
<script type=’text/javascript’ src=’_layouts/Images/Dock/jquery.jqDock.js’></script> 
<script type=”text/javascript”>

    jQuery(document).ready(function() {
        var options1 =
        {
            size:48,
            align: ‘top’,
            labels: ‘tc’
        };
        jQuery(‘#menu1’).jqDock(options1);
        });
</script> 
  <h1>Ejemplo de Menú jqDock</h1>
  <p>Pasa el mouse sobre las imagenes del menú y veras el efecto</p>
  <div id=’menu1′>  
    <a href=’http://ciin.es’ title=’CIIN’>
      <img src=’_layouts/Images/dock/logo.png’ alt=” />
    </a>
    <a href=’http://www.microsoft.com/windows/windows-xp/default.aspx’ title=’Disco XP’>
      <img src=’_layouts/Images/dock/disc.png’ alt=” />
    </a> 
    <a href=’http://windows.microsoft.com/en-US/windows7/products/features/windows-media-player-12′ title=’Media Player’>
      <img src=’_layouts/Images/dock/Audio.png’ alt=” />
    </a>
    <a href=’http://windowsupdate.microsoft.com/’ title=’Windows Update’>
      <img src=’_layouts/Images/dock/WU.png’ alt=” />
    </a>
    <a href=” title=’Date And Time’>
      <img src=’_layouts/Images/dock/Date And Time.png’ alt=” />
    </a>
    <a href=’jqDockMenu.html’ title=’Panle de Control’>
      <img src=’_layouts/Images/dock/Control.png’ alt=” />
    </a>
    <a href=” title=’Papelera’>
      <img src=’_layouts/images/dock/papelera.png’ alt=” />
    </a>
  </div>  

Y la hoja de estilos:

  #menu1 {
            position:relative; top:-300; right:5%; padding:50px; width:50px;
        }
    div.jqDock {background-color:transparent;}

     div.jqDockLabel {
            border:0px none; padding:0px ; font-weight:bold; font-size:18px; font-style:italic;
            white-space:nowrap; color:#0055DD; background-color:transparent;
                }
  div.jqDockLabelLink {cursor:pointer;}
  div.jqDockLabelImage {cursor:default;}

 

El resultado:

jQdock2

 jQdock3   jQdock5jQdock4

 Saludos.

Jesús.