<?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 : Personalizacion</title><link>http://msmvps.com/blogs/ffagas/archive/tags/Personalizacion/default.aspx</link><description>Tags: Personalizacion</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>Personalización de Builds en TFS Build 2008</title><link>http://msmvps.com/blogs/ffagas/archive/2008/05/05/personalizaci-243-n-de-builds-en-tfs-build-2008.aspx</link><pubDate>Mon, 05 May 2008 00:31:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1613475</guid><dc:creator>Francisco X. Fagas</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/ffagas/rsscomments.aspx?PostID=1613475</wfw:commentRss><comments>http://msmvps.com/blogs/ffagas/archive/2008/05/05/personalizaci-243-n-de-builds-en-tfs-build-2008.aspx#comments</comments><description>&lt;p&gt;Muchas veces cuando queremos empezar a personalizar la generación de builds del TFS Build 2008 por medio de programación requiere de mucha investigación, en estos días me tocó realizar una personalización parecida para lo cual me fue suficiente la documentación de las dlls, para lo cual pongo a su disposición el link para que lo puedan &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=6466b53d-d80b-4c31-8f5c-dfb5d32e9411&amp;amp;DisplayLang=en"&gt;descargar&lt;/a&gt;.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1613475" width="1" height="1"&gt;</description><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/TFS+2008/default.aspx">TFS 2008</category><category domain="http://msmvps.com/blogs/ffagas/archive/tags/Personalizacion/default.aspx">Personalizacion</category></item><item><title>Cómo personalizar la guía de proceso</title><link>http://msmvps.com/blogs/ffagas/archive/2008/04/05/c-243-mo-personalizar-la-gu-237-a-de-proceso.aspx</link><pubDate>Sat, 05 Apr 2008 00:53:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1572563</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=1572563</wfw:commentRss><comments>http://msmvps.com/blogs/ffagas/archive/2008/04/05/c-243-mo-personalizar-la-gu-237-a-de-proceso.aspx#comments</comments><description>&lt;p&gt;Para este pequeño how to voy a tomar como referencia la guía de proceso de MSF Agile 4.2 disponible por defecto en la instalación del TFS. Si deseamos personalizar la guía debemos tener en cuenta que debemos tener instalado el Visual Studio Team System 2008 Team Foundation Server Power Tools. Primeramente bajaremos en nuestra máquina la guía de proceso de MSF 4.2 para lo cual en el Team Explorer seleccionamos nuestro servidor de desarrollo y nos dirigimos a &amp;quot;Process Template Manager&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/blogs/ffagas/WindowsLiveWriter/CmopersonalizarlaguadeprocesoParte1_CFF1/image_2.png"&gt;&lt;img style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" height="252" alt="image" src="http://msmvps.com/blogs/ffagas/WindowsLiveWriter/CmopersonalizarlaguadeprocesoParte1_CFF1/image_thumb.png" width="285" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Luego seleccionamos la guía con la que queremos trabajar y le damos clic en Download:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/blogs/ffagas/WindowsLiveWriter/CmopersonalizarlaguadeprocesoParte1_CFF1/clip_image002_2.jpg"&gt;&lt;img style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" height="200" alt="clip_image002" src="http://msmvps.com/blogs/ffagas/WindowsLiveWriter/CmopersonalizarlaguadeprocesoParte1_CFF1/clip_image002_thumb.jpg" width="277" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Con el Visual Studio Team System 2008 Team Foundation Server Power Tools instalado no dirigimos a Open Process Template.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/blogs/ffagas/WindowsLiveWriter/CmopersonalizarlaguadeprocesoParte1_CFF1/image_4.png"&gt;&lt;img style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" height="242" alt="image" src="http://msmvps.com/blogs/ffagas/WindowsLiveWriter/CmopersonalizarlaguadeprocesoParte1_CFF1/image_thumb_1.png" width="430" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Y con esta herramienta podremos ingresar a cada una de las secciones de la guía de proceso y personalizarla.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/blogs/ffagas/WindowsLiveWriter/CmopersonalizarlaguadeprocesoParte1_CFF1/image8.png"&gt;&lt;img style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" height="358" alt="image" src="http://msmvps.com/blogs/ffagas/WindowsLiveWriter/CmopersonalizarlaguadeprocesoParte1_CFF1/image8_thumb.png" width="594" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Una vez modificada la guía de proceso la podemos subir al TFS de igual forma de como la descagamos la subimos al TFS.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/blogs/ffagas/WindowsLiveWriter/CmopersonalizarlaguadeprocesoParte1_CFF1/image_8.png"&gt;&lt;img style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" height="94" alt="image" src="http://msmvps.com/blogs/ffagas/WindowsLiveWriter/CmopersonalizarlaguadeprocesoParte1_CFF1/image_thumb_3.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Y a partir de ese momento tendremos nuestra guía de proceso personalizada disponible para cuando procedamos a crear nuestros Team Projects.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/blogs/ffagas/WindowsLiveWriter/CmopersonalizarlaguadeprocesoParte1_CFF1/image15.png"&gt;&lt;img style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" height="239" alt="image" src="http://msmvps.com/blogs/ffagas/WindowsLiveWriter/CmopersonalizarlaguadeprocesoParte1_CFF1/image15_thumb.png" width="260" border="0" /&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=1572563" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/ffagas/archive/tags/Personalizacion/default.aspx">Personalizacion</category><category domain="http://msmvps.com/blogs/ffagas/archive/tags/Gu_26002300_237_3B00_a+de+Proceso/default.aspx">Gu&amp;#237;a de Proceso</category><category domain="http://msmvps.com/blogs/ffagas/archive/tags/MSF+4.0/default.aspx">MSF 4.0</category></item></channel></rss>