viernes, 23 de febrero de 2007

Agregar integrantes a un sitio de SharePoint


Como complemento a Creación de Sitios de SharePoint con C#, publicado unas entradas más abajo, expondré ahora como agregar integrantes a los sitios de SharePoint desde nuestro código, lo que puede ser muy útil para dejar configurado por completo un sitio desde nuestra aplicación.

Para agregar un integrante necesitamos la ruta del sitio en cuestión y que la persona que queremos agregar ya sea usuario de nuestro SharePoint. La ruta que hace falta para la implementación que expondré es relativa al servidor (si el sitio es “http://spserver/sites/proyectos/” la ruta que nos hace falta es solo “/sites/proyectos/”). El usuario que le vamos a pasar al método debe tener el formato “DOMINIO\nombre_usuario”, así lo podremos obtener la colección de usuarios de SharePoint sin problemas.

Para agregar uno o varios integrantes hay que introducir los datos en un vector SPUserInfo (correo electrónico, nombre de usuario y nombre para mostrar) y será dicho vector el que añadamos a la colección de usuarios. También tendremos que decidir que rol le otorgaremos a los usuarios que agreguemos ya que si no agregamos los usuarios también al rol no llegarán a formar parte del sitio.

El método que a continuación se expone es para agregar un solo usuario:

private bool agregarIntegrante(string ruta, string usuario)
{
  try
  {

/* Obtenemos la colección de sitios de nuestro portal
* y el sitio especificado por 'ruta' */

    SPGlobalAdmin ga = new SPGlobalAdmin();
    SPSiteCollection col = ga.VirtualServers[0].Sites;
    SPSite s = col[ruta];

    s.AllowUnsafeUpdates = true;

/* Obtenemos la colección de usuarios del sitio
* y creamos el rol que tendrán los nuevos integrantes
* en este caso el rol es de Administrador */

    SPWeb w = s.OpenWeb();
    SPUserCollection ucoll = w.SiteUsers;
    SPRole rol = w.Roles["Administrador"];

/* Obtenemos al usuario que queremos agregar como integrante
* del portal principal, creamos el vector de SPUserInfo
* y agregamos los datos del usuario */

    SPUser u = col[0].OpenWeb().Users[usuario];
    SPUserInfo[] ui = new SPUserInfo[1];

    ui[0].Email = u.Email;
    ui[0].LoginName = u.LoginName;
    ui[0].Name = u.Name;

/* Agregamos el vector SPUserInfo a la colección de usuarios
* y al usuario en concreto en el rol especificado anteriormente */

    ucoll.AddCollection(ui);
    rol.AddUser(u.LoginName, u.Email, u.Name, u.Notes);

    return true;
  }
  catch(Exception ex)
  {
    return false;
  }
}



Como también dije con la creación de sitios, agregar integrantes desde nuestro código puede ser muy interesante si lo aplicamos a un flujo de trabajo y muchísimo más interesante si combinamos la creación de sitios con el método para agregar integrantes.

martes, 20 de febrero de 2007

Interfaces naturales





Increíble ¿no os parece? Este video está en FastCompany, en el se puede ver una demostración de Perceptive Pixel, una empresa creada por Jeff Han para el desarrollo de los sistemas táctiles multi-punto. En este desarrollo de Jeff Han está la evolución de los sistemas táctiles. Este siguiente paso nos lleva a un manejo natural y sencillo de las aplicaciones.
Solo hay que fijarse en el éxito de un producto, supongo todos conocéis, el Apple iPhone. Todos están de acuerdo en que podría ser 3G, llevar GPS, tener una pantalla 16:9 en lugar del formato que usa, incorporar lector de tarjetas y más cosas que todo teléfono móvil-SmartPhone-PDA-reproductor audio/video debería llevar. Pero aun así es el objeto de deseo de numerosas personas (entre las cuales me incluyo).

Creo que su éxito se debe a la facilidad de uso, a su pantalla táctil multi-punto, a lo simple y completa de su interfaz (puede que también a que es la siguiente generación del iPod). ¿A cuántos nos cuesta realizar una multiconferencia o dejar en espera la llamada que atendemos porque hay otra entrante? Pues fíjense en lo fácil que resulta con el iPhone, en cómo se desplaza a través de la lista de contactos o del Cover Flow (los álbumes de música) y lo fácil que es el manejo de las fotos.

Espero que dentro de poco no necesitemos ni teclado ni ratón para usar nuestro ordenador, simplemente una pantalla táctil como la de Jeff Han.

lunes, 19 de febrero de 2007

V Congreso Andaluz de Ingeniería Química (V CAIQ)

En próximas fechas, concretamente el 19, 20 y 21 de Abril, se celebrará en Almería el V Congreso Andaluz de Ingeniería Química.

No es que la ingeniería química sea un tema que me apasione, pero hay que darlo a conocer y de paso ofrezco un poco de apoyo a AIQU (es especial a Eli y Estefanía), la asociación que se está encargando de toda la organización del congreso.

Les deseo que todo les salga bien y que sea un éxito.


Por cierto, el cartel lo ha creado un servidor con la encomiable colaboración de un amigo. En breve también tendremos lista la página web del congreso, donde se podrá consultar toda la información referente al V CAIQ.

Creación de sitios de SharePoint con C#

Crear sitios de SharePoint mediante programación puede ser realmente útil. Si combinamos dicha creación de sitios con aplicaciones remotas, de consola, WebParts o los nuevos flujos de trabajo (work flows), se pueden hacer cosas muy interesantes.

Lo primero que nos hace falta para crear un sitio es obtener el sitio bajo el cual lo crearemos y de él obtener su SPWebCollection. Esta colección será la que nos proporcione el método necesario para crear un sitio.
Otra cosa que nos hace falta es la plantilla que vamos a usar en ese sitio. Se puede usar una de las plantillas que tiene SharePoint o una que hayamos creado nosotros. En definitiva, necesitamos el objeto SPWebTemplate de la plantilla que vayamos a usar.

El método que nos proporciona nuestra SPWebCollection añade una nueva SPWeb a la colección. A continuación se muestra el método con los parámetros necesarios:

webCollection.Add(Ruta, Titulo, Descripcion, LOCALID, Plantilla, Permisos, Convertir);

  • Ruta: String con la ruta por la que se accederá al nuevo sitio. Solo ha de contener el nuevo nombre, omitiendo la ruta hasta el sitio al que pertenece la nueva SPWeb. Ej.: Si el nuevo sitio que queremos crear bajo “proyectos” es “informes” la ruta de acceso seria “http://spserver/sites/proyectos/informes”, pero el parámetro para el método seria únicamente “informes”.
  • Titulo: String con el título que se dará al nuevo sitio.
  • Descripción: String con la descripción del nuevo sitio.
  • LOCALID: UInt32. En nuestro caso es 3082, que identifica el idioma español de nuestro Sharepoint.
  • Plantilla: SPWebTemplate que indica la plantilla que se va a utilizar para la creación del nuevo sitio. Esta plantilla se podrá obtener de la colección de plantillas del sitio.
  • Permisos: Bolean que indica si se utilizarán permisos exclusivos o heredados del sitio al que pertenece.
  • Convertir: Bolean para definir si se sobrescribirá el sitio si la ruta ya existe o si lanzará una excepción. Si se establece el valor a verdadero se sustituirá el sitio existente con el que se cree nuevo, por el contrario si se establece a falso, el método devolverá una excepción indicando que la ruta ya existe.

Si se sabe cuando utilizar puede resultar realmente útil crear los sitios a través de nuestro código y se podrían crear flujos de trabajos muy completos que automatizarán la creación de sitios.

viernes, 16 de febrero de 2007

Convertir de JPG a PDF

Hace unos días ayude un poco a mis compañeros de trabajo que estaban muy ocupados. El trabajo consistía en convertir unas fichas generadas por un programa de formato JPG a PDF. Puede parecer fácil, que lo es, pero cuando son cientos de archivos los que hay que convertir se convierte en tedioso y requiere una inversión de tiempo considerable.
Mientras estaba en ello, pensé en lo lento que estaba resultando y que no podía hacer otra cosa mientras. Así que se me ocurrió hacer un pequeño programa que lo hiciera por mí. Y a ello me puse.
Tras unas pocas pruebas en el Visual Studio conseguí hacerlo más fácilmente de lo que esperaba. Agregando una referencia al componente COM Acrobat (por supuesto hay que tener instalado Adobe Acrobat Profesional) en un proyecto Windows Forms y escribir la correspondiente llamada using Acrobat, este es el código para convertir los archivos:

AcroAVDocClass avdoc = new AcroAVDocClass();
avdoc.Open(ruta_archivoJPG, titulo_documento);

AcroPDDoc pddoc = (AcroPDDoc)avdoc.GetPDDoc();
pddoc.Save(3, ruta_destino_archivoPDF);

avdoc.Close(1);
pddoc.Close();

Agregando un OpenFileDialog y un foreach conseguí que hiciera el trabajo por mí. Mientras se convertían los cientos de archivos yo podía dedicarme a hacer otras cosas.
Queda pendiente una mejora para poder convertir otros tipos de archivos, pero eso para más adelante.

El porqué

Pues aqui estoy, creando mi primera entrada de mi primer blog.
Yo mismo aun estoy preguntándome porque he creado un blog. Tal vez solo quiera un sitio donde poder escribir sobre mis pequeños avances en el mundo de la programación y poder compartirlos, o sobre los gadget que me fascinan, o sobre las opiniones que me rondan la cabeza. O simplemente sea que un dia me negué a crear un Space (ya sabeis, esos Windows Live Spaces) y de ahi no hay quien me mueva.
En todo caso, bienbenido sea.