Programación y Estrategias de Negocios RSS 2.0
# Friday, May 16, 2008

Desde hace algunos meses vengo participando en un Proyecto Grande para Dunkin Donuts en Estados Unidos, básicamente la construcción del sitio www.DunkinDonuts.com y otros sitios afiliados como www.myicedcoffee.com, estos sitios utilizan diferentes tecnologías como Flash, JavaScript, WebServices, Certificados Digitales, y otra lista de cosas que son interesantes de poner a trabajar juntas y que son probadas en todos los sistemas operativos y navegadores populares.

 

Estos sitios esperan tener cantidades masivas de visitantes todo el tiempo con picos muy altos en ciertas campanas publicitarias y días especiales, así que hay que enfrentar el problema de la alta disponibilidad en serio, y si se le agrega que se usan muchas películas de flash (corriendo contra servicios web) algunas de ellas muy pesadas, entonces se tiene una combinación un poco complicada.

 

En este sitio se han implementado diferentes soluciones como un cluster de BD, un Cluster de servidores de presentación, cada servidor con 4 Gigas de RAM y sistemas redundantes de acceso a datos, etc, incluso tarjetas de red dedicadas para la comunicaciones entre las maquinas, la salida a internet e incluso la que me permite conectarme para tareas de administración.

 

Sin embargo, una de las tecnologías más interesantes que hemos empleado tiene que ver con la Red de Distribución de Contenido (CDN por Content Distribution Network) que se ha implementado, aquí algunas líneas al respecto. (No es la única, muchas decisiones de arquitectura de la aplicación, de infraestructura y de negocios deben tomarse e implementarse correctamente para que un sitio realmente soporte un tráfico fuerte, empezando por tener una idea de cuánto trafico se estima tener).

 

Que es una CDN?

 

Una red de distribución de contenido es un montón de infraestructura generalmente distribuida por todo el mundo (al menos puntos claves para internet) que guardan copias locales de ciertos tipos de archivos para entregue a los usuarios que los solicitan usando ventajas geográficas (están más cerca). (Usted de verdad no creía que youtube tenía los discos duros más grandes del mundo o sí?). De esta forma cuando un usuario solicita (a través del browser) un video, canción, imagen, o incluso una de las películas de flash, esta le es enviada desde el servidor que se encuentra más cerca. Más referencias e información en ingles aquí

Como toda esa infraestructura es arrendada se obtienen importantes beneficios en costos de hardware y uso del ancho de banda de su proveedor de hosting, y para los usuarios la experiencia es muy buena porque siente que su sitio es mucho más rápido de lo que en realidad es.

 

Como se usa?

 

Una de las cosas realmente increíbles de esto es la forma como funciona desde la perspectiva del desarrollador (es decir la mía) (la otra cosa increíble es como selecciona quien en realidad está cerca, pero ese es otro tema), para mi es transparente la localización del archivo, es decir no me importa.

 

Por ejemplo:

Supongamos que tengo unas imágenes muy grandes que quiero que se suban a esta red CDN, en mi estructura de archivos están en una carpeta images y yo las referencio como src=”images/imagengrande1.jpg” bueno, al afiliarse a la red de distribución de contenido ellos le van a crear un apuntador para su dominio del tipo assets.midominio.com, así que ahora en vez de apuntar el scr de la imagen como antes usted pone scr=http://assets.midominio.com/images/imagengrade.jpg, la magia ocurre cuando al hacer la solicitud un usuario por primera vez, la CDN busca en su propia lista de archivos, como no la encuentra va hasta su servidor y se la manda al usuario, pero al mismo tiempo saca una copia y la almacenan en sus propios servidores, es decir que entre más personas visiten el sitio de diferentes partes del mundo o del país, mas rápido funciona al sacar copias del contenido al momento de distribuirlo.

 

Es decir, usted no sube nada a la red, ella sola se alimenta a medida que sus usuarios piden los archivos, y no hay problemas de crosssite scripting por que los archivos si están en su dominio, solo que en otras maquinas.

 

Esto genera dos problemas, ambos fáciles de solucionar y que bueno, por el beneficio puedo vivir con ellos.

 

1. Obviamente si hay un cambio en el archivo que está cargado en la red, de alguna forma hay que notificarlo para que se actualice el archivo, sino la red de CDN va a seguir enviando el archivo desactualizado. Sin embargo todas estas redes tienen una consola de administración donde usted puede ver reportes de uso, pero también puede solicitar que un archivo sea actualizado, es un proceso automatizado generalmente basado en colas pero que dependiendo del trafico del sitio puede tomar desde minutos hasta horas, así que procure evitar los cambios.

 

2. Como en el proceso de desarrollo muchas veces hay que cambiar cosas (no debería ser, pero así es), es mejor tener alguna forma de “prender y apagar” el servicio, asi que una buen opción es poner en el archivo de configuración la ruta que se va a usar o en el load del control o en una función de JS o en CSS donde se pueda hacer el cambio en un solo sitio y afecte todos los archivos que se están cambiando.

 

Para tener una?

 

Los proveedores de este servicio son Akamai, LimeLight Network (ya que estoy usando) (por cierto que Akamai demando a LimeLight por 45 millones de dólares, según ellos Limelight violo la licencia concedida por MIT para usar la tecnología que permite hacer la reconstrucción de los URL de los archivos que se usan en la CDN), así que solo hay que ir y suscribirse, pagar el servicio mensual y listo hay diversos servicios incluido el de tener televisión de HD por internet hospedada en la red.

 

Espero que esto le ayude a salvar algunas horas y a construir sitios de altísima disponibilidad.

 

Juan Carlos Peláez

Arquitecto de Software

 

Keywords: Arquitectura, CDN, Content delivery Network, Content Distribution Network,

Friday, May 16, 2008 3:38:38 PM (SA Pacific Standard Time, UTC-05:00)  #    Comments [0] - Trackback
Arquitectura | Articulos de Desarrollo

Hace unos días instale en mi Nuevo MacBook Pro windows vista y otros sistemas operativos, ahora algunas actualizaciones de como ha sido la experiencia:

 

1. El teclado me costó un poco de trabajo pero no tanto como pensé, las teclas que más extraño son end, home, delete, etc, pero rápidamente descubir que usando Fn y las flechas puede hacer estas funciones, por ejemplo Fn flecha izquierda es Home, Fn flecha derecha es End, Fn Delete es delete (delete solo es Tab).,etc, las teclas de función también las extraño, pero se usan igual usando Fn y la función que uno quiere. Todas las teclas de función se usan para otras cosas pero todo está muy pensado, como subir el volumen, aumentar el brillo, etc.

 

2. El mouse si fue re fácil, le puse un mouse externo normal y listoJ, botón derecho y todo lo demás habilitado, cuando no estoy usando el mouse externo solo presiono control y click y eso es click derecho, o utilizo los dos dedos en el pad mouse y click. (esta máquina tiene pad mutitouche, estoy tratando de hacer aplicaciones que lo aprovechen del tipo surface… pero eso es otra historia)

 

3. Al principio tuve algunos problemas hibernando y dejando en stand-by, pero después de instalar el SP1 de Windows vista, se han solucionado esto problemas y todo el OS funciona perfecto.

 

4. Actualice mi maquina a 4 gigas de RAM, la compre por Amazon en 90 dólares, para un usuario normal puede no ser necesario, pero yo uso mucho maquinas virtuales con OS completos (incluso la red completa, 3 VMs al tiempo para pruebas de aplicaciones distribuidas) asi que entre más RAM mejor, ahora le puedo poner hasta 1.5 de ram a cada máquina virtual (con 2 maquinas) o 1 mega (con 3 Maquinas).

 

5. Un problema que me estuvo preocupando un rato tenía que ver con la temperatura que alcanzaba la maquina cuando estaba usando vista, se ponía muy caliente ,algunos lo han reportado en Internet, pero era solo en vista, no en Mac OS X, buscando un poco encontré una utilidad que permite configurar la velocidad mínima de los ventiladores del computador, aparentemente en vista están siempre a la mínima velocidad y por eso se calentaba tanto el computador.

 

Todo lo demás ha sido perfecto, la cámara, el audio, etc., ha funcionado de maravilla. Ahora estoy pensado en actualizar el Linux a fedora9, pero eso será tema de otro post.

 

Juan Peláez

Arquitecto de Software.

 

Keywords: Mac Book Pro, Windows Vista SP1.

Friday, May 16, 2008 1:57:49 PM (SA Pacific Standard Time, UTC-05:00)  #    Comments [0] - Trackback
MacBook Pro | Windows Vista
# Monday, April 07, 2008

Llevaba un par de meses buscando una computadora nueva, los requisitos eran sencillos: Que soportara 4 Gigas de Ram, que la tarjeta de video no estuviera dentro de la Board (integrada), que el disco fuera grande, etc., etc., lo que cualquiera quiere para su computadora.

Luego de muchas coincidencias y de buscar en varios almacenes y revisar las tarjetas de crédito, la financiación, y de más coincidencias, termine comprando esto:

DSC05469 (Small)  DSC05470 (Small) DSC05471 (Small)

Un MacBook Pro, la maquina que mejor corre vista según PC Magazine

Así que ahora que ya estaba desempacado y listo en mi escritorio, me puse a la tarea de instalar los sistemas operativos con los que trabajo ahora (Windows Vista y Fedora 8) y este fue el resultado:

Esta información es solo para mi propia consulta y entretenimiento, si usted decide seguir estas instrucciones sepa que no puedo hacerme responsable por el resultado. Por favor saque copias de seguridad de toda su información, algunas de las tareas descritas pueden borrar completamente su disco duro, inutilizar los sistemas operativos o hacerle perder muchas horas.

 

Primero instalé el OX, es decir seguí las instrucciones del instalador. (Mi maquina venia con MacOS 10.5.2), (Después de esto estuve mirando BootCamp, la utilidad incluida en mi Mac para instalar Vista, es un asistente que parece funcionar bastante bien, arranca con una pantalla para particionar el Disco, y pude ver en el manual que después asistiría también en la instalación de Vista, el CD de MacOS trae todos los Drivers para Vista así que el proceso de poner solo vista debe ser muy, pero muy sencillo. Si usted solo quiere Windows Vista en su Mac y quiere dual Boot le recomiendo usar BootCamp. )

(Nota: Si solo quiere Windows Vista solo meta el CD arranque con la tecla ALT desde el CD de vista y siga los pasos de instalación, según he visto en Internet esto le permite tener una maquina con solo vista  pero no puedo asegurarlo).

Yo quiero 3 sistemas y pues si ya pague por el MacOS seguro lo puedo probar algunas veces….

Entonces, no podía usar BootCamp, tenía que hacer la partición del disco usando comandos de MacOS, fui a la consola de terminal y reparticione el disco con el comando:

command$ sudo diskutil resizeVolume disk0s2 50G "MS-DOS FAT32" "Linux" 30G "MS-DOS FAT32" "Windows" 110G

Aquí lo que estoy diciendo es que deje 50G para el MacOS, 30 para el Linux y 110 para el Vista.  (Si este comando le da errores seguramente se deba a que la suma de las tamaños supera al disco duro total o al espacio libre, recuerde que el MacOS usa dos particiones, la del Sistema Operativo en sí mismo y la del Arranca EFI (Nuevo estándar recomendado por Intel para algún día reemplazar al viejo MBR))

Inserté el CD de vista reinicié la maquina y deje presionada la tecla Alt mientras arranca, arranque el instalador de Vista y seguí  las instrucciones, cuando me preguntó la ubicación le dije que quería usar la partición 4. (Por cierto se llama sda4.) Es importante que quede en esta partición. Revisando en Internet he encontrado que el BootCamp y otras utilidades necesitan que Vista quede en la última partición de la Cadena.

Durante la instalación vista recomienda formatear la partición a NTFS, así que hice el format y continué la instalación.

La instalación llega hasta un punto donde pide reiniciar, no pudo, pero no importa lo dejo así por ahora.

Luego instale Fedora 8, inserte el CD de fedora 8, apague la maquina y la prendí mientras tenia la tecla Alt presionada, arranque con el CD de Fedora (que curiosamente aparece como Windows en el arranque de Mac). Seguí  las instrucciones de instalación, cuando llego al punto que preguntaba qué  tipo schema de instalación quiero hacer, seleccioné Custom. (Esto es importante, si selecciona la opción por defecto, formatea todo el disco, si selecciona usar el espacio libre y schema por defecto es probable que no haya nada libre o que no le quepa el Linux).  Al seleccionar un schema personalizado aparece la tabla de particiones, así que seleccioné sda3, luego seleccioné la opción de editar: Me pregunta por la base de instalación selecciono “\”, y le dijo que formatee la partición usando ext3. (Esto me costó varias instaladas, estaba formateando con Fat32 y al final no podía instalar el GRUB).  También seleccioné opciones avanzadas del GRUB y le dije que lo copiará en la misma sda3. (No lo vaya a instalar en sda que daña los otros sistemas operativos).  Esta instalación si llega hasta el fin.

Reinicié la maquina, ahora entré al MacOS, copié los archivos de la utilidad rEFit en la raíz del MacOS (Machitosh HD) abrí la consola de terminal, fui al directorio efi/refit (cd into /efi/refi) y ejecuté el script enable.sh (run ./enable.sh)

Con esto ya tenía un menú que me muestra los 3 OS.

DSC05472 (Small)

Mac y Linux arranca pero Vista no, así que inserte el CD de vista, reinicie con ALT, arranque desde el CD de vista, no instaló, seleccioné la opción de reparación, se detecto un error del arranque (Boot), y se reparó.  Ahora puedo arrancar vista desde el menú de arranque del Mac.

 (Si no arranca haga nuevamente el proceso de reparación desde el Cd de Instalación de Windows Vista.)

Una vez que arranqué vista solo inserté el disco de MacOS (10.5.2) el setup de BootCam arrancó solo e instaló todos los driver, al reiniciar, mi calificación de Windows vista es de 4.8. Y corre realmente rápido.

Pruebo todos los OS y todos funcionan, mi maquina tiene 3 OS!!!

DSC05475 (Small) DSC05478 (Small) DSC05480 (Small)

PostData (Problemas)
Vista: Parece que no puedo hibernar o dejar en StandBy, eso es algo que uso bastante así que habrá que investigar más, parece que SP1 lo resuelve.

 

 

Juan Carlos Peláez

Arquitecto de Software.

 

Keywords: MacOS 10.5.2, MacBook Pro, Fedora 8, Windows Vista Business, rEfiT 0.11,  Sistemas Operativos, Portatiles.

Monday, April 07, 2008 8:46:00 PM (SA Pacific Standard Time, UTC-05:00)  #    Comments [0] - Trackback
Fedora 8 | MacBook Pro | MacOS | Windows Vista
# Tuesday, March 04, 2008

Este post tiene que ver con la forma como se invocan servicios Web usando certificados X.509.  En especial visto como una guía muy básica de resolución de problemas al momento de configurar los clientes.  (Que como ya debe saberse pueden ser aplicaciones de escritorio o Aplicaciones Web).

 

Antecedentes.

La seguridad es un elemento clave en la construcción de servicios web, especialmente cuando estos servicios web se exponen en internet.

Para poder construir servicios web seguros se pueden utilizar diversos métodos de autenticación y certificación de identidad, algunos de ellos incluyen:

 

· Tokens de Seguridad Personalizados

· Tokens de Seguridad del Contexto

· Tiquetes de Kerberos

· Usuario y Contraseña

· y Certificados X.509, que son los que nos interesan hoy.

 

Un certificado X.509 es básicamente una llave de encripción emitida y certificada por una entidad certificadora valida, sin entrar mucho en definiciones que se pueden encontrar mas en detalle en Internet, el certificado es un archivo que me emite una entidad reconocida, y que básicamente es un numero único que me han dado para yo entregar a mis clientes y saber que son ellos los que esta llamando mi servicio.

 

Escenario.

Un cliente me pide invocar un servicio web seguro desde mi propia aplicación web, (por ejemplo para mostrar los valores de un combobox), este cliente me provee un certificado X.509 y me informa la política de encripción, autenticación para este servicio. 

 

Solución.

1. Debo instalar el certificado Digital en la Maquina de desarrollo, en el ambiente de pruebas y en el servidor de Producción, es posible que el cliente me provea con dos direcciones web, una para prueba, otra para desarrollo, eso es independiente del certificado.

2. La instalación del certificado puede realizarse de diversas maneras, una muy fácil es copiar el certificado en una ruta de la maquina donde desea instalarse, luego hacer clic derecho del mouse e seguir el asistente

 

clip_image001

 

La siguiente pregunta del asistente es si desea ubicar el certificado en un almacén determinado o si desea que el asistente lo instale basado en la información del certificado, esta es una de esas típicas preguntas que no se sabe bien que contestar o que significa. El repositorio de certificados esta divido por niveles.

El primer nivel indica si se quiere almacenar el certificado en la maquina local, en el perfil del usuario o en la cuenta del servicio con la que corre el OS.

 

luego viene un segundo nivel que incluye personal, autoridades, entidades certificadoras, directorio activo, entre varias otras, así que lo primero es saber donde colocar el certificado, una buena guía es esta que muestra las ubicaciones por default que se utilizan para buscar los certificados digitales, así, si la aplicación es un web service o una aplicación de escritorio que intenta firmar o encriptar el mensaje va a buscar en el User Personal Store.

 

clip_image002

 

3. Ahora que tengo el servidor instalado debo configurar el webconfig y la política que quiero seguir para este certificado. (hay muchas formas de hacerlo, algunos no usan el web config, sino que crean la política en ejecución, etc. esta es solo una forma de abordar el problema).  En e web config va algo como esto:

 

<!-- WSE 2.0 -->
    <section name="microsoft.web.services2" type="Microsoft.Web.Services2.Configuration.WebServicesConfiguration, Microsoft.Web.Services2, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />

En la parte de configuración - </configSections> (ojo, esto en  VS2003, en VS2005 puede variar)

y claro, la sección donde en realidad hago la configuración (en web config)

<microsoft.web.services2>
    <diagnostics>
      <detailedErrors enabled="true" />
      <trace enabled="true" />
      <policyTrace enabled="true"
       input="receivePolicy.webinfo"
       output="sendPolicy.webinfo"/>
    </diagnostics>
    <tokenIssuer>
      <autoIssueSecurityContextToken enabled="true" />
    </tokenIssuer>
    <policy>
      <cache name="policyCache.config" />
    </policy>
    <security>
      <x509 storeLocation="LocalMachine" verifyTrust="false" allowTestRoot="false" allowRevocationUrlRetrieval="true" allowUrlRetrieval="false" />
    </security>
  </microsoft.web.services2>

 

esta es la versión de desarrollo o de pruebas, como puede ver esta habilitado el trace de la política <policyTrace enabled="true"... y se esta generando archivos con información de las peticiones y las respuestas (input="receivePolicy.webinfo" output="sendPolicy.webinfo"). Para que estos archivos se puedan crear, son súper útiles, debe habilitarse la cuenta con la que esta corriendo la aplicación (ASP.NET generalmente) para que escriba en el directorio donde se esta ejecutando.

 

Lo otro importante de este segmento es el nombre de la política, en este caso policyCache.config. lo que se esta diciendo aquí es que en ese archivo config estará la definición completa de la política, pueden haber tantas políticas como se quiera. y claro, la seguridad usando X.509 y diciendo en que almacén esta el certificado (storeLocation),

 

Ahora el archivo de la política es como esto:

 

<?xml version="1.0" encoding="utf-8"?>
<policyDocument xmlns="http://schemas.microsoft.com/wse/2003/06/Policy">
  <mappings xmlns:wse="http://schemas.microsoft.com/wse/2003/06/Policy">
    <!--The following policy describes the policy requirements for the service: http://algo.asmx .-->
    <endpoint uri="algo.asmx">
      <defaultOperation>
        <request policy="" />
        <response policy="" />
        <fault policy="" />
      </defaultOperation>
    </endpoint>
    <endpoint uri=http://algo.asmx>
      <defaultOperation>
        <request policy="#Encrypt-X.509" />
        <response policy="" />
        <fault policy="" />
      </defaultOperation>
    </endpoint>
    <endpoint uri=http://algo.asmx>
      <defaultOperation>
        <request policy="#Encrypt-X.509" />
        <fault policy="" />
      </defaultOperation>
    </endpoint>
  </mappings>
  <policies xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://schemas.xmlsoap.org/ws/2002/12/policy" xmlns:wssp="http://schemas.xmlsoap.org/ws/2002/12/secext" xmlns:wse="http://schemas.microsoft.com/wse/2003/06/Policy" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/03/addressing">
    <wsp:Policy wsu:Id="Encrypt-X.509">
        <!--The Confidentiality assertion is used to ensure that the SOAP Body is encrypted.-->
        <wssp:Confidentiality wsp:Usage="wsp:Required">
            <wssp:KeyInfo>
                <!--The SecurityToken element within the KeyInfo element describes which token type must be used for Encryption.-->
          <wssp:SecurityToken>
            <wssp:TokenType>http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3</wssp:TokenType>
            <wssp:TokenIssuer>C=US, O="VeriSign, Inc.", OU=VeriSign Trust Network, OU=Terms of use at https://www.verisign.com/rpa (c)05, CN=VeriSign Class 3 Secure Server CA</wssp:TokenIssuer>
            <wssp:Claims>
              <!--By specifying the SubjectName claim, the policy system can look for a certificate with this subject name in the certificate store indicated in the application's configuration, such as LocalMachine or CurrentUser. The WSE X.509 Certificate Tool is useful for finding the correct values for this field.-->             <wssp:SubjectName MatchType="wssp:Exact">C=US, S=Wisconsin, L=Milwaukee, O=CLIENTE Company, OU=IS Technical Services, CN=www.cliente.com</wssp:SubjectName>
              <wssp:X509Extension OID="2.7.34.87" MatchType="wssp:Exact">0GJdsds3UdP3fsdtretterERFE4=</wssp:X509Extension>
            </wssp:Claims>
          </wssp:SecurityToken>
            </wssp:KeyInfo>
            <wssp:MessageParts Dialect="http://schemas.xmlsoap.org/2002/12/wsse#part">wsp:Body()</wssp:MessageParts>
        </wssp:Confidentiality>
    </wsp:Policy>
  </policies>
</policyDocument>

 

Donde he puesto en negrilla los valores que son claves, vienen del certificado y se pueden ubicar usando alguna de las herramientas enumeradas mas adelante.

 

Ya podía verse desde aquí la introducción a los conceptos como endpoint que luego serian aun mas completos en WCF pero eso es otra historia.

 

Herramientas.

Utilidad para ver información de los certificados (con código fuente)

Configurar una consola para gestionar los certificados digitales.

La herramienta de gestión de información de los certificados incluida con WSE*

Referencia

Como Firmar un Mensage usando un certificado X.509

 

Espero que esto le ahorre un par de horas, en resumen, el certificado se instala en una de las ubicaciones de búsqueda por defecto o toca cambiar la configuración en los archivos de config.  Luego se modifica el archivo webconfig y los archivos de políticas con la información que se saca del certificado usando una de las herramientas enumeradas, para poder revisar errores, se habilitan los servicios de trace.

 

Juan Peláez

Arquitecto de Software

 

keywords:  Web Services, WSE, certificados X.509, encriptar, firmar, servicios web, herramientas para configurar certificados digitales, políticas de configuración, certificados digitales. seguridad en servicios web, servicios seguros, identificación de clientes, identidad de clientes.

Tuesday, March 04, 2008 8:10:17 PM (SA Pacific Standard Time, UTC-05:00)  #    Comments [0] - Trackback
Visual Studio | VS2005 | Web Services
# Friday, February 22, 2008

Estoy empezando una seria de artículos sobre las formas como he resuelto algunos problemas típicos de implementación de workflows en Sharepoint Designer y de pronto en VS2005/2008.  Estos post no se basan en la tecnología en si misma sino en la solución de un problema. Por lo tanto pueden haber tantas soluciones como programadores / diseñadores de procesos se enfrenten al él. Si usted conoce una forma más inteligente, rápida o recomendada para solucionarlo no deje de enviarme un comentario. 

 

(No hay que dejar de tener presente que:

a. estas soluciones se enfocan en poder transferir el conocimiento a usuario no desarrolladores y usando solo las herramientas out-of-box disponibles

b.se asume que el usuario ya usa infopath, Sharepoint Designer, Visual Studio 2005 y sharepoint.)

 

Problema 1. La primera (o la segunda o la n) tarea de un workflow se asigna dinámicamente  dependiendo de información diligenciada por el usuario.

 

Este es un escenario típico. La organización tiene 50 managers (gerentes) en el formulario hay un campo que identifica el área a la que esta asignada el gasto, la actividad de aprobación del gasto debe asignarse al gerente de esa área.

Solución.

Preparando la fuente de Datos.

1. Cree una lista en Sharepoint llamada _Areas. (el nombre tiene un caracter "_" para ayudarme a identificar las listas que usare como fuentes de datos).

2. En esta lista cree un campo llamado Nombre (string), eMail (String), Cuenta (Usuario/Grupo)

3. En esta lista cree los 50 gerentes.

Conectando la fuente de datos con el formulario.

(en este caso el formulario esta hecho con InfoPath, otros escenarios pueden requerir conectar la entrada de datos con la lista que se creo antes).

1. En InfoPath cree una fuente de datos, en el menu Tools/Data Connections. 

2. adicione una nueva conexión, seleccione la fuente de datos como una lista de Sharepoint.  Busque la lista de areas que creo. Coloque un nombre a la conexion de datos. Listo, si lo edita deberia ver algo como esto:

CreateDataSource

3. la fuente de datos esta disponible ahora para todo el formulario, seleccione un campo, en este caso manager que es un desplegable que alcanza a verse en la imagen anterior y configure la fuente de datos de ese campo con la conexión que acabo de crear, debería verse algo como esto.

 

DropDownDataConexion

Bien, ahora cuando el usuario diligencie la forma puede seleccionar el gerente que autoriza esto o el área a la que pertenece el gasto en este caso., esta información quedara almacenada como un campo en la librería de documentos de sharepoint asociada a este formulario.  Con esa información ahora podemos tomar decisiones.

 

Crear Workflow.

Bueno ahora en SP designer se puede usar la opción de nuevo workflow, se selecciona la lista de documentos que sobre la que se quiere correr el workflow (que debe ser la misma que se alimenta del formulario que creamos antes). y se llega a la ventana de asistente de pasos del workflow.

 

Crear la acción dentro del Paso (Actividad) del Workflow.

Ok, ahora si la solución,

 

1. Se crea una acción del tipo Set Workflow Variable.

2. Se hace click en workflow variable, se selecciona crear nueva variable, se le puede poner un nombre como PreApproveUser, de tipo string.

3. Se  hace clic en value y en la opción de función, eso abre la ventana de asignación de valores que es ocasionalmente un poco complicada de usar, así que aquí una foto del resultado final y la explicación de que significa esto

 

CreateUserNameVariable

i. Se selecciona la lista de la que quiero sacar la información, en este caso _Departments, luego cual es la variable que quiero, AD Name en este caso, luego le digo como quiero obtener esa información, por ejemplo, que cuando el manager de la lista _Departments sea igual al manager de la lista procurement.

ii. a veces es más fácil pensarlo como un select de SQL, seria así:  select AD User from _Departments Where _Departments:Manager = Procurement Manager.

 

4. así que ahora tengo el nombre del usuario del AD en una variable del workflow llamada PreApproveUser y esa variable puedo usarla para enviar correos, asignar tareas, etc.

 

5. creo una nueva acción del tipo Collect User Data. Construyo la información que quiero recopilar y le asigno la tarea a la variable PreApproveUser.

 

6. Como siempre el resultado de la tarea debo asignárselo a una variable del workflow.

 

7. sigo el proceso....

 

De esta forma puede resolverse un problema común de desarrollo de procesos con Sharepoint Designer, asignación dinámica de tareas basada en información ingresada por el usuario. También sirve este ejemplo para ilustrar otras cosas interesantes como por ejemplo el uso de fuentes de datos en formularios de sharepoint.

 

Juan Carlos Peláez

Arquitecto de Software.

 

keywords: sharepoint designer, infopath, bpm, problemas comunes workflow, juan pelaez, fuentes de datos en infopath, variables de workflow, wss 3.0, moss 2007.

Friday, February 22, 2008 5:18:46 PM (SA Pacific Standard Time, UTC-05:00)  #    Comments [0] - Trackback
BPM | InfoPath | Sharepoint | Sharepoint Designer | WWF

A continuación el listado de las actividades que desarrollé con Microsoft Latam en 2007. Gracias a Sandra Marín, Jorge Oblitas, Ivanov Cepeda, José Álvarez y todos los miembros de la división de DP de Microsoft Latam que confiaron sus eventos, contenidos y mensajes en mi.  Espero haber estado a la altura y que me sigan invitando.

Juan.

 

Fecha

Evento

Ciudad

Actividad

Audiencia

Asistentes

Marzo

Andean Influencers Framework Meeting

Bogota

Speaker

Como realizar mejores presentaciones en Eventos de Tecnología

Influencers de Microsoft Colombia

10

 

 

 

 

 

 

Abril

DevDays

Medellín

Speaker

Sesión 2 Creando interfaces espectaculares con Microsoft Expression

Desarrolladores Profesionales

50

Abril

DevDays

Cali

Speaker

Sesión 2 Creando interfaces espectaculares con Microsoft Expression

Desarrolladores Profesionales

70

 

 

 

 

 

 

Junio

DevDays

Medellin

Speaker

Sesión 3

Pruebas de Software usando VSTS. 

Desarrolladores Profesionales

30

Junio

DevDays

Cali

Speaker

Sesión 3

Pruebas de Software usando VSTS. 

Desarrolladores Profesionales

55

Junio

DevDays

Cartagena

Speaker

Sesión 3

Pruebas de Software usando VSTS

Desarrolladores Profesionales

70

 

 

 

 

 

 

Octubre

Foro Regional de Arquitectos

Bogota

Web 2.0

Arquitectos

45

 

 

 

 

 

 

Noviembre

CartagenaDotNet Community Event

Cartagena

Speaker Principal. Desarrollo de aplicaciones usando la Suite Expression. Blend, Silverlight y VS.