<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://msmvps.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Visual Studio Team System : Workflows</title><link>http://msmvps.com/blogs/ffagas/archive/tags/Workflows/default.aspx</link><description>Tags: Workflows</description><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP2 (Build: 40407.4157)</generator><item><title>[VS2008 – WWF – MOSS 2007] ¿Cómo crear tareas paralelas en MOSS 2007 desde Visual Studio 2008 ?</title><link>http://msmvps.com/blogs/ffagas/archive/2009/03/16/vs2008-wwf-moss-2007-191-c-243-mo-crear-tareas-paralelas-en-moss-2007-desde-visual-studio-2008.aspx</link><pubDate>Mon, 16 Mar 2009 16:44:29 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1678381</guid><dc:creator>Francisco X. Fagas</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/ffagas/rsscomments.aspx?PostID=1678381</wfw:commentRss><comments>http://msmvps.com/blogs/ffagas/archive/2009/03/16/vs2008-wwf-moss-2007-191-c-243-mo-crear-tareas-paralelas-en-moss-2007-desde-visual-studio-2008.aspx#comments</comments><description>&lt;p&gt;&lt;strong&gt;Introducción &lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;span style="font-size:10pt;"&gt;En&amp;#160; un artículo anterior publiqué &lt;a href="http://msmvps.com/blogs/ffagas/archive/2008/08/07/vs-2008-moss-2007-191-c-243-mo-crear-actividades-personalizadas.aspx" target="_blank"&gt;cómo crear una tarea en MOSS 2007&lt;/a&gt;, en este artículo aprenderá cómo crear tareas paralelas en MOSS 2007 utilizando &lt;em&gt;Visual Studio 2008 Team Developer&lt;/em&gt;, Visual Studio 2008 nos permite crear de manera sencilla (al estilo Microsoft) flujos de trabajo para SharePoint, para esto disponemos de plantillas de proyecto al momento de empezar con la creación del mismo, en Microsoft Office SharePoint 2007 (MOSS 2007) podemos crear tareas en serie o en paralelo, las mismas que para crearlas las podemos hacer utilizando diferentes herramientas disponibles en el toolbox de Visual Studio 2008, en esta ocasión utilizaremos el replicator para la creación de las actividades en paralelo. &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;Les recomiendo leer el artículo anteriormente mencionado y descargar su código ya que reutilizaremos el ejemplo anterior para la creación de las tareas. El código fuente del presente artículo lo pueden descargar de aquí:&lt;span style="font-size:10pt;"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size:10pt;"&gt;&lt;a href="http://msmvps.com/cfs-filesystemfile.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas.MOSS2007.WorkFlows/CreacionTareas.zip"&gt;Descargar código Fuente.&lt;/a&gt;&lt;/span&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Software Requerido &lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;span style="font-size:10pt;"&gt;Windows Server 2003 o superior &lt;/span&gt;&lt;/li&gt;    &lt;li&gt;&lt;span style="font-size:10pt;"&gt;Microsoft Office SharePoint 2007 (instalación stand alone) &lt;/span&gt;&lt;/li&gt;    &lt;li&gt;&lt;span style="font-size:10pt;"&gt;Visual Studio 2008 Team Developer&lt;/span&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Desarrollo &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Empiece abriendo Visual Studio 2008 y agregando un nuevo proyecto a la solución anterior.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas/001_5F00_07CCB765.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="001" border="0" alt="001" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas/001_5F00_thumb_5F00_74E80DED.jpg" width="583" height="407" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;De la lista de Tipos de Proyectos seleccione Workflow y luego de la lista de plantillas SharePoint 2007 Sequential Workflow, le asigna un nombre a su proyecto y de clic en Ok.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas/002_5F00_57B24016.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="002" border="0" alt="002" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas/002_5F00_thumb_5F00_3A103F4A.jpg" width="581" height="406" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;Visual Studio 2008 iniciará un asistente, el cual en esta primera ventana deberá asignarle el nombre&amp;#160; de su flujo de trabajo que desea que aparezca en SharePoint, e ingresar la url del sitio sobre el cual va a publicar el flujo de trabajo, Visual Studio 2008 en plataformas de 32 bits le permite publicar y hacer debug de sus flujos de trabajo para MOSS 2007, para lo cual utilizará la url proporcionada en este paso.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas/003_5F00_06872267.jpg"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="003" border="0" alt="003" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas/003_5F00_thumb_5F00_23ACCA71.jpg" width="604" height="480" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;Si usted desea puede marcar para que automáticamente se asocie el flujo de trabajo que va a desarrollar con una librería en particular, caso contrario lo puede realizar manualmente utilizando comandos. Para la asociación automática debemos tener claro que significa cada elemento listado en este paso del asistente. El flujo de trabajo se debe asociar a una lista, esta lista será quien inicie el flujo de trabajo bajo ciertas condiciones, la lista de historial me permitirá almacenar toda la información relacionada al flujo de trabajo, por ejemplo: cuando inicio el flujo, cierta actividad, cuanto terminó, quién la terminó, etc., por último tenemos que seleccionar la lista de tareas, en esta lista el flujo de trabajo creará las tareas que nosotros le indiquemos. Antes de continuar y una vez entendido lo anterior pensemos en el siguiente escenario: Tenemos una librería de documentos que cada vez que se modifique un documento este deba ser aprobado por la persona X, persona Y o persona Z (esto implica que cualquiera de dichos usuarios puede aprobar el documento, es decir, estamos hablando de un flujo de aprobación en paralelo), para que dichos usuarios se enteren de que deben aprobar el documento debemos crear tareas y asignárselas para esto utilizaremos la lista de tareas.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas/004_5F00_47857BFE.jpg"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="004" border="0" alt="004" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas/004_5F00_thumb_5F00_2A4FAE27.jpg" width="604" height="480" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;En este paso final del asistente debemos seleccionar cuando queremos que el flujo de trabajo se inicie, basándonos en el ejemplo anterior debería seleccionar cuando el elemento cambie, pero en este caso yo quiero iniciar el flujo manualmente, razón por la cual selecciono sólo la primera acción.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas/005_5F00_580D511F.jpg"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="005" border="0" alt="005" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas/005_5F00_thumb_5F00_1CD97554.jpg" width="604" height="480" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Una vez terminado el asistente se abrirá el diseñador del flujo, recuerden que para la creación de una tarea utilizaremos el ejemplo publicado en el artículo anterior, por lo cual debemos a este proyecto agregar la referencia al mismo.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas/006_5F00_6EED1EBA.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="006" border="0" alt="006" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas/006_5F00_thumb_5F00_6AB32128.jpg" width="607" height="424" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;En la ventana de referencias seleccione de proyectos BasicTaskActivity.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas/007_5F00_2CE4F1B3.jpg"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="007" border="0" alt="007" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas/007_5F00_thumb_5F00_11CC22A5.jpg" width="471" height="387" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;En ese momento en el toolbox veremos el componente WssTaskActivity, pero antes de agregarlo debemos insertar en el flujo de trabajo el componente que realizará la creación de las tareas en paralelo, para lo cual seleccionen el componente replicator y llévenlo hacia el área de trabajo, luego seleccionen WssTaskActivity e insértenlo dentro del replicator.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas/008_5F00_34EDB601.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="008" border="0" alt="008" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas/008_5F00_thumb_5F00_2A00AEEC.jpg" width="604" height="392" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;La siguiente es la vista del flujo de trabajo con el replicator insertado. Le damos doble clic sobre el componente onWorkflowActivated1, para proceder a inicializar variables.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas/009_5F00_582A84D9.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="009" border="0" alt="009" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas/009_5F00_thumb_5F00_1B45DD3A.jpg" width="604" height="392" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Una vez realizado lo anterior, vamos al código del flujo de trabajo y defina las siguientes variables públicas:&lt;/p&gt;  &lt;blockquote&gt;   &lt;pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;&lt;span style="color:#008000;"&gt;//Contendrá la lista de aprobadores.&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; IList approversList;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;&lt;span style="color:#008000;"&gt;//Bandera que se utilizará para determinar si la tarea actual&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;&lt;span style="color:#008000;"&gt;//fue completada o no, por defecto es falso.&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; isActualTaskCompleted = &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;;&lt;/pre&gt;&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;pre&gt;&amp;#160;&lt;/pre&gt;

&lt;p&gt;En este ejemplo quemaremos en el código la lista de aprobadores, pero debemos tener en cuenta que los aprobadores los podemos obtener de cualquier objeto.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;&lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; onWorkflowActivated1_Invoked(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; sender, ExternalDataEventArgs e)
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;{
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;   approversList = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; ArrayList();
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;   approversList.Add(&amp;quot;&lt;span style="color:#8b0000;"&gt;igec\\ffagas&lt;/span&gt;&amp;quot;);
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;   approversList.Add(&amp;quot;&lt;span style="color:#8b0000;"&gt;igec\\user1a&lt;/span&gt;&amp;quot;);
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;   approversList.Add(&amp;quot;&lt;span style="color:#8b0000;"&gt;igec\\user2a&lt;/span&gt;&amp;quot;);
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;}&lt;/pre&gt;&lt;/pre&gt;

&lt;p align="justify"&gt;Una vez inicializada la lista de aprobadores regresamos a la vista de diseño del flujo de trabajo y procedemos a configurar las propiedades del replicator, lo primero que debemos hacer es vincular la variable approversList con la propiedad InitialChildData, el replicator utilizará esta lista para la creación de las actividades, veamos al replicator como un foreach, lo que implica que no debemos programar el avance al siguiente elemento de la lista, el replicator permite dos tipos de iteraciones en serie o en paralelo, por defecto está en serie, procedamos a cambiarlo a paralelo. &lt;/p&gt;

&lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas/010_5F00_0491AB60.jpg"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="010" border="0" alt="010" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas/010_5F00_thumb_5F00_13E50D6F.jpg" width="514" height="414" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Luego, procedemos a programar los siguientes métodos del replicator, para lo cual en la lista de propiedades ingrese el nombre del método y enter, automáticamente el VS abrirá la vista de código del flujo:&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;&lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; ParallelChildInitialized(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; sender, ReplicatorChildEventArgs e)
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;{
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  &lt;span style="color:#008000;"&gt;/* Debemos hacer un cast de la actividad que está actualmente instanciada
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;&lt;p&gt;     con la actividad que creamos en el proyecto anterior, para &lt;/p&gt;&lt;p&gt;     poder tener acceso 
&lt;/p&gt;&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;&lt;p&gt;     a las propiedades públicas de la misma. Estas propiedades &lt;/p&gt;&lt;p&gt;     nos permitirán asignar a un usuario,
&lt;/p&gt;&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;     la descripción, título, ID (es un GUID), y el campo de estado de la tarea.
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  */&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  &lt;span style="color:#008000;"&gt;//Recuerde que los usuarios a los que se va a asignar la tarea se encuentran en la lista,&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  &lt;span style="color:#008000;"&gt;//entonces debe hacer referencia al dato actualmente instanciado y asignarselo al campo público de la actividad.&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  (e.Activity &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; BasicTaskActivity.WssTaskActivity).strAsignadoA = e.InstanceData.ToString();
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  (e.Activity &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; BasicTaskActivity.WssTaskActivity).strDescripcion = &amp;quot;&lt;span style="color:#8b0000;"&gt;Demo Tarea Paralelas&lt;/span&gt;&amp;quot;;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  (e.Activity &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; BasicTaskActivity.WssTaskActivity).strTitulo = &amp;quot;&lt;span style="color:#8b0000;"&gt;Demo Tarea Paralela&lt;/span&gt;&amp;quot;;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  (e.Activity &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; BasicTaskActivity.WssTaskActivity).taskId = Guid.NewGuid();
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;&lt;p&gt;  &lt;span style="color:#008000;"&gt;// Para obtener información de una columna de sharepoint la debemos instanciar por su GUID, &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#008000;"&gt;para lo cual utilizaremos las propiedades del flujo,&lt;/span&gt;
&lt;/p&gt;&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;&lt;p&gt;  &lt;span style="color:#008000;"&gt;// instanciamos la lista de tareas, luego sus campos y le pasamos como &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#008000;"&gt;parametro el nombre que se muestra en sharepoint&lt;/span&gt;
&lt;/p&gt;&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;&lt;p&gt;  &lt;span style="color:#008000;"&gt;// en este caso me interesa conocer la información del campo estado, y obtengo su ID (GUID) &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#008000;"&gt;que utilizará el WssTaskActivity para obtener la información&lt;/span&gt;
&lt;/p&gt;&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  &lt;span style="color:#008000;"&gt;// del estado actual de la tarea &lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;&lt;p&gt;  (e.Activity &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; BasicTaskActivity.WssTaskActivity).idCampoEstado = &lt;/p&gt;&lt;p&gt;workflowProperties.TaskList.Fields[&amp;quot;&lt;span style="color:#8b0000;"&gt;Estado&lt;/span&gt;&amp;quot;].Id;
&lt;/p&gt;&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;}&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; ParallelChildCompleted(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; sender, ReplicatorChildEventArgs e)
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;        {
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;&lt;p&gt;&lt;span style="color:#008000;"&gt;// Validamos cada vez que se complete una actividad hija del &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#008000;"&gt;replicator el estado actual de la tarea&lt;/span&gt;
&lt;/p&gt;&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;&lt;p&gt;&lt;span style="color:#008000;"&gt;// si la tarea fue completada, cambiamos el estado de la &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#008000;"&gt;variable isActualTaskCompleted a True.&lt;/span&gt;
&lt;/p&gt;&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;            &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; ((e.Activity &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; BasicTaskActivity.WssTaskActivity).esTareaCompletada)
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;            {
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;                &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.isActualTaskCompleted = &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;            }
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;        }&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;&lt;p&gt;&lt;span style="color:#008000;"&gt;/*Este método corresponde a la condición del replicator, &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#008000;"&gt;debe seleccionar en el tipo de condición (Until Condition)
&lt;/p&gt;&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;&lt;p&gt;código, y luego insertar el siguiente método, y le asignamos &lt;/p&gt;&lt;p&gt;el valor de la variable this.isActualTaskCompleted, con esto
&lt;/p&gt;&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;cuando un usuario complete la tarea el flujo terminará.
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;*/&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;&lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; ParallelTasksNotCompleteCondition(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; sender, ConditionalEventArgs e)
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;        {
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;            e.Result = &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.isActualTaskCompleted;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;        }&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;Una vez realizado lo anterior, compilamos y ejecutamos el flujo de trabajo, esto le abrirá un navegador y deberá inicializar el flujo manualmente:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas/011_5F00_70A9FC5C.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="011" border="0" alt="011" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas/011_5F00_thumb_5F00_0880BDB6.jpg" width="529" height="330" /&gt;&lt;/a&gt;&amp;#160; &lt;/p&gt;

&lt;p&gt;De la lista de flujos de trabajo seleccionamos el que acabamos de publicar y le aparecerá que la operación de inicialización está en proceso.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas/012_5F00_24CDFFD6.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="012" border="0" alt="012" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas/012_5F00_thumb_5F00_0D534BA5.jpg" width="540" height="337" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;A continuación en el estado del flujo de trabajo veremos que se ha creado las tareas para los usuarios que configuramos en la lista&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas/013_5F00_723A7C96.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="013" border="0" alt="013" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas/013_5F00_thumb_5F00_0768823F.jpg" width="552" height="331" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Seleccionamos cualquiera de ellas y editamos su estado&lt;/p&gt;

&lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas/014_5F00_78DD604C.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="014" border="0" alt="014" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas/014_5F00_thumb_5F00_5FB1E047.jpg" width="554" height="332" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Seleccionamos completada. (Tenga en cuenta que si su sharepoint está en español deberá cambiar el código de la tarea personalizada), por lo siguiente:&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;&lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; cambiaTarea_Invoked(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; sender, ExternalDataEventArgs e)
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;        {
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;&lt;p&gt;            &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; estado = &lt;/p&gt;&lt;p&gt;cambiaTarea_AfterProperties1.ExtendedProperties[idCampoEstado].ToString();
&lt;/p&gt;&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;            &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (estado != &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;)
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;            {
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;                &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (estado.Equals(&amp;quot;&lt;span style="color:#8b0000;"&gt;Completada&lt;/span&gt;&amp;quot;))
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;                    &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.esTareaCompletada = &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;            }
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;        }&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas/015_5F00_7141CB12.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="015" border="0" alt="015" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas/015_5F00_thumb_5F00_789D8ABF.jpg" width="673" height="403" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Luego de completar la tarea el flujo aparecerá con un estado ya no en curso sino en Finalizado.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas/016_5F00_5B67BCE8.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="016" border="0" alt="016" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas/016_5F00_thumb_5F00_1DAAAF5F.jpg" width="674" height="404" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1678381" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/ffagas/archive/tags/Visual+Studio+2008/default.aspx">Visual Studio 2008</category><category domain="http://msmvps.com/blogs/ffagas/archive/tags/VSTS+2008/default.aspx">VSTS 2008</category><category domain="http://msmvps.com/blogs/ffagas/archive/tags/.NET+3.5/default.aspx">.NET 3.5</category><category domain="http://msmvps.com/blogs/ffagas/archive/tags/Personalizacion/default.aspx">Personalizacion</category><category domain="http://msmvps.com/blogs/ffagas/archive/tags/MOSS+2007/default.aspx">MOSS 2007</category><category domain="http://msmvps.com/blogs/ffagas/archive/tags/Workflows/default.aspx">Workflows</category><category domain="http://msmvps.com/blogs/ffagas/archive/tags/Desarrollo/default.aspx">Desarrollo</category><category domain="http://msmvps.com/blogs/ffagas/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://msmvps.com/blogs/ffagas/archive/tags/WSS+3.0/default.aspx">WSS 3.0</category></item><item><title>Reunión con Célula .Net de la Estatal</title><link>http://msmvps.com/blogs/ffagas/archive/2008/08/12/reuni-243-n-con-c-233-lula-net-de-la-estatal.aspx</link><pubDate>Tue, 12 Aug 2008 05:37:03 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1644345</guid><dc:creator>Francisco X. Fagas</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/ffagas/rsscomments.aspx?PostID=1644345</wfw:commentRss><comments>http://msmvps.com/blogs/ffagas/archive/2008/08/12/reuni-243-n-con-c-233-lula-net-de-la-estatal.aspx#comments</comments><description>&lt;p&gt;El jueves 7 de Agosto tuve una reunión con los miembros más activos de la célula .Net de la Universidad Estatal de Guayaquil para realizarles una presentación (bueno empezamos con una presentación pero luego empezamos a discutir sobre la aplicación de los temas tratados y futuras actividades para que los estudiantes empiecen a desarrollar sus aplicaciones con estas tecnologías y herramientas), entre todos los temas tratados los más destacados fueron WPF, WCF, WWF, Expression Blend, Silverlight y para cerrar con broche de oro les presenté las nuevas características de VSTS “Rosario”. Les comparto un par de fotos al final de la presentación con la gente activa de la célula.  &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;table cellspacing="0" cellpadding="2"&gt;  &lt;tr&gt; &lt;td&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas.ReuninconClula.NetdelaEstatal_5F00_89B/AK000202.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="184" alt="AK000202" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas.ReuninconClula.NetdelaEstatal_5F00_89B/AK000202_5F00_thumb.jpg" width="244" border="0" /&gt;&lt;/a&gt; &lt;/td&gt; &lt;td&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas.ReuninconClula.NetdelaEstatal_5F00_89B/AK000204.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="184" alt="AK000204" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas.ReuninconClula.NetdelaEstatal_5F00_89B/AK000204_5F00_thumb.jpg" width="244" border="0" /&gt;&lt;/a&gt; &lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&amp;nbsp;&lt;/td&gt; &lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1644345" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/ffagas/archive/tags/Visual+Studio+2008/default.aspx">Visual Studio 2008</category><category domain="http://msmvps.com/blogs/ffagas/archive/tags/VSTS+2008/default.aspx">VSTS 2008</category><category domain="http://msmvps.com/blogs/ffagas/archive/tags/Eventos/default.aspx">Eventos</category><category domain="http://msmvps.com/blogs/ffagas/archive/tags/.NET+3.5/default.aspx">.NET 3.5</category><category domain="http://msmvps.com/blogs/ffagas/archive/tags/Workflows/default.aspx">Workflows</category></item><item><title>[VS2008 -WWF- MOSS 2007] ¿Cómo crear actividades personalizadas?</title><link>http://msmvps.com/blogs/ffagas/archive/2008/08/07/vs-2008-moss-2007-191-c-243-mo-crear-actividades-personalizadas.aspx</link><pubDate>Thu, 07 Aug 2008 21:25:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1643910</guid><dc:creator>Francisco X. Fagas</dc:creator><slash:comments>10</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/ffagas/rsscomments.aspx?PostID=1643910</wfw:commentRss><comments>http://msmvps.com/blogs/ffagas/archive/2008/08/07/vs-2008-moss-2007-191-c-243-mo-crear-actividades-personalizadas.aspx#comments</comments><description>&lt;p&gt;&lt;strong&gt;Introducci&amp;oacute;n &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:10pt;"&gt;En este art&amp;iacute;culo aprender&amp;aacute; c&amp;oacute;mo crear una actividad personalizada utilizando Visual Studio 2008, esta actividad contendr&amp;aacute; los pasos b&amp;aacute;sicos necesarios para asignar una tarea en MOSS 2007 a un usuario, la misma que esperar&amp;aacute; a que este la complete, en una segunda publicaci&amp;oacute;n aprender&amp;aacute; c&amp;oacute;mo utilizar &amp;eacute;sta actividad personalizada en un flujo de trabajo para MOSS 2007. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Para poder utilizar e&lt;span style="font-size:10pt;"&gt;sta actividad en un flujo para MOSS 2007 deber&amp;aacute; ser firmada con un strong name (La clave para quienes descarguen el codigo de ejemplo es Password1)&amp;nbsp;y publicada en el GAC del servidor de MOSS 2007. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/cfs-filesystemfile.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas.MOSS2007.WorkFlows/BasicTaskActivity.zip"&gt;&lt;span style="font-size:10pt;"&gt;Descargar c&amp;oacute;digo Fuente.&lt;/span&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Software Requerido &lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-size:10pt;"&gt;Windows Server 2003 o superior &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size:10pt;"&gt;Microsoft Office SharePoint 2007 (instalaci&amp;oacute;n stand alone) &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size:10pt;"&gt;Visual Studio 2008 &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Desarrollo &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:10pt;"&gt;Empiece abriendo Visual Studio 2008 y cree un nuevo proyecto. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas.VS2008MOSS2007Cmocrearactividadespersona_5F00_33C8/01VS_5F00_4.jpg"&gt;&lt;img border="0" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas.VS2008MOSS2007Cmocrearactividadespersona_5F00_33C8/01VS_5F00_thumb_5F00_1.jpg" alt="" /&gt;&lt;/a&gt;&lt;span style="font-size:10pt;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:10pt;"&gt;Los flujos de trabajo para MOSS 2007 son flujos de Windows WorkFlow Foundation, por lo tanto de la lista de Project types seleccione Workflow, y luego seleccione la plantilla Workflow Activity Library, en el nombre del proyecto ingrese BasicTaskActivity. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas.VS2008MOSS2007Cmocrearactividadespersona_5F00_33C8/02NewProject_5F00_2.jpg"&gt;&lt;img border="0" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas.VS2008MOSS2007Cmocrearactividadespersona_5F00_33C8/02NewProject_5F00_thumb.jpg" alt="" /&gt;&lt;/a&gt;&lt;span style="font-size:10pt;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:10pt;"&gt;Una vez creado el proyecto deber&amp;aacute;&amp;nbsp; firmar el assembly con un strong name, para lo cual haga clic derecho sobre el proyecto y seleccione propiedades, en la ventana de propiedades dir&amp;iacute;jase al tab signing. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas.VS2008MOSS2007Cmocrearactividadespersona_5F00_33C8/03StrongName_5F00_2.jpg"&gt;&lt;img border="0" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas.VS2008MOSS2007Cmocrearactividadespersona_5F00_33C8/03StrongName_5F00_thumb.jpg" alt="" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:10pt;"&gt;Active la casilla Sign Assembly y seleccione new para crear un nuevo archivo de clave, deber&amp;aacute; ingresar un nombre y una clave antes de dar clic en OK. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas.VS2008MOSS2007Cmocrearactividadespersona_5F00_33C8/04GenerarStrongName_5F00_2.jpg"&gt;&lt;img border="0" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas.VS2008MOSS2007Cmocrearactividadespersona_5F00_33C8/04GenerarStrongName_5F00_thumb.jpg" alt="" /&gt;&lt;/a&gt;&lt;span style="font-size:10pt;"&gt;&amp;nbsp;&lt;/span&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:10pt;"&gt;Una vez creado cierre la ventana de propiedades. Para poder utilizar las actividades para MOSS 2007 deber&amp;aacute; agregar la referencia de los siguientes assemblies: &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; &lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;table style="border-collapse:collapse;"&gt;


&lt;tr style="background:black;"&gt;
&lt;td style="border-right:black 0.5pt solid;padding-right:7px;border-top:black 0.5pt solid;padding-left:7px;padding-bottom:1px;border-left:black 0.5pt solid;padding-top:1px;border-bottom:black 0.5pt solid;"&gt;
&lt;p style="text-align:center;"&gt;&lt;span style="font-size:10pt;color:#ffffff;"&gt;&lt;strong&gt;Identity&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="border-right:black 0.5pt solid;padding-right:7px;border-top:black 0.5pt solid;padding-left:7px;padding-bottom:1px;padding-top:1px;border-bottom:black 0.5pt solid;border-left-style:none;"&gt;
&lt;p style="text-align:center;"&gt;&lt;span style="font-size:10pt;color:#ffffff;"&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="border-right:black 0.5pt solid;padding-right:7px;padding-left:7px;padding-bottom:1px;border-left:black 0.5pt solid;border-top-style:none;padding-top:1px;border-bottom:black 0.5pt solid;"&gt;
&lt;p&gt;&lt;span style="font-size:10pt;"&gt;Microsoft.Sharepoint&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="border-right:black 0.5pt solid;padding-right:7px;padding-left:7px;padding-bottom:1px;border-top-style:none;padding-top:1px;border-bottom:black 0.5pt solid;border-left-style:none;"&gt;
&lt;p&gt;&lt;span style="font-size:10pt;"&gt;Windows&amp;reg; SharePoint&amp;reg; Services&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="border-right:black 0.5pt solid;padding-right:7px;padding-left:7px;padding-bottom:1px;border-left:black 0.5pt solid;border-top-style:none;padding-top:1px;border-bottom:black 0.5pt solid;"&gt;
&lt;p&gt;&lt;span style="font-size:10pt;"&gt;Microsoft.SharePoint.WorkflowActions&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="border-right:black 0.5pt solid;padding-right:7px;padding-left:7px;padding-bottom:1px;border-top-style:none;padding-top:1px;border-bottom:black 0.5pt solid;border-left-style:none;"&gt;
&lt;p&gt;&lt;span style="font-size:10pt;"&gt;Windows&amp;reg; SharePoint&amp;reg; Services Workflow Actions&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:10pt;"&gt;Utilice el nombre que aparece en description (ver tabla anterior) para agregar las referencias. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas.VS2008MOSS2007Cmocrearactividadespersona_5F00_33C8/05AddReference_5F00_2.jpg"&gt;&lt;img border="0" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas.VS2008MOSS2007Cmocrearactividadespersona_5F00_33C8/05AddReference_5F00_thumb.jpg" alt="" /&gt;&lt;/a&gt;&lt;span style="font-size:10pt;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:10pt;"&gt;Luego proceda a renombrar la actividad llam&amp;aacute;ndola WssTaskActivity.cs &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas.VS2008MOSS2007Cmocrearactividadespersona_5F00_33C8/06RenameTaskActivity_5F00_2.jpg"&gt;&lt;img border="0" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas.VS2008MOSS2007Cmocrearactividadespersona_5F00_33C8/06RenameTaskActivity_5F00_thumb.jpg" alt="" /&gt;&lt;/a&gt;&lt;span style="font-size:10pt;"&gt;&amp;nbsp;&lt;/span&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:10pt;"&gt;Vaya al c&amp;oacute;digo de la actividad personalizada y dentro de la clase agregue la siguiente definici&amp;oacute;n de variables, las cuales servir&amp;aacute;n como par&amp;aacute;metros de entrada cuando agregue la actividad a un flujo de aprobaci&amp;oacute;n de MOSS 2007. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:8pt;font-family:courier new;"&gt;&lt;span style="color:#0000ff;"&gt;#region&lt;/span&gt; Public Parameters &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-left:36pt;"&gt;&lt;span style="font-size:8pt;font-family:courier new;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Guid&lt;/span&gt; idCampoEstado; &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-left:36pt;"&gt;&lt;span style="font-size:8pt;font-family:courier new;"&gt;&lt;span style="color:#0000ff;"&gt;public string &lt;/span&gt;strAsignadoA; &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-left:36pt;"&gt;&lt;span style="font-size:8pt;font-family:courier new;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; strTitulo; &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-left:36pt;"&gt;&lt;span style="font-size:8pt;font-family:courier new;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; strDescripcion; &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-left:36pt;"&gt;&lt;span style="font-size:8pt;font-family:courier new;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;DateTime&lt;/span&gt; dtDuraci&amp;oacute;n; &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-left:36pt;"&gt;&lt;span style="font-size:8pt;font-family:courier new;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; bEnviarNotificaci&amp;oacute;n; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:8pt;color:#0000ff;font-family:courier new;"&gt;#endregion &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:10pt;"&gt;En el toolbox de VS 2008 existen las actividades necesarias para gestionar tareas de MOSS 2007, as&amp;iacute; como para enviar email, registrar mensajes en el historial del flujo de trabajo, etc. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas.VS2008MOSS2007Cmocrearactividadespersona_5F00_33C8/07ToolBox_5F00_2.jpg"&gt;&lt;img border="0" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas.VS2008MOSS2007Cmocrearactividadespersona_5F00_33C8/07ToolBox_5F00_thumb.jpg" alt="" /&gt;&lt;/a&gt;&lt;span style="font-size:10pt;"&gt;&amp;nbsp;&lt;/span&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:10pt;"&gt;Luego deber&amp;aacute; agregar las siguientes actividades con sus respectivas propiedades en el &amp;aacute;rea de dise&amp;ntilde;o de la actividad que estamos creando. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; &lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;table style="border-collapse:collapse;"&gt;


&lt;tr style="background:black;"&gt;
&lt;td style="border-right:black 0.5pt solid;padding-right:7px;border-top:black 0.5pt solid;padding-left:7px;padding-bottom:1px;border-left:black 0.5pt solid;padding-top:1px;border-bottom:black 0.5pt solid;"&gt;
&lt;p style="text-align:center;"&gt;&lt;span style="font-size:10pt;color:#ffffff;"&gt;&lt;strong&gt;Paso&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="border-right:black 0.5pt solid;padding-right:7px;border-top:black 0.5pt solid;padding-left:7px;padding-bottom:1px;padding-top:1px;border-bottom:black 0.5pt solid;border-left-style:none;"&gt;
&lt;p style="text-align:center;"&gt;&lt;span style="font-size:10pt;color:#ffffff;"&gt;&lt;strong&gt;Grupo&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="border-right:black 0.5pt solid;padding-right:7px;border-top:black 0.5pt solid;padding-left:7px;padding-bottom:1px;padding-top:1px;border-bottom:black 0.5pt solid;border-left-style:none;"&gt;
&lt;p style="text-align:center;"&gt;&lt;span style="font-size:10pt;color:#ffffff;"&gt;&lt;strong&gt;Actividad&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="border-right:black 0.5pt solid;padding-right:7px;padding-left:7px;padding-bottom:1px;border-left:black 0.5pt solid;border-top-style:none;padding-top:1px;border-bottom:black 0.5pt solid;"&gt;
&lt;p&gt;&lt;span style="font-size:10pt;"&gt;Ver Paso A&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="border-right:black 0.5pt solid;padding-right:7px;padding-left:7px;padding-bottom:1px;border-top-style:none;padding-top:1px;border-bottom:black 0.5pt solid;border-left-style:none;"&gt;
&lt;p&gt;&lt;span style="font-size:10pt;"&gt;SharePoint Workflow&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="border-right:black 0.5pt solid;padding-right:7px;padding-left:7px;padding-bottom:1px;border-top-style:none;padding-top:1px;border-bottom:black 0.5pt solid;border-left-style:none;"&gt;
&lt;p&gt;&lt;span style="font-size:10pt;"&gt;CreateTask&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="border-right:black 0.5pt solid;padding-right:7px;padding-left:7px;padding-bottom:1px;border-left:black 0.5pt solid;border-top-style:none;padding-top:1px;border-bottom:black 0.5pt solid;"&gt;
&lt;p&gt;&lt;span style="font-size:10pt;"&gt;Ver Paso B&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="border-right:black 0.5pt solid;padding-right:7px;padding-left:7px;padding-bottom:1px;border-top-style:none;padding-top:1px;border-bottom:black 0.5pt solid;border-left-style:none;"&gt;
&lt;p&gt;&lt;span style="font-size:10pt;"&gt;Windows Workflow v3.0&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="border-right:black 0.5pt solid;padding-right:7px;padding-left:7px;padding-bottom:1px;border-top-style:none;padding-top:1px;border-bottom:black 0.5pt solid;border-left-style:none;"&gt;
&lt;p&gt;&lt;span style="font-size:10pt;"&gt;While&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="border-right:black 0.5pt solid;padding-right:7px;padding-left:7px;padding-bottom:1px;border-left:black 0.5pt solid;border-top-style:none;padding-top:1px;border-bottom:black 0.5pt solid;"&gt;
&lt;p&gt;&lt;span style="font-size:10pt;"&gt;Ver Paso C&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="border-right:black 0.5pt solid;padding-right:7px;padding-left:7px;padding-bottom:1px;border-top-style:none;padding-top:1px;border-bottom:black 0.5pt solid;border-left-style:none;"&gt;
&lt;p&gt;&lt;span style="font-size:10pt;"&gt;SharePoint Workflow&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="border-right:black 0.5pt solid;padding-right:7px;padding-left:7px;padding-bottom:1px;border-top-style:none;padding-top:1px;border-bottom:black 0.5pt solid;border-left-style:none;"&gt;
&lt;p&gt;&lt;span style="font-size:10pt;"&gt;OnTaskChanged&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="border-right:black 0.5pt solid;padding-right:7px;padding-left:7px;padding-bottom:1px;border-left:black 0.5pt solid;border-top-style:none;padding-top:1px;border-bottom:black 0.5pt solid;"&gt;
&lt;p&gt;&lt;span style="font-size:10pt;"&gt;Ver Paso D&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="border-right:black 0.5pt solid;padding-right:7px;padding-left:7px;padding-bottom:1px;border-top-style:none;padding-top:1px;border-bottom:black 0.5pt solid;border-left-style:none;"&gt;
&lt;p&gt;&lt;span style="font-size:10pt;"&gt;SharePoint Workflow&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="border-right:black 0.5pt solid;padding-right:7px;padding-left:7px;padding-bottom:1px;border-top-style:none;padding-top:1px;border-bottom:black 0.5pt solid;border-left-style:none;"&gt;
&lt;p&gt;&lt;span style="font-size:10pt;"&gt;CompleteTask&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;/div&gt;
&lt;p style="text-align:center;"&gt;&amp;nbsp;&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso A &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:10pt;"&gt;Configure las siguientes propiedades de la actividad CreateTask: &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:10pt;"&gt;&lt;strong&gt;(Name):&lt;/strong&gt; Ingrese Crear Tarea &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:10pt;"&gt;&lt;strong&gt;CorrelationToken:&lt;/strong&gt; Ingrese TaskToken &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;OwnerActivityName:&lt;/strong&gt; Seleccione WssTaskActivity &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:10pt;"&gt;&lt;strong&gt;Invoked:&lt;/strong&gt; Ingrese CrearTarea_MethodInvoking y presione enter. El c&amp;oacute;digo del m&amp;eacute;todo ser&amp;aacute; el siguiente: &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:8pt;font-family:courier new;"&gt;&lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; CrearTarea_MethodInvoking(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; sender, &lt;span style="color:#2b91af;"&gt;EventArgs&lt;/span&gt; e) &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:8pt;font-family:courier new;"&gt;{ &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:8pt;font-family:courier new;"&gt;taskId = &lt;span style="color:#2b91af;"&gt;Guid&lt;/span&gt;.NewGuid(); &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:8pt;font-family:courier new;"&gt;CrearTarea_TaskProperties1.AssignedTo = &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.strAsignadoA; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:8pt;font-family:courier new;"&gt;CrearTarea_TaskProperties1.Title = &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.strTitulo; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:8pt;font-family:courier new;"&gt;CrearTarea_TaskProperties1.Description = &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.strDescripcion; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:8pt;font-family:courier new;"&gt;CrearTarea_TaskProperties1.DueDate = &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.dtDuraci&amp;oacute;n; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:8pt;font-family:courier new;"&gt;CrearTarea_TaskProperties1.SendEmailNotification = &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.bEnviarNotificaci&amp;oacute;n; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:8pt;font-family:courier new;"&gt;} &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:10pt;"&gt;&lt;strong&gt;TaskId: &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:10pt;"&gt;Para configurar esta propiedad deber&amp;aacute; ir al c&amp;oacute;digo de la actividad y declarar una variable p&amp;uacute;blica llamada taskId. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:8pt;font-family:courier new;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Guid&lt;/span&gt; taskId; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:10pt;"&gt;Luego regrese a la vista de dise&amp;ntilde;o y en la propiedad TaskId de clic sobre el bot&amp;oacute;n &amp;#39;&amp;hellip;&amp;#39; y seleccione la variable que acaba de definir. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas.VS2008MOSS2007Cmocrearactividadespersona_5F00_33C8/08TaskId_5F00_2.jpg"&gt;&lt;img border="0" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas.VS2008MOSS2007Cmocrearactividadespersona_5F00_33C8/08TaskId_5F00_thumb.jpg" alt="" /&gt;&lt;/a&gt;&lt;span style="font-size:10pt;"&gt;&amp;nbsp;&lt;/span&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:10pt;"&gt;&lt;strong&gt;TaskProperties:&lt;/strong&gt; De clic en el bot&amp;oacute;n &amp;#39;&amp;hellip;&amp;#39;, luego en el tab Bind to a new member seleccione Create Field. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas.VS2008MOSS2007Cmocrearactividadespersona_5F00_33C8/09TaskProperties_5F00_2.jpg"&gt;&lt;img border="0" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas.VS2008MOSS2007Cmocrearactividadespersona_5F00_33C8/09TaskProperties_5F00_thumb.jpg" alt="" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso B &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:10pt;"&gt;&lt;strong&gt;(Name):&lt;/strong&gt; Ingrese mientrasTareaNoCompletada &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:10pt;"&gt;&lt;strong&gt;Condition:&lt;/strong&gt; Seleccione Code Condition. Luego expanda la propiedad e ingrese el siguiente nombre para el m&amp;eacute;todo: CodeConditionMethod. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:10pt;"&gt;Una vez en el c&amp;oacute;digo agregue otro campo p&amp;uacute;blico: &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:8pt;font-family:courier new;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; taskCompleted = &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:10pt;"&gt;El m&amp;eacute;todo deber&amp;aacute; quedar de la siguiente forma: &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:8pt;font-family:courier new;"&gt;&lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; CodeConditionMethod(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; sender, &lt;span style="color:#2b91af;"&gt;ConditionalEventArgs&lt;/span&gt; e) &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:8pt;font-family:courier new;"&gt;{ &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:8pt;font-family:courier new;"&gt;e.Result = !taskCompleted; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:8pt;"&gt;&lt;span style="font-family:courier new;"&gt;}&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso C &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:10pt;"&gt;&lt;strong&gt;(Name):&lt;/strong&gt; Ingrese CambiaTarea &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:10pt;"&gt;&lt;strong&gt;CorrelationToken:&lt;/strong&gt; Seleccione TaskToken &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:10pt;"&gt;&lt;strong&gt;Invoked:&lt;/strong&gt; Ingrese cambiaTarea_Invoked y presione enter. El c&amp;oacute;digo del m&amp;eacute;todo ser&amp;aacute; el siguiente: &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:8pt;font-family:courier new;"&gt;&lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; cambiaTarea_Invoked(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; sender, &lt;span style="color:#2b91af;"&gt;ExternalDataEventArgs&lt;/span&gt; e) &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:8pt;font-family:courier new;"&gt;{ &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:8pt;font-family:courier new;"&gt;&lt;span style="color:#0000ff;"&gt;string &lt;/span&gt;estado=cambiaTarea_AfterProperties1.ExtendedProperties[&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.idCampoEstado].ToString(); &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:8pt;font-family:courier new;"&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (estado != &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;) &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:8pt;font-family:courier new;"&gt;{ &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:8pt;font-family:courier new;"&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (estado.Equals(&lt;span style="color:#a31515;"&gt;&amp;quot;Completed&amp;quot;&lt;/span&gt;)) &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-left:36pt;"&gt;&lt;span style="font-size:8pt;font-family:courier new;"&gt;&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.tareaCompletada = &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:8pt;font-family:courier new;"&gt;} &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:8pt;font-family:courier new;"&gt;} &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:10pt;"&gt;&lt;strong&gt;AfterProperties:&lt;/strong&gt; De clic en el bot&amp;oacute;n &amp;#39;&amp;hellip;&amp;#39;, luego en el tab Bind to a new member seleccione Create Field. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas.VS2008MOSS2007Cmocrearactividadespersona_5F00_33C8/10afterProperties_5F00_2.jpg"&gt;&lt;img border="0" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas.VS2008MOSS2007Cmocrearactividadespersona_5F00_33C8/10afterProperties_5F00_thumb.jpg" alt="" /&gt;&lt;/a&gt;&lt;span style="font-size:10pt;"&gt;&amp;nbsp;&lt;/span&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:10pt;"&gt;&lt;strong&gt;BeforeProperties:&lt;/strong&gt; De clic en el bot&amp;oacute;n &amp;#39;&amp;hellip;&amp;#39;, luego en el tab Bind to a new member seleccione Create Field. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas.VS2008MOSS2007Cmocrearactividadespersona_5F00_33C8/11BeforeProperties_5F00_2.jpg"&gt;&lt;img border="0" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas.VS2008MOSS2007Cmocrearactividadespersona_5F00_33C8/11BeforeProperties_5F00_thumb.jpg" alt="" /&gt;&lt;/a&gt;&lt;span style="font-size:10pt;"&gt;&amp;nbsp;&lt;/span&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:10pt;"&gt;&lt;strong&gt;TaskId:&lt;/strong&gt; De clic en el bot&amp;oacute;n &amp;#39;&amp;hellip;&amp;#39;, y seleccione la propiedad TaskId de la actividad Crear Tarea. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas.VS2008MOSS2007Cmocrearactividadespersona_5F00_33C8/12TaskIDCambio_5F00_2.jpg"&gt;&lt;img border="0" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas.VS2008MOSS2007Cmocrearactividadespersona_5F00_33C8/12TaskIDCambio_5F00_thumb.jpg" alt="" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso D &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:10pt;"&gt;&lt;strong&gt;(Name):&lt;/strong&gt; Ingrese TareaCompletada &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:10pt;"&gt;&lt;strong&gt;CorrelationToken:&lt;/strong&gt; Seleccione TaskToken &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:10pt;"&gt;&lt;strong&gt;TaskId:&lt;/strong&gt; De clic en el bot&amp;oacute;n &amp;#39;&amp;hellip;&amp;#39;, y seleccione la propiedad TaskId de la actividad Crear Tarea. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas.VS2008MOSS2007Cmocrearactividadespersona_5F00_33C8/12TaskIDCambio_5F00_4.jpg"&gt;&lt;img border="0" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas.VS2008MOSS2007Cmocrearactividadespersona_5F00_33C8/12TaskIDCambio_5F00_thumb_5F00_1.jpg" alt="" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:10pt;"&gt;Finalmente, compile el proyecto y registre la librer&amp;iacute;a en el GAC y a partir de este momento podr&amp;aacute; utilizar esta actividad personalizada en los flujos para MOSS 2007 que desarrolle con Visual Studio 2008. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas.VS2008MOSS2007Cmocrearactividadespersona_5F00_33C8/13RegistrarGAC_5F00_2.jpg"&gt;&lt;img border="0" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas.VS2008MOSS2007Cmocrearactividadespersona_5F00_33C8/13RegistrarGAC_5F00_thumb.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1643910" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/ffagas/archive/tags/Visual+Studio+2008/default.aspx">Visual Studio 2008</category><category domain="http://msmvps.com/blogs/ffagas/archive/tags/MOSS+2007/default.aspx">MOSS 2007</category><category domain="http://msmvps.com/blogs/ffagas/archive/tags/Workflows/default.aspx">Workflows</category><category domain="http://msmvps.com/blogs/ffagas/archive/tags/Desarrollo/default.aspx">Desarrollo</category></item><item><title>[VSTS Team Architect Rosario April CTP] Cómo elaborar el diagrama de secuencia del inicializador de un WorkfFlow para SharePoint 2007</title><link>http://msmvps.com/blogs/ffagas/archive/2008/08/06/vsts-quot-rosario-april-ctp-quot-c-243-mo-elaborar-el-diagrama-de-secuencia-del-inicializador-de-un-workfflow-para-sharepoint-2007.aspx</link><pubDate>Wed, 06 Aug 2008 14:33:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1643637</guid><dc:creator>Francisco X. Fagas</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/ffagas/rsscomments.aspx?PostID=1643637</wfw:commentRss><comments>http://msmvps.com/blogs/ffagas/archive/2008/08/06/vsts-quot-rosario-april-ctp-quot-c-243-mo-elaborar-el-diagrama-de-secuencia-del-inicializador-de-un-workfflow-para-sharepoint-2007.aspx#comments</comments><description>&lt;p&gt;En estos d&amp;iacute;as me encuentro probando la aplicabilidad de los nuevos diagramas del Visual Studio &amp;quot;Rosario&amp;quot; Team Architect, y luego de algunas pruebas quise elaborar el diagrama de secuencia de la inicializaci&amp;oacute;n de los componentes para un flujo de trabajo que desarroll&amp;eacute; para MOSS 2007, para esto realic&amp;eacute; los siguientes pasos:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Importe la soluci&amp;oacute;n completa a mi m&amp;aacute;quina virtual de Rosario (April CTP) y lo abr&amp;iacute; en VS &amp;quot;Rosario&amp;quot;. &lt;/li&gt;
&lt;li&gt;En el proyecto IG.DocumentMangement.WorkFlows (Este es el proyecto que contiene los flujos de trabajo), agregu&amp;eacute; un nuevo diagrama de secuencia de la siguiente forma: &lt;ol&gt;
&lt;li&gt;Clic derecho sobre el proyecto, luego seleccionan Add -&amp;gt; New Item&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas.VSTSRosarioAprilCTPCmoelaborareldiagrama_5F00_12ED8/CreateDiagramSequence_5F00_2.jpg"&gt;&lt;img border="0" width="644" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas.VSTSRosarioAprilCTPCmoelaborareldiagrama_5F00_12ED8/CreateDiagramSequence_5F00_thumb.jpg" alt="CreateDiagramSequence" height="362" style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" /&gt;&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;Luego seleccionan la categor&amp;iacute;a general&amp;nbsp; y en templates seleccionan sequence diagram, le asignan un nombre al diagrama y dan clic en Add.&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas.VSTSRosarioAprilCTPCmoelaborareldiagrama_5F00_12ED8/CreateDiagramSequence2_5F00_2.jpg"&gt;&lt;img border="0" width="644" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas.VSTSRosarioAprilCTPCmoelaborareldiagrama_5F00_12ED8/CreateDiagramSequence2_5F00_thumb.jpg" alt="CreateDiagramSequence2" height="362" style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" /&gt;&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;Luego abren el Architecture Explorer (View -&amp;gt; Architecture Explorer)&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas.VSTSRosarioAprilCTPCmoelaborareldiagrama_5F00_12ED8/ArchitectureExplorer_5F00_2.jpg"&gt;&lt;img border="0" width="644" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas.VSTSRosarioAprilCTPCmoelaborareldiagrama_5F00_12ED8/ArchitectureExplorer_5F00_thumb.jpg" alt="ArchitectureExplorer" height="362" style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" /&gt;&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;En el Architecture Explorer van navegando desde la soluci&amp;oacute;n seleccionando Contains para que en la siguiente lista se muestre el contenido del componente(Soluci&amp;oacute;n - Proyecto - Clase - Miembros de clase) que seleccionaron en la lista anterior.&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas.VSTSRosarioAprilCTPCmoelaborareldiagrama_5F00_12ED8/ArchitectureExplorer2_5F00_2.jpg"&gt;&lt;img border="0" width="644" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas.VSTSRosarioAprilCTPCmoelaborareldiagrama_5F00_12ED8/ArchitectureExplorer2_5F00_thumb.jpg" alt="ArchitectureExplorer2" height="362" style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" /&gt;&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;Una vez que han seleccionado el proyecto contin&amp;uacute;an seleccionando la clase, nuevamente contains para que puedan ver los m&amp;eacute;todos, seleccionamos el m&amp;eacute;todo InitializeComponent.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas.VSTSRosarioAprilCTPCmoelaborareldiagrama_5F00_12ED8/ArchitectureExplorer3_5F00_2.jpg"&gt;&lt;img border="0" width="644" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas.VSTSRosarioAprilCTPCmoelaborareldiagrama_5F00_12ED8/ArchitectureExplorer3_5F00_thumb.jpg" alt="ArchitectureExplorer3" height="362" style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/li&gt;
&lt;li&gt;Finalmente seleccionan Insert Into Active Diagram y autom&amp;aacute;ticamente VS generar&amp;aacute; la secuencia que sigue el m&amp;eacute;todo para construir los componentes que forman parte de su flujo de trabajo para MOSS 2007 :D. (Tip: dandole clic derecho sobre el &amp;aacute;rea de trabajo del dise&amp;ntilde;ador puede seleccionar la opci&amp;oacute;n para exportar el diagrama como imagen, la cual estoy pegando a continuaci&amp;oacute;n).&lt;/li&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas.VSTSRosarioAprilCTPCmoelaborareldiagrama_5F00_12ED8/InitializeComponent_5F00_2.jpg"&gt;&amp;nbsp;&lt;img border="0" width="641" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ffagas.VSTSRosarioAprilCTPCmoelaborareldiagrama_5F00_12ED8/InitializeComponent_5F00_thumb.jpg" alt="InitializeComponent" height="2191" style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1643637" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/ffagas/archive/tags/Rosario/default.aspx">Rosario</category><category domain="http://msmvps.com/blogs/ffagas/archive/tags/MOSS+2007/default.aspx">MOSS 2007</category><category domain="http://msmvps.com/blogs/ffagas/archive/tags/Workflows/default.aspx">Workflows</category><category domain="http://msmvps.com/blogs/ffagas/archive/tags/Desarrollo/default.aspx">Desarrollo</category><category domain="http://msmvps.com/blogs/ffagas/archive/tags/Team+Architect/default.aspx">Team Architect</category></item><item><title>[MOSS 2007 - VS 2008] Tip Workflows para MOSS 2007 con VS 2008</title><link>http://msmvps.com/blogs/ffagas/archive/2008/08/05/tip-workflows-para-moss-2007-con-vs-2008.aspx</link><pubDate>Tue, 05 Aug 2008 11:37:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1643493</guid><dc:creator>Francisco X. Fagas</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/ffagas/rsscomments.aspx?PostID=1643493</wfw:commentRss><comments>http://msmvps.com/blogs/ffagas/archive/2008/08/05/tip-workflows-para-moss-2007-con-vs-2008.aspx#comments</comments><description>&lt;p&gt;Me he tenido que alejar un poco de mi blog debido a un proyecto en el que estado trabajando un Framework de Gesti&amp;oacute;n Documental ISO para MOSS 2007 el cual ya lo pas&amp;eacute; a producci&amp;oacute;n y ahora tendr&amp;eacute; un poco m&amp;aacute;s de tiempo hasta que me asignen a otro proyecto ;-), aunque ya llevo 1 a&amp;ntilde;o desarrollando aplicaciones para MOSS 2007 este proyecto en particular fue un reto debido a que ciertos requerimientos requer&amp;iacute;an implementar c&amp;oacute;digo complejo, por ejemplo el Framework es totalmente parametrizable ya que el sistema es capaz de soportar cualquier documento ya sea para ISO 9001, 14000, 22000 e incluso documentos no controlados (denominaci&amp;oacute;n para documentos que no forman parte del ning&amp;uacute;n sistema de gesti&amp;oacute;n documental pero que se debe llevar un historial y debe estar habilitado para ejecutar acciones ISO), pero bueno cuando lleg&amp;oacute; el momento de la implementaci&amp;oacute;n del flujo de trabajo ning&amp;uacute;n flujo de MOSS 2007 ni con SharePoint Designer 2007 se pod&amp;iacute;a implementar , se implement&amp;oacute; un flujo utilizando la plantilla Sequential WorkFlow for SharePoint 2007 utilizando Visual Srudio 2008, ah y lo m&amp;aacute;s importante es que la administraci&amp;oacute;n del ciclo de vida de desarrollo de este sistema se realiz&amp;oacute; con VISUAL STUDIO TEAM SYSTEM 2008 ;-), algunas consideraciones importantes que se debieron enfrentar en la implementaci&amp;oacute;n fueron: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;El flujo en base a propiedades el documento deb&amp;iacute;a ejecutar un flujo en serie o en paralelo. &lt;/li&gt;
&lt;li&gt;Si los emisores eran los mismos que los aprobadores se deb&amp;iacute;a aprobar autom&amp;aacute;ticamente. &lt;/li&gt;
&lt;li&gt;Los emisores, aprobadores y distribuci&amp;oacute;n del documento no eran usuarios de MOSS eran grupos de AD que reflejaban un rol, por ejemplo: el emisor podr&amp;iacute;a ser: Asistente de RRHH, quien aprobaba era el Gerente de RRHH y un segundo aprobador Administrador de Documentaci&amp;oacute;n, y por &amp;uacute;ltimo la distribuci&amp;oacute;n dependiendo de un campo del documento podr&amp;iacute;a tomar de un campo llamado distribuci&amp;oacute;n del documento o leer los usuarios que ten&amp;iacute;an permisos sobre la carpeta que conten&amp;iacute;a el documento, de igual forma eran grupos del directorio activo. &lt;/li&gt;
&lt;li&gt;Al final del flujo deb&amp;iacute;a enviar notificaci&amp;oacute;n con el resultado de la aprobaci&amp;oacute;n a todos los involucrados: emisores, aprobadores y distribuci&amp;oacute;n. &lt;/li&gt;
&lt;li&gt;La aprobaci&amp;oacute;n en serie era una aprobaci&amp;oacute;n en serie a nivel de grupos y en paralelo a nivel de usuarios, es decir, pensemos en un documento cuyos aprobadores son: GrupoA; Grupo B, al inicia el flujo en serie empezar&amp;iacute;a por el grupo a, y deber&amp;iacute;a crear tareas de aprobaci&amp;oacute;n en paralelo para todos los usuarios que pertenecen al Grupo A, una vez que alg&amp;uacute;n miembro de dicho grupo apruebe el flujo deber&amp;iacute;a continuar al siguiente Grupo de aprobadores y hacer lo mismo que hizo para el Grupo anterior. Recordemos que los grupos son del AD. &lt;/li&gt;
&lt;li&gt;La aprobaci&amp;oacute;n en paralelo consist&amp;iacute;a en ejecutar una aprobaci&amp;oacute;n en paralelo a nivel de usuarios, pero recordemos que los aprobadores son grupos de AD, por lo que el flujo deber&amp;iacute;a crear tareas en paralelo los usuarios miembros de ambos grupos al mismo tiempo.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;iquest;Interesantes requerimientos no?, pues a continuaci&amp;oacute;n algunos tips para trabajar con flujos de trabajo: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Las actividades b&amp;aacute;sicas de aprobaci&amp;oacute;n de documentos se implement&amp;oacute; en un proyecto de Activity Library de Windows WorkFlow Foundation. Recuerden en strong name para este tipo de proyectos ya que lo deben registrar en el GAC del servidor. &lt;/li&gt;
&lt;li&gt;El proceso de aprobaci&amp;oacute;n como tal no estaba en el sequential workflow estaba en una librer&amp;iacute;a del Framework el cual al invocar al constructor constru&amp;iacute;a los objetos necesarios que se encontraban en la capa de entidades, objetos como por ejemplo: Grupo, Usuario, Documento. &lt;/li&gt;
&lt;li&gt;&lt;b&gt;Recuerden que cuando trabajen con workflows los objetos que declaren como globales ya sea para actividades personalizadas o para el propio flujo deben ser serializables, incluidos objetos de l&amp;oacute;gica del proceso. Esto no se encuentra documentado y pese a que las entidades eran serializables los objetos de proceso no lo eran esto ocasion&amp;oacute; que el flujo no espere acci&amp;oacute;n de los usuarios sobre las tareas debido a que los objetos de la capa de proceso no lo eran.&lt;/b&gt; &lt;/li&gt;
&lt;li&gt;Para resolver el manejo de grupos, se utiliz&amp;oacute; utilitarios de la capa Core para conectarse al AD pasarle el grupo y que nos retorne sus miembros (usuarios que es con lo que trabaja MOSS 2007) con sus propiedades. &lt;/li&gt;
&lt;li&gt;Para implementar tareas en paralelo utilicen el replicator configurado para que se ejecute en paralelo. &lt;/li&gt;
&lt;li&gt;Para implementar tareas en serie pueden utilizar un replicator configurado en serie, o pueden utilizar una actividad while.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Espero que estos tips les sean de utilidad si alg&amp;uacute;n momento deben implementar alguno de estos requerimientos.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1643493" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/ffagas/archive/tags/Visual+Studio+2008/default.aspx">Visual Studio 2008</category><category domain="http://msmvps.com/blogs/ffagas/archive/tags/Best+Practice/default.aspx">Best Practice</category><category domain="http://msmvps.com/blogs/ffagas/archive/tags/MOSS+2007/default.aspx">MOSS 2007</category><category domain="http://msmvps.com/blogs/ffagas/archive/tags/Workflows/default.aspx">Workflows</category><category domain="http://msmvps.com/blogs/ffagas/archive/tags/Desarrollo/default.aspx">Desarrollo</category></item></channel></rss>