WSS 3.0 & MOSS: Disponible la versión 4 del SharePoint Administration Toolkit!

El equipo de SharePoint acaba de anunciar la disponibilidad de la 4ª versión del SharePoint Administration Toolkit. Esta 4ª versión del Toolkit será la última hasta que SharePoint 2010 vea la luz, ya que dispondrá de un SharePoint Administration Toolkit. Volviendo a la versión 4 del SharePoint Administration Toolkit, contiene mejoras y novedades en las siguientes herramientas que incluye por defecto:

  • SharePoint Diagnostics Tool (Mejora), que se ha actualizado para que sea una herramienta más efectiva a la hora de detectar problemas en nuestra granja de SharePoint.
  • Permissions Reporting Tool (Novedad), que nos permite conocer de forma sencilla dónde se han roto permisos en una colección de sitios dada.
  • Quota Management command (Novedad), que permite automatizar el cambio en el valor de la quota aplicada a colecciones de sitio frente a tener que hacerlo de forma manual (única opción hasta ahora).
  • Security Configuration Wizard Manifests (Novedad), es decir, manifiestos de SharePoint 2007 para la SCW introducida con Windows Server 2003 SP1 y cuyo cometido es reducir la superficie de ataque.

Gemini: Resumen de características!

El equipo de Gemini, uno de los componentes destacados de SQL Server 2008 R2, acaba de publicar un excelente resumen de las características de Gemini disponibles en la CTP de agosto de 2009. Este resumen gira en torno al Add-In de Gemini para Excel 2010, que nos permite explotar de forma eficiente cantidades masivas de datos sin salirnos de un entorno tan familiar como es el de Microsoft Excel. Básicamente, este Add-In embebe en Excel 2010 un pequeño motor de  datos que permite:

  • Gestiona de forma eficiente cantidades masivas de datos superando los propios límites de Microsoft Excel.
  • Permite importar datos de diferentes fuentes.
  • Se pueden modelar distintas operaciones como especificar relaciones entre tablas, expresiones de lógica de negocio.
Gemini_1 Gemini_2 Gemini_3
  Gemini_4  

VS 2010 & .NET Fx 4.0: Novedades en WF 4.0 (III)!

Siguiendo con la serie de post en torno a las novedades de Windows Workflow Foundation 4.0 (WF 4.0, puedes leer también las partes I y II), en esta ocasión voy a tratar sobre lo fácil que resulta definir argumentos y variables en Visual Studio 2010 para poder comunicarnos con un workflow de WF 4.0. Empecemos.

Diseñando el workflow

Como siempre, lo primero que vamos a hacer es diseñar el workflow de WF 4.0 con Visual Studio 2010:

  • Iniciamos Visual Studio 2010 y creamos un proyecto de workflow (de tipo secuencial).
  • En el diseñador de workflows, arrastramos una actividad de tipo Assign a la superficie de diseño.
  • Para crear argumentos y variables en un workflow de WF 4.0, disponemos en el diseñador de dos botones que nos permiten añadirlos de forma muy sencilla.
  • Por ejemplo, para añadir argumentos basta con pulsar el botón Arguments y añadir los argumentos que necesitemos. Estos pueden ser de entrada o de salida. En nuestro caso, crearemos un argumento de entrada y otro de salida.
  • A continuación, configuramos la propiedad To de la actividad Assign añadiéndole uno de estos argumentos que acabamos de crear utilizando para ello el editor de expresiones (os recuerdo que dicho editor usa sintaxis VB.NET).
image image image
  • Seguimos el mismo procedimiento para configurar la propiedad Value de la actividad Assign.

image

Codificando la gestión de los argumentos

Una vez que hemos definido los argumentos de entrada y salida del workflow, ya solo nos falta definir las clases de gestión correspondientes:

  • Clase para el argumento de entrada, en la que simplemente definiremos un constructor en el que añadimos la propiedad de entrada del workflow:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text; 

namespace WFActivitiesDemo

{

    public class SayHelloInArgs: Dictionary<string,object>

    {

        public SayHelloInArgs(string name)

        {

            this.Add("Name", name);

        }

    }

}

  • Clase para el argumento de salida, un poco más compleja que la anterior ya que tenemos que realizar la asignación del valor de la propiedad. Fijaros también que en este caso el constructor de la clase es un tipo complejo frente al caso del argumento de entrada.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text; 

namespace WFActivitiesDemo

{

    class SayHelloOutArgs

    {

        IDictionary<string, object> _outArgs = null;

        public SayHelloOutArgs(IDictionary<string, object> outArgs)

        {

            if (outArgs == null)

            {

                throw new ArgumentNullException("outArgs");

            }

            _outArgs = outArgs;

        }

        public string Greeting

        {

            get

            {

                return _outArgs["Greeting"].ToString();

            }

        }

    }

}

Probando el workflow

Una vez que hemos definido las clases de gestión de los argumentos de entrada y salida, solo nos queda probar el workflow. Para ello:

  • Modificamos Program.cs para que por una parte recoja la entrada de usuario en el argumento de entrada definido y por otra genere la salida definida y en la que se utiliza el argumento de salida.

namespace WFActivitiesDemo

{

    using System;

    using System.Linq;

    using System.Threading;

    using System.Activities;

    using System.Activities.Statements;  

    class Program

    {

        static void Main(string[] args)

        {

            AutoResetEvent syncEvent = new AutoResetEvent(false);  

            Console.Write("Introduce tu nombre: ");

            string name = Console.ReadLine();

            string greeting=null;

            WorkflowInstance myInstance = new WorkflowInstance(new Sequence1(),

                new SayHelloInArgs(name));

            myInstance.OnCompleted = delegate(WorkflowCompletedEventArgs e)

            {

                SayHelloOutArgs outArgs =

                    new SayHelloOutArgs(e.Outputs);

                greeting = outArgs.Greeting;  

                syncEvent.Set();

            };

            myInstance.OnUnhandledException = delegate(WorkflowUnhandledExceptionEventArgs e)

            {

                Console.WriteLine(e.UnhandledException.ToString());

                return UnhandledExceptionAction.Terminate;

            };

            myInstance.OnAborted = delegate(WorkflowAbortedEventArgs e)

            {

                Console.WriteLine(e.Reason);

                syncEvent.Set();

            };

             myInstance.Run();  

            syncEvent.WaitOne();  

            Console.WriteLine(greeting);

            Console.ReadLine();  

        }

    }

}

 
Finalmente, el resultado de ejecución del workflow es el siguiente:
image

Y hasta aquí llega la tercera entrega sobre novedades en WF 4.0. Espero que el post os haya resultado interesante.

MOSS: Como automatizar la publicación de formularios Infopath (III)!

Para finalizar la serie de posts sobre como automatizar la publicación de formularios Infopath en MOSS (puedes ver las partes I y II de la serie), os voy a dejar una serie de enlaces en los que me basé para realizar los posts y las pruebas de publicación de formularios así como una serie de herramientas creadas en la comunidad para facilitar la publicación de formularios Infopath.

Recursos sobre automatización de la publicación de formularios Infopath

Los recursos más interesantes al respecto son los siguientes:

Herramientas para facilitar la publicación de formularios Infopath en MOSS

La comunidad de SharePoint ha creado varias herramientas pensadas para hacer más fácil la publicación de formularios Infopath. A continuación os detallo los recursos que he encontrado como más interesantes:

image image image

Y hasta aquí llega el tercer y último post sobre automatización de la publicación de formularios Infopath. Espero que el post os haya resultado interesante.

Gemini: Vídeos demostrativos en castellano!

En mayo de este año publiqué un post en torno a los primeros vídeos sobre Gemini, el nuevo componente de la plataforma de BI de Microsoft. El caso es qué ya empiezan a aparecer los primeros materiales en castellano. Se tratan de un par de vídeos realizados por Juan Alvarado a los que llegué gracias al blog de Fernando García Loera, MVP Lead para Latinoamérica. Los dos vídeos en cuestión son los siguientes:

Además de estos vídeos, aprovecho el post para dejaros una serie de enlaces relativos a Gemini:

Interoperabilidad: PHP Toolkit para ADO.NET Data Services!

El equipo de interoperabilidad de Microsoft acaba de anunciar una excelente noticia: la disponibilidad del PHP Toolkit para ADO.NET Data Services. Se trata de un nuevo “puente” entre el mundo PHP y el mundo .NET que en este caso posibilita que los desarrolladores de PHP puedan utilizar la tecnología de acceso a datos en modo REST de Microsoft, o lo que es lo mismo, ADO.NET Data Services. El kit, del que ya os podéis descargar una versión en codeplex se asienta sobre la siguiente arquitectura:

Por hacer un resumen de lo que permite este Toolkit:

  • En tiempo de diseño, se trata de generar clases proxy basados en la metadata expuesta por los servicios de ADO.NET Data Services que se han implementado con Visual Studio. La clave de la generación de estas clases Proxy es la utilidad PHPDataSvcUtil (cuya filosofía es similar a su equivalente para ADO.NET Data Services)
  • En tiempo de ejecución, lo que hará el desarrollador PHP es llamar estas clases proxy de forma sencilla desde código PHP.

Os recomiendo leeros el post del equipo de interoperabilidad ya que incluye un paso a paso sobre como utilizar el Toolkit.