Usando redes de Distribución de Contenido.

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,

Update – Windows Vista corriendo en MacBook Pro

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.

Instalando Windows Vista y Fedora 8 en un MacBook Pro

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.

Invocando Servicios Web de Forma Segura con Certificados x.509

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.

Sharepoint Workflow Solutions – Problema 1. Asignar tareas de forma dinámica.

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.

Actividades Microsoft 2007

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.

Desarrolladores Profesionales

45

Noviembre

ISV Strategy Day

Medellin

Speaker Sesión 2. Desarrollo de aplicaciones usando la suite expression.Flujos de Trabajo entre el Disenador y el programador

ISV Arquitectos, Desarrolladores

30

Noviembre

ISV Strategy Day

Bogota

Speaker Sesión 2. Desarrollo de aplicaciones usando la suite expression.Flujos de Trabajo entre el Disenador y el programador

ISV Arquitectos, Desarrolladores

65

Noviembre

Andean RoadShow

Quito – Ecuador

Speaker Sesión 1.Mejorando mi aplicación PHP con FastCGI y IIS, SQL Server y Visual Studio 2005

Desarrolladores Profesionales

40

Noviembre

Andean RoadShow

Manta – Ecuador

Speaker Sesión 1.Mejorando mi aplicación PHP con FastCGI y IIS, SQL Server y Visual Studio 2005

Desarrolladores Profesionales

80

Diciembre

Andean RoadShow

Guayaquil – Ecuador

Speaker Sesión 1.Mejorando mi aplicación PHP con FastCGI y IIS, SQL Server y Visual Studio 2005

Desarrolladores Profesionales

25

Diciembre

Andean RoadShow

Bogota (Mañana)

Speaker Sesión 1.Mejorando mi aplicación PHP con FastCGI y IIS, SQL Server y Visual Studio 2005

Desarrolladores Profesionales

40

Diciembre

Andean RoadShow

Bogota (Tarde)

Speaker Sesión 1.Mejorando mi aplicación PHP con FastCGI y IIS, SQL Server y Visual Studio 2005

Desarrolladores Profesionales

5

Diciembre

Andean RoadShow

Cartagena

Speaker Sesión 1.Mejorando mi aplicación PHP con FastCGI y IIS, SQL Server y Visual Studio 2005

Desarrolladores Profesionales

120

 

 

 

 


Presentaciones a Clientes

 

Cámara de Comercio de Bogotá.

 

WCF – Presentación al grupo de tecnología. (10 arquitectos, desarrolladores, vicepresidente de tecnología)

 

AJAX – Presentación al grupo de tecnología. (10 arquitectos, desarrolladores, vicepresidente de tecnología)

 

Molinos Flor Huila

 

WCF – Presentación al grupo de Tecnología.

 

Grupo Aval

 

Pruebas de Software usando VSTS (5 Arquitectos)

 

 

 

Juan Carlos Peláez

 

Arquitecto de Software.

Sharepoint Designer Workflow – El usuario no puede editar la tarea

En los últimos días he estado trabajando en procesos y formularios que utilizan las herramientas office de Microsoft, esto es InfoPath para las formas y Sharepoint Designer para los procesos (Workflows)

Aunque todo lo que he venido haciendo se puede lograr en VS2005 con las extensiones para sharepoint (incluso de esta forma se obtiene mayor control de los resultados), uno de los requerimientos específicos era utilizar estas herramientas para poder pasar el conocimiento a usuarios no desarrolladores.

Después de un par de días ya pude realizar el formulario y el proceso, lo publique en el servidor de pruebas y pedí a los usuarios retroalimentación, todo parecía ir bien hasta que tuvieron que realizar sus tareas y se les notifico que no tenían acceso. Luego de verificar todos los permisos en la lista de tareas, los formularios, el gestor de perfiles, el AD, etc. pues nada esto es un bug. Un par de horas de búsqueda en Internet me trajo esta solución que pongo aquí para que alguien se ahorre un par de horas de la vida.

El Problema.

Un formulario de Infopath, un workflow asociado a la librería de formas, un usuario con permisos limitados,

el usuario puede llenar formas (si)

El usuario puede ingresar a la lista de tareas desde un link (si)

El usuario puede ver el link de editar tarea (si)

El usuario puede editar la tarea (No. Acceso denegado). No se supone que funciones de esta forma.!!!

La Solución

Después de un par de horas de mirar en internet encontré este foro donde lo resolvieron. , para los que les gusta en español, la solución aquí.

Abra el sitio con Sharepoint designer. Clic derecho en el folder workflows, seleccione propiedades., en el tab de seguridad haga clic en el enlace “Manage Permissions using the browser”.

WorkflowFolderSecurity

Se abrirá una nueva ventana del browser, en mi caso se habían perdido los permisos heredados y mi usuario estaba en un nivel de permisos incorrecto, cambie el nivel de configuración para que volviera a heredar del sitio y listo.

Juan Carlos Peláez

Arquitecto de Software

Keywords: Sharepoint Designer, Workflow, Problemas, Usuario, Tareas, Permisos, Juan Carlos Peláez, Procesos, Formularios, InfoPath, MOSS 2007, WSS 3.0

Modificar la forma como arranca un Workflow de Sharepoint creado con Sharepoint Designer.

Cuando se crea un Workflow con Sharepoint Designer se utiliza un asistente, es uno de los argumentos de venta, workflows sin necesidad de código.

La primera pregunta del asistente es esta:

clip_image001

Que le permite a uno determinar la forma como debe arrancar el workflow y su relación con los items de la lista, es decir, si el workflow arranca cuando se crea el item, se modifica o si arranca manualmente.

Bien el problema es que esta pantalla no vuelve a verse nunca más después de este paso (yo nunca la encontré), entonces si hay problemas con el modelo de arranque del workflow se queda uno varado.

La solución para modificar la forma que arranca el workflow es abrir con un editor de texto el archivo (puede usar el mismo del SPD) como se ve aquí:

clip_image002

luego se pueden modificar estas lineas (eliminandolas), lo que modificará la forma como arranca el workflow de acuerdo con la que se elimine.

<Association
ListID=”{A245AE99-E68F-4500-9B36-6DD167FF676F}”
TaskListID=”{EAE51F29-83F8-4C88-8A36-D9417969E07C}”
StartManually=”true” ‘Workflow arranca manual
StartOnCreate=”true” ‘Workflow arranca cuando se crea el item
StartOnChange=”true” ‘Workflow arranca cuando se cambia el item.
>

Ahora, todo tiene un porque, la razón por la que me vi enfrentado a esto fue que cree un Workflow, le puso a que se iniciara de forma automática y nada paso, nunca arranco, así que tuve que cambiarlo a inicio manual y una cosa llevo a la otra…, esta fue la solución.

Ahora hoy he encontrado que la razón por la que no pude arrancar mi workflow de forma automática tiene que ver con el SP1 de WSS 3.0 y MOSS 2007. Como se indica aquí. ( en español en este buen blog de Sharepoint)

Juan Carlos Peláez

Arquitecto de Software.

Keywords: Sharepoint, MOSS2007, WSS3.0, Workflows, Declarative Workflows, Sharepoint Designer, SP1, Juan Carlos Peláez.

VS2005 – Web Application Projects o Web Site Projects? y SharePoint

Al usar VS2005, una de las cosas con las que se encuentran los usuarios (que vienen de VS2003) es un nuevo modelo de compilación de los proyectos Web. (Web Site Project). Hay varias diferencias entre un modelo y otro, desde el sitio donde se seleccionan para crear un nuevo proyecto hasta los resultados de compilación. Para muchas cosas esto es muy importante, así que aunque este no es un tema nuevo vuelvo a él para referencia propia y de otros.


En el modelo Web Application:


· Toda la aplicación se compila en un solo assembly (dll) que queda en la carpeta bin.


· Todas las referencias, y archivos se relacionan en el archivo del proyecto.


· Todo el proceso de compilación usa MSBuild así que se puede personalizar lo que pasa antes, durante y después de la compilación.


En el Modelo Web Project:


Se generan muchos dlls que viven en el directorio bin, es un poco complicado saber para que es cada uno y cual es cual.


Para mi entonces la principal diferencia esta relacionada con la compilación, y aquí es donde esto se vuelve importante hoy. (3 años después de VS2005.)


Ahora estoy desarrollando algunos proyectos para Sharepoint 2007, hay muchas opciones pero una interesante es crear una aplicacion asp.net normal, agregar las referencias a Sharepoint y publicarla en el directorio _layouts.


Para hacer esto y que quede bien es obligatorio que el assembly de la aplicación web sea uno solo, es decir que sea un proyecto Web Application. , hay otros escenarios como usar Enterprise services en los que eso del ensamblado único también es importante. Asi que para mucha gente, esto resulto tan importante que se creo una adición para VS2005 que permite volver a tener los proyectos Web Applications.


A continuación algunas fotos de mi maquina de desarrollo (gracias clo J) que permiten ver las diferencias al momento de creación, los resultados de compilación y el deployment resultante en sharepoint.


Cuando se entra a Visual Studio y se selecciona nuevo web site se ve una pantalla como esta:


clip_image001


si se crea una pagina, un botón, una clase, se compila y se publica (Publish) se obtiene algo como esto:


clip_image002


Como pueden ver hay dos dlls, una llamada application Code y Otra llamada App_web_xxxx.dll.


Para tener el soporte para Web Applications se puede ir al sitio de Microsoft y rápidamente instalarlo siguiendo estos pasos:


1. Primero Aplicar este parche y


2. Luego descargar el complemento de aqui.


Luego de instalar esto se siguen teniendo los web projects, pero también esta ahora la opcion de web applications, solo que se encuentran en otro lado como se puede ver aquí: (new Project, Web…)


clip_image003


Y al agregar la misma página, el mismo botón, la misma clase que en el proyecto anterior, compilar y publicar se obtiene esto:


clip_image004


Como se ve una sola dll con el mismo nombre del proyecto.


Pues bien, esta dll es la que se puede colocar en el carpeta BIN del directorio virtual del sitio sobre el que se esta creando la aplicación en sharepoint.


asi : (En este caso mi aplicación dentro del Sharepoint se llama ProjectServer)


clip_image005


Y las páginas del compilado si quedan en el directorio layouts:


clip_image006



Personalmente me gustan los proyectos que usan webApplications, y hasta el momento no he encontrado ninguna restricción o algo que no pueda hacer, incluso en otro proyecto que usaba Enterprise Services desde una de las clases del Web Site fue perfecto para registrar con facilidad los componentes en la consola de COM+.



espero que sea de ayuda.



Juan Carlos Peláez


MCTS


Distributed Applications



Keywords: VS2005, Sharepoint, Web Application Projects, Web Projects, Sharepoint Applications, Juan Peláez, MCTS Distributed Applications. Build, deploy, Desarrollo para Sharepoint, Consultor en Sharepoint.


Vive Windows Vista


Gracias a la amable invitación de Microsoft, la comunidad de IT-Pros DC y Bogota DotNet el sabado 9 de Febero tuve oprtunidad de participar como speaker en el evento Vive Windows Vista. que tuvo lugar en la universidad Piloto de Colombia (Cra 9 No. 45a-44)


La agenda completa en este enlace aquí


Mi sesion estuvo relacionada con el framework 3.5, especialmente los nuevos modelos y metodologías de acceso a datos con LINQ.


Adjunto aquí la presentación utilizada, que he llamado LINQ 101 para todos aquellos que quieren introducirse al mundo de LINQ ahora que esta disponible el framework 3.5 y las herramientas de desarrollo de VS2008.


Juan Carlos Peláez

Arquitecto de Software

MCTS Distributed Applications.


LINQ 101.pptx (314.09 KB)



keywords: LINQ, VS2008, Introduccion LINQ, Presentacion LINQ, Que es LINQ, Juan Carlos Peláez.