Hola Amigos Bienvenidos!!!

Desde el momento en que mi hermano me comento la idea de poder compartir información a través de un medio como este me parecio una fantástica idea.


Yo como muchos de ustedes nos encanta investigar temas relacionados a la tecnología y nos vemos maravillados al poder encontrar tanta información interesante por la web.


En el tiempo que voy trabajando como miembro del SWAT Team en Microsoft Perú, he podido conocer muchas tecnologías sensacionales las cuales me han motivado a seguir investigando y a maravillarme con la amplitud de conocimientos que se comparten en la web.


Es por eso que me parecio una genial idea poder compartir con ustedes algunos temas interesantes que he podido aprender en cuanto a Tecnología Microsoft.


Gracias,
Piero Marchena Sekli

Generación de Alertas Automáticas con Sharepoint Designer 2007

Como están geeks? Este post está directamente relacionado con el primero referente a columnas calculadas para obtención de duraciones. Para este escenario, se requiere establecer un mecanismo de alertas automáticas en base a la Fecha de Inicio y Fecha de Fin establecidos en una lista, de tal manera que al 50%, 75% y 100% de la obra se envíen correos a roles establecidos dentro del proceso; el requerimiento involucra también la posibilidad de modificar la fecha de fin del proyecto, lo que debería reactualizar las alertas mencionadas.


Descripción técnica de la solución:
La ejecución de una acción definida en los workflows de caja o diseñados con Sharepoint Designer depende de que se realice un cambio sobre el elemento de contenido (creación, eliminación o modificación de un elemento de lista o biblioteca documental), generando una reacción inmediata producto de la detección de dicho cambio; pero en muchas ocasiones se requiere que las acciones definidas en un Workflow se disparen automáticamente en base a un tiempo o parámetro pre-definido, sin necesidad de realizar una acción anterior inmediata por parte del usuario.



Si bien es posible recurrir al desarrollo para generar workflows de tipo maquina-estado (nombre como se le conoce a estos tipo de workflows), es importante tener bien claro que siempre que se pueda evitar el desarrollo, hay que hacerlo (esto por el mantenimiento y versatilidad que el flujo tendrá para el usuario final).


Sharepoint Designer permite generar un mecanismo de Alertas Automáticas, que respondan a una Fecha en especifico, y sin tener que realizar una acción anterior inmediata; para esto dispone de una Acción de nombre Detener hasta, en la cual se puede definir en qué fecha y hora en especifico las acciones que se encuentren debajo de la mencionada se ejecutaran.

En este escenario, la lógica que se estableció fue la siguiente:
1. Se asocia un Workflow a la lista que contiene los cálculos de Fecha de Vencimiento al 50%,  75% y 100% del Proyecto; este Workflow generara en una lista separada (Tareas) 3 elementos que definirán las alertas automáticas requeridas y obtendrán la información de su duración de la lista de columnas calculadas:
a. Alerta Obra al 50%
b. Alerta Obra al 75%
c. Alerta Obra al 100%


2. Se asocia un Workflow a la lista Tareas con la acción Detener hasta, en donde se define la Fecha de Vencimiento como la Fecha establecida para cada uno de los elementos; esto provocara que cualquier acción que se incluya debajo de la acción Detener hasta se ejecutara solo después de la fecha y hora establecida.


Sin embargo, la problemática definida menciona que de existir un cambio en la lista Duración Total de la Obra, las alertas deben reconfigurarse automáticamente; es por esto que el Workflow final asociado a la lista de Duración Total de la Obra se define según la grafica siguiente:



 Flujo asociado a la lista de Duración Total de la Obra


Como se puede apreciar, se definen primero 3 acciones que eliminan los elementos definidos en la lista de Tareas (Alerta Obra al 50%, Alerta Obra al 75% y Alerta Obra al 100%), y acto seguido, estos 3 elementos se vuelven a generar. Esto es requerido puesto que los 3 elementos iniciales pueden tener ya un flujo “en cola” asociado al momento de definir por primera vez la Fecha de Fin de la Obra, por lo que al crearlos de nuevo generamos una solicitud diferente de acciones a ejecutar (con las nuevas fechas calculadas asociadas a los elementos correspondientes).


Al momento de generar nuevamente el elemento, se le incluye la siguiente información:
 Titulo: nombre del elemento que define la alerta
• Fecha de Vencimiento: al cual se le pasa la fecha de vencimiento calculada (para el 50%, 75% o 100%)
• Roles definidos para el envío de alertas: el elemento de alerta definido en la lista de Tareas contendrá además los correos de los roles a quienes se deberá notificar una vez lanzada la misma.


Por otro lado, el Workflow asociado a la lista de Tareas se activara automáticamente al momento de detectar un cambio (que en este caso, es la eliminación e inserción de nuevos elementos, por lo que finalmente se dispararan en paralelo 3 flujos (uno por cada elemento que se genera). En la grafica siguiente pueden apreciar el diseño final:



Flujo asociado a la lista de Tareas 


Como se puede apreciar, se define la Acción Detener hasta, y el parámetro Fecha de Vencimiento del elemento correspondiente dentro de la lista de Tareas; una vez se cumpla la fecha definida, se envían los correos de notificación a los roles establecidos.


Nota.- En la práctica, a pesar de eliminar un elemento dentro de una lista, si este tiene asociado un Workflow, este permanece “en cola” y no se elimina. Sin embargo, al ejecutarse, no dispone de referencia alguna a las columnas del elemento de lista correspondiente. En el escenario descrito, este comportamiento permite que,  a pesar de que los flujos de elementos eliminados permanezcan vivos, no se envíen correos anteriores de darse un cambio en las fechas; esto pues los correos de notificación son extraídos del mismo elemento, y al no existir, no encuentra dicha referencia, por lo cual el correo no puede ser enviado, y solo son enviadas las notificaciones de los últimos elementos creados.


Éste procedimiento me ayudó a generar alertas en periodos distantes; no recomiendo que lo usen si se trata de alertas con tiempos muy cercanos (horas por ejemplo), pues Sharepoint no es exacto al momento de enviarlas. Oh Yeah! 

Columnas calculadas para la obtención de Fechas y Duraciones en Sharepoint 2007

En  un cliente se presentó la siguiente problemática: Se requiere de una lista en la cual se registre la Fecha de inicio y Fecha final de la ejecución de un proyecto. Estos hitos son importantes puesto que en base a estos se requiere establecer un mecanismo de alertas automáticas (el cual comentaré en un post siguiente), de tal manera que al 50%, 75% y 100% del proyecto se envíen correos a roles establecidos dentro del proceso.

Para poder generar alertas automáticas en los porcentajes de avance definidos, se requiere obtener las fechas de vencimiento para los mismos. Para esto, se ha realizado la siguiente lógica:
1. Obtener la Duración total basado en la Fecha de Inicio y la Fecha de Fin
2. Obtener la cantidad de días (Factor días) que deben pasar para encontrarse al 50% y 75% del proyecto respectivamente (el 100% es la Fecha de Fin)
3. Sumar la cantidad de días obtenida a la Fecha de Inicio, para obtener la Fecha de Vencimiento del Proyecto al porcentaje establecido.



Todas estas columnas son parte de una lista de nombre Duración Total del Proyecto.Para cumplir con esta lógica, se requiere generar Columnas Calculadas dentro de la lista; a continuación se detalla los cálculos requeridos:



Columna calculada Duración: La fórmula establecida no incluye fines de semana:


=IF(AND((WEEKDAY([Fecha de Fin];2))<(WEEKDAY([Fecha de Inicio];2));((WEEKDAY([Fecha de Inicio];2))-(WEEKDAY([Fecha de Fin];2)))>1);(((DATEDIF([Fecha de Inicio];[Fecha de Fin];”D”)+1))-(FLOOR((DATEDIF([Fecha de Inicio];[Fecha de Fin];”D”)+1)/7;1)*2)-2);(((DATEDIF([Fecha de Inicio];[Fecha de Fin];”D”)+1))-(FLOOR((DATEDIF([Fecha de Inicio];[Fecha de Fin];”D”)+1)/7;1)*2)))


Notas.-
• En muchos escenarios, es recomendable consultar el formato de formula utilizado en algunas funciones de Excel para establecer la columna calculada, pero esto no se da en todos los casos (en la columna calculada de Duración, no se pudo hacer uso de la formula común de Excel para obtener duración entre 2 fechas)


• Tener siempre cuidado en el delimitador utilizado para las formulas(el uso de la “,” o “;” dependen de la configuración regional del servidor)

 Columna calculada Factor días(al 50):
= (0,5*Duración)/1


Columna calculada FechaVenc.(al 50%):
= [Fecha de Inicio]+ [Factor días(al 50)]



De la misma manera, las columnas de Factor días y Fecha de Vencimiento se deben definir para el 75% de la ejecución de la obra.



Ej. Formula para el Cálculo de  Duración


Ej. Formula para el Cálculo de  Duración


Para mayor detalle sobre la columna calculada de duración, revisar los siguientes enlaces:


http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1685473&SiteID=1
http://www.sharepointu.com/forums/t/2429.aspx


Esta lógica me ayudó a definir los hitos del Proyecto de forma automática; de cambiar la fecha de fin del proyecto, éstos hitos se alteran de la misma forma. En un post siguiente les comentaré cómo complementé ésta acción con un workflows de alertas automáticas, el cual enviaba alertas bajo estos hitos. Oh Yeah!

Bienvenidos a nuestro Blog!

Desde hace ya un tiempo que tenia la intención de disponer de un espacio en el cual pudiese colaborar humildemente con los conocimientos que he obtenido durante el tiempo en que he estado en contacto con la Tecnología Microsoft, la cual, como a todos ustedes, me da grandes satisfacciones y me permite ver muchos amaneceres 🙂


Es esa necesidad del geek de saber siempre más y encontrar solución a problemas, a veces solo por diversión, la que mueve a muchos de nosotros a compartir los conocimientos, y citando una frase que hace mucho encontré navegando:”Compartir el conocimiento es una acción de seres inteligentes, que saben que crece a medida que se lo comparte…


A través de éste primer blog, quiero agradecerle al Administrador y a todos los miembros de la Comunidad, y espero que nuestra contribución (la mia, y la de mi hermano) sea de ayuda para todos.