<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4593097542621118107</id><updated>2011-11-27T15:59:02.222-08:00</updated><category term='Errores'/><category term='LINQ'/><category term='Visual Studio'/><category term='Migración'/><category term='Receptores de Eventos'/><category term='Recursos'/><category term='Configuracion'/><category term='Windows Workflow Foundation'/><category term='Instalación'/><category term='STSADM'/><category term='Caracteristicas(Features)'/><category term='WSS'/><category term='Validación'/><category term='PeopleEditor'/><category term='VSTO'/><category term='MOSS SP2'/><category term='WebParts'/><category term='Flujos de Trabajo'/><category term='Listas'/><category term='Concentrado'/><category term='SharePoint Designer'/><category term='Permisos'/><category term='Código'/><category term='MOSS'/><category term='WSS SP2'/><category term='MiSitio'/><category term='Contenido'/><category term='Desinstalación'/><category term='Desarrollo'/><title type='text'>SharePoint Ataraxia</title><subtitle type='html'>El dia a dia de trabajar con SharePoint.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://sharepointataraxia.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4593097542621118107/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://sharepointataraxia.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Ricardo Irineo</name><uri>http://www.blogger.com/profile/13736105823557004912</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>9</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4593097542621118107.post-8303275042113569173</id><published>2010-02-10T12:17:00.000-08:00</published><updated>2010-02-10T12:26:22.828-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Desarrollo'/><category scheme='http://www.blogger.com/atom/ns#' term='Código'/><category scheme='http://www.blogger.com/atom/ns#' term='MOSS'/><category scheme='http://www.blogger.com/atom/ns#' term='MiSitio'/><title type='text'>Creación de paginas en MiSitio</title><content type='html'>&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;div&gt;Últimamente he estado trabajando en &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;personalizaciones&lt;/span&gt; para &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;MiSitio&lt;/span&gt; en &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;MOSS&lt;/span&gt; 2007 y uno de los problemas que me encontré al intentar hacer esto fue el hecho de que los sitios no contienen bibliotecas de paginas o infraestructura de publicación para crear paginas como lo haríamos normalmente, también está el hecho de que todas las bibliotecas de documentos incluidas en el portal del usuario podrán ser modificadas por este, ya que el mismo es administrador de su propio sitio!.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Buscando la forma de crear una página o archivo que no perdiera las características con las que cuenta la pagina &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;default&lt;/span&gt; llegue a la solución de copiar la misma página &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;default&lt;/span&gt;.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;aspx&lt;/span&gt;. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;SPFile&lt;/span&gt; f = &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;miWeb&lt;/span&gt;.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;GetFile&lt;/span&gt;("&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;default&lt;/span&gt;.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;aspx&lt;/span&gt;");&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small; "&gt;f.CopyTo(miWeb.ServerRelativeUrl + "&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;DefaultCopia&lt;/span&gt;.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;aspx&lt;/span&gt;");&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small; "&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Con esto podremos copiar la pagina una vez que exista, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;personalizarla&lt;/span&gt; (por ejemplo para eliminar las &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;webpats&lt;/span&gt; existentes y agregar &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;webparts&lt;/span&gt; propias) y agregarla navegación.&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4593097542621118107-8303275042113569173?l=sharepointataraxia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sharepointataraxia.blogspot.com/feeds/8303275042113569173/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://sharepointataraxia.blogspot.com/2010/02/creacion-de-paginas-en-misitio.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4593097542621118107/posts/default/8303275042113569173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4593097542621118107/posts/default/8303275042113569173'/><link rel='alternate' type='text/html' href='http://sharepointataraxia.blogspot.com/2010/02/creacion-de-paginas-en-misitio.html' title='Creación de paginas en MiSitio'/><author><name>Ricardo Irineo</name><uri>http://www.blogger.com/profile/13736105823557004912</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4593097542621118107.post-6405031921770691504</id><published>2009-12-10T15:55:00.000-08:00</published><updated>2009-12-10T16:14:34.547-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VSTO'/><category scheme='http://www.blogger.com/atom/ns#' term='Migración'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Workflow Foundation'/><category scheme='http://www.blogger.com/atom/ns#' term='WSS'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><category scheme='http://www.blogger.com/atom/ns#' term='MOSS'/><category scheme='http://www.blogger.com/atom/ns#' term='Caracteristicas(Features)'/><category scheme='http://www.blogger.com/atom/ns#' term='Flujos de Trabajo'/><title type='text'>Migrar y desinstalar flujos de trabajo de Visual Studio en MOSS 2007 Parte II</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-size: small; "&gt;Después de continuar con la investigación sobre la implementación y migración con flujos de trabajo de Visual Studio 2008 me encontré con una herramienta que facilita esta tarea.&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Dentro de las herramientas de  &lt;/span&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=46b6bf86-e35d-4870-b214-4d7b72b02bf9&amp;amp;displaylang=en"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Microsoft VSTO Power Tools 1.0&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; se encuentra una utilería llamada "Workflow Package Generator", con esta herramienta podemos encapsular los flujos de trabajo para SharePoint creados en Visual Studio 2008 y el Windows Workflow Foundation. Una vez que se hayan instalado las herramientas solo es necesaria la siguiente línea de comandos:&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 14px; "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;“c:\Program Files\Microsoft VSTO Power Tools 1.0\workflowpackagegen.exe" /featureManifest:feature.xml&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span"  style="font-family:Verdana, Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="line-height: 14px; "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;div style="text-align: justify;"&gt;La utilidad se basa en el feature.xml para saber que información contiene la característica, en este caso, la información contenida en el workflow. También puedes agregar procesos a tu Visual Studio para crear el wsp usando esta utilería cada vez que implementas tu solución.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Una vez que tengas el archivo WSP se vuelve mucho mas fácil migrar el flujo de trabajo o implementarlo en diversos ambientes.&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4593097542621118107-6405031921770691504?l=sharepointataraxia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sharepointataraxia.blogspot.com/feeds/6405031921770691504/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://sharepointataraxia.blogspot.com/2009/12/migrar-y-desinstalar-flujos-de-trabajo.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4593097542621118107/posts/default/6405031921770691504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4593097542621118107/posts/default/6405031921770691504'/><link rel='alternate' type='text/html' href='http://sharepointataraxia.blogspot.com/2009/12/migrar-y-desinstalar-flujos-de-trabajo.html' title='Migrar y desinstalar flujos de trabajo de Visual Studio en MOSS 2007 Parte II'/><author><name>Ricardo Irineo</name><uri>http://www.blogger.com/profile/13736105823557004912</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4593097542621118107.post-652147994588025556</id><published>2009-10-29T11:43:00.000-07:00</published><updated>2009-10-29T12:24:11.429-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint Designer'/><category scheme='http://www.blogger.com/atom/ns#' term='Listas'/><category scheme='http://www.blogger.com/atom/ns#' term='WSS'/><category scheme='http://www.blogger.com/atom/ns#' term='WebParts'/><category scheme='http://www.blogger.com/atom/ns#' term='Recursos'/><category scheme='http://www.blogger.com/atom/ns#' term='Concentrado'/><category scheme='http://www.blogger.com/atom/ns#' term='MOSS'/><category scheme='http://www.blogger.com/atom/ns#' term='Contenido'/><title type='text'>Mostrar datos de cualquier lista en la granja.</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Como saben, las características nativas de MOSS nos permiten mostrar información de listas que se encuentren dentro de la misma colección de sitios, ya sea con la WebPart de Consulta de Contenido, desde SharePoint Designer con ListView y los orígenes de datos. Sin embargo, cuando intentamos mostrar información de listas que se encuentran en otras colecciones de sitios o aun en distintas aplicaciones, se complica el asunto. Lo mismo sucede con WSS que no cuenta con la WebPart de consulta de contenido, y no todos los usuarios están tan familiarizados con SPD, más aun, no todas las empresas &lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Para solucionar estos problemas existen WebParts de la comunidad, las hay de varios tipos, encontré tres de ellas que me pareció importante compartir con ustedes:&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;http://www.endusersharepoint.com/2009/09/16/aggregating-across-site-collections/&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;http://www.novolocus.com/2008/07/24/content-roll-up-options-conclusions/&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;http://blogs.infosupport.com/blogs/porint/archive/2006/11/14/WSS-v3-Solution-and-Feature-framework-applied-to-the-FlexListViewer-webpart.aspx&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Son dos las opciones que me llamaron mas la atención:&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;FlexListViewerMoss (http://blogs.infosupport.com/media/p/10976.aspx)&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Lightning Conductor Web Part (http://www.lightningtools.com/pages/lightning-conductor-web-part.aspx)&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;1.&lt;/span&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;El primero es gratis y nos presenta la oportunidad de mostrar información de cualquier lista en la granja, inclusive puede mostrar directamente una vista, como una solución básica y flexible es de mucha ayuda.&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;2.&lt;/span&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;La segunda es una WebPart de paga que es muy configurable y poderosa, cuenta con una versión de evaluación para revisar la funcionalidad de la misma.&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Mi recomendación es que evalúen todas las posibilidades y al final decidan cual es la mejor opción para su ambiente, considerando si necesitan liberar estas WebParts al usuario, permitir que las personalice o bien solo desean mostrar información de una lista en un caso especifico, eviten un "overkill".&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Posteriormente realizare un análisis mas exhaustivo de comparación para este tipo de WebParts.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4593097542621118107-652147994588025556?l=sharepointataraxia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sharepointataraxia.blogspot.com/feeds/652147994588025556/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://sharepointataraxia.blogspot.com/2009/10/mostrar-datos-de-cualquier-lista-en-la.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4593097542621118107/posts/default/652147994588025556'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4593097542621118107/posts/default/652147994588025556'/><link rel='alternate' type='text/html' href='http://sharepointataraxia.blogspot.com/2009/10/mostrar-datos-de-cualquier-lista-en-la.html' title='Mostrar datos de cualquier lista en la granja.'/><author><name>Ricardo Irineo</name><uri>http://www.blogger.com/profile/13736105823557004912</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4593097542621118107.post-2383047637422037606</id><published>2009-10-12T10:13:00.000-07:00</published><updated>2009-10-12T11:09:00.607-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='STSADM'/><category scheme='http://www.blogger.com/atom/ns#' term='Migración'/><category scheme='http://www.blogger.com/atom/ns#' term='Desarrollo'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Workflow Foundation'/><category scheme='http://www.blogger.com/atom/ns#' term='Desinstalación'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><category scheme='http://www.blogger.com/atom/ns#' term='MOSS'/><category scheme='http://www.blogger.com/atom/ns#' term='Caracteristicas(Features)'/><category scheme='http://www.blogger.com/atom/ns#' term='Instalación'/><category scheme='http://www.blogger.com/atom/ns#' term='Flujos de Trabajo'/><title type='text'>Migrar y desinstalar flujos de trabajo de Visual Studio en MOSS 2007</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;div style="text-align: justify;"&gt;Los flujos de trabajo de Visual Studio con las extensiones para SharePoint, en conjunto con el .NET Framework 3.5 y el Windows Workflow Foundation proporcionan una herramienta muy potente para manejar la lógica de un proceso de negocio y si bien existen herramientas como SharePoint Designer que permiten realizar flujos de trabajo con 0 programación, conforme la complejidad o longitud de estos avanza, se vuelve más complicado mantener una estructura entendible y/o eficiente.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;El tema de los flujos de trabajo es enorme y ya iré abarcando el tema poco a poco, una de las primeras preguntas cuando uno genera su primer flujo de trabajo es como se instala, claro, si tenemos la facilidad de un F5 y listo en Visual Studio, pero si se quiere instalar el mismo flujo de trabajo en un ambiente que no tenga Visual Studio, se pensaría que el paso sería el mismo que con Webparts o receptores de eventos, ir a la carpeta, copiar el WSP y el setup.bat, ejecutarlo y listo... pero, los flujos de trabajo no funcionan así!.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Lo mismo sucede cuando intentas desinstalarlo por primera vez, no hay un "setup -uninstall" que nos ayude, así que sin más veamos cómo se resuelven estos problemas dividiendo esto en dos simples secciones: Instalación y Desinstalación.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px; "&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;&lt;b&gt;Instalando (o migrando) un flujo de Trabajo.&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;div style="text-align: justify;"&gt;Los flujos de trabajo se implementan por medio de una característica (feature) por lo que toda la información necesaria para que el flujo de trabajo funcione se encuentra en dos sitios, la carpeta de la característica y el ensamblado como tal.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;La carpeta la podemos encontrar en la ruta de instalación de SharePoint, por ejemplo: "C:\Program Files\Common Files\microsoft shared\Web Server Extensions\12\TEMPLATE\FEATURES", el nombre de la carpeta corresponde al nombre que hayamos declarado al crear el Workflow (para los que tengan tan mala memoria como yo, el nombre también está dentro de los archivos feature.xml y workflow.xml), de no tener un ambiente que tenga previamente instalado el Workflow y por consecuencia no ver esta carpeta simplemente crea una carpeta con el nombre de tu Workflow que contenga los archivos feature.xml y workflow.xml que genera Visual Studio automáticamente.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;El ensamblado lo puedes copiar del directorio de tu solución o bien tomar el que se encuentra en el GAC  (de un entorno que ya tenga el flujo de trabajo instalado) con una herramienta externa.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Copia estos dos elementos a tu servidor destino, dejando la carpeta en el lugar correspondiente a las características, e instalando tu ensamblado en el GAC (o como muchos prefieren en la carpeta bin) ya sea con alguna herramienta o manualmente pegando el .dll en la carpeta "C:/Windows/assembly", si la seguridad del servidor no te permite esta instalación manual, puedes hacerlo con un workaround desde cmd (tema aparte, si alguien lo necesita lo agrego).&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Por ultimo hay que instalar la característica y activarla en el sitio correspondiente, esto por medio del stsadm, que se encuentra en ""C:\Program Files\Common Files\microsoft shared\Web Server Extensions\12\bin", dependiendo del directorio de instalación, lenguaje y sistema operativo. Sitúate en dicha carpeta dentro de una ventana de consola y ejecuta las siguientes instrucciones reemplazando "MiFlujo" por el nombre de tu flujo de trabajo y "misitio" por el sitio donde instalaras el mismo, incluyendo el puerto:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;stsadm -o installfeature -name MyFlujo&lt;/div&gt;&lt;div style="text-align: justify;"&gt;stsadm -o activatefeature -name MyFlujo -url http://misitio:81&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Una vez que todo se haya instalado y activado ya puedes asociar tu flujo de trabajo a la(s) lista(s) que corresponda(n), antes, asegúrate que todos los elementos que necesita el flujo de trabajo ya se encuentran en el servidor, como pueden ser listas adicionales que consulte durante el proceso, o cualquier nombre que hayas puesto en código duro (lo cual no es recomendado..).&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Felicidades ya has migrado tu primer flujo de trabajo!.&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px; "&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;&lt;b&gt;Desinstalando un flujo de trabajo.&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;div style="text-align: justify;"&gt;Cuando tenemos un flujo de trabajo de SharePoint Designer, basta con eliminarlo desde el mismo para cumplir este punto, mas sin embargo los flujos de trabajo de Visual Studio son en realidad esto, flujos que podemos reutilizar para n número de elementos, creando instancias en diferentes listas que podrían a su vez tener un comportamiento diferente usando los formularios de iniciación, en fin, eliminar el flujo de la lista solo quitara la instancia que se ejecutaba en esa lista, no desinstala el flujo de trabajo como tal.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Si has leído la primera parte de este post no te será tan difícil comprender como se puede desinstalar un flujo de trabajo, de lo contrario no te preocupes y sigue leyendo que pronto entenderás. &lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;El flujo de trabajo es una característica y para desinstalarlo hay que tratarlo como tal, abre una ventana de consola (cmd) y accede a la ruta de instalación de SharePoint , en la carpeta bin (""C:\Program Files\Common Files\microsoft shared\Web Server Extensions\12\bin" usualmente). Una vez en este directorio ejecuta las siguientes líneas reemplazando los parámetros con los que correspondan a tu flujo de trabajo:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;stsadm -o deactivatefeature -name MyFlujo -url http://localhost:81&lt;/div&gt;&lt;div style="text-align: justify;"&gt;stsadm -o uninstallfeature -name MyFlujo&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Puedes usar el id de tu flujo de trabajo en lugar del nombre, o ambos si asi lo decides, estos se encuentran en los archivos feature.xml y workflow.xml que crea Visual Studio automáticamente.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Con esto el flujo de trabajo ya no aparecerá en las opciones para asociar nuevos flujos a una lista, así mismo, los elementos aun se encuentran físicamente en el servidor, tanto la carpeta de la característica en "C:\Program Files\Common Files\microsoft shared\Web Server Extensions\12\TEMPLATES\FEATURES" como en ensamblado en el GAC (o en el bin si ahí lo instalaste), puedes remover estos elementos manualmente.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(204, 0, 0); font-weight: bold; "&gt;Conclusiones.&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;div style="text-align: justify;"&gt;Como ven el proceso para instalación y desinstalación de flujos de trabajo no es tan complejo como parecería a primera vista, y se puede automatizar aun mas por medio de paquetes como wsp, archivos bat, instaladores de codeplex, etc.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Espero haber resuelto algunas dudas y creado algunas otras, deja tus comentarios si te gustaría que ampliara la información en algún tema, o bien, si tienes dudas o comentarios, la crítica es bien recibida también.&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4593097542621118107-2383047637422037606?l=sharepointataraxia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sharepointataraxia.blogspot.com/feeds/2383047637422037606/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://sharepointataraxia.blogspot.com/2009/10/migrar-y-desinstalar-flujos-de-trabajo.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4593097542621118107/posts/default/2383047637422037606'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4593097542621118107/posts/default/2383047637422037606'/><link rel='alternate' type='text/html' href='http://sharepointataraxia.blogspot.com/2009/10/migrar-y-desinstalar-flujos-de-trabajo.html' title='Migrar y desinstalar flujos de trabajo de Visual Studio en MOSS 2007'/><author><name>Ricardo Irineo</name><uri>http://www.blogger.com/profile/13736105823557004912</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4593097542621118107.post-7017424160522809132</id><published>2009-10-08T17:45:00.000-07:00</published><updated>2009-10-08T17:57:12.031-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Desarrollo'/><category scheme='http://www.blogger.com/atom/ns#' term='Código'/><category scheme='http://www.blogger.com/atom/ns#' term='MOSS'/><category scheme='http://www.blogger.com/atom/ns#' term='LINQ'/><title type='text'>Obtener campos especificos de un item con Linq to SharePoint</title><content type='html'>&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;Una entrada breve para describir como podemos obtener con linq los valores que necesitamos de un item, la consulta es sencilla, hay que establecer una condicion para obtener el item que necesitamos (en este caso lo hago en base al ID del item) y despues seleccionar los campos que usaremos y de donde obtendran la informacion:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;using (SPSite miSitio = new SPSite(SPContext.Current.Site.ID))&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        using (SPWeb miWeb = miSitio.OpenWeb(SPContext.Current.Web.ID))&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        {&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;                    SPList miLista = miWeb.Lists["nombreLista"];&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;                    &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;                    var res = from renglon in miLista.Items.Cast&lt;splistitem&gt;()                              &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;                              where renglon.ID == int.Parse(Lista.SelectedValue)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;                              select new&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;                              {&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;                                  Nombre = renglon["campoNombre"],&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;                                  Direccion = renglon["campoDireccion"],&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: 13px; "&gt;                              };&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;Una vez con esto podemos acceder a la informacion en los resultados de la forma en la que queramos, ya sea usandolo como datasource, convirtiendolo en lista, en datatable, o bien si solo se trata de un item como en este caso obtener la informacion directamente, por ejemplo:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;res.AsEnumerable().Single().Nombre.ToString();&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;Esto nos regresara una cadena que podemos usar para cualquier cosa!&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4593097542621118107-7017424160522809132?l=sharepointataraxia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sharepointataraxia.blogspot.com/feeds/7017424160522809132/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://sharepointataraxia.blogspot.com/2009/10/obtener-campos-especificos-de-un-item.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4593097542621118107/posts/default/7017424160522809132'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4593097542621118107/posts/default/7017424160522809132'/><link rel='alternate' type='text/html' href='http://sharepointataraxia.blogspot.com/2009/10/obtener-campos-especificos-de-un-item.html' title='Obtener campos especificos de un item con Linq to SharePoint'/><author><name>Ricardo Irineo</name><uri>http://www.blogger.com/profile/13736105823557004912</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4593097542621118107.post-7602141770293806262</id><published>2009-10-06T16:07:00.000-07:00</published><updated>2009-10-06T16:35:25.523-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PeopleEditor'/><category scheme='http://www.blogger.com/atom/ns#' term='Desarrollo'/><category scheme='http://www.blogger.com/atom/ns#' term='Validación'/><category scheme='http://www.blogger.com/atom/ns#' term='Código'/><category scheme='http://www.blogger.com/atom/ns#' term='MOSS'/><title type='text'>Validando un Control PeopleEditor en SharePoint</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px; "&gt;Bueno, hace poco tuve que validar uno de estos controles para un &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;requerimiento&lt;/span&gt;, y buscando &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_1"&gt;información&lt;/span&gt; &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_2"&gt;encontré&lt;/span&gt; algunas referencias que mencionaban cosas como que no era posible usar controles de &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_3"&gt;valuación&lt;/span&gt; para controles de &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;SharePoint&lt;/span&gt;, &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_5"&gt;así&lt;/span&gt; como preguntas en general sobre como utilizar la &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_6"&gt;lógica&lt;/span&gt; de estas &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;validaciones&lt;/span&gt;.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_8"&gt;Según&lt;/span&gt; la experiencia que tuve esta &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_9"&gt;ocación&lt;/span&gt; me &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_10"&gt;pareció&lt;/span&gt; algo muy sencillo sin embargo &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_11"&gt;aquí&lt;/span&gt; incluyo alguna &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_12"&gt;información&lt;/span&gt; del mismo para aquellos que tengan problemas sobre este tipo de &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;validaciones&lt;/span&gt;.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;El control &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;PeopleEditor&lt;/span&gt; cuenta con &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_15"&gt;métodos&lt;/span&gt; de &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;validación&lt;/span&gt; propios, que funcionan a &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_17"&gt;través&lt;/span&gt; de algunas propiedades que nosotros establecemos, las propiedades mas comunes son:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;PeopleEditorEjemplo&lt;/span&gt;.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_19"&gt;AllowEmpty&lt;/span&gt; = &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_20"&gt;false&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_21"&gt;PeopleEditorEjemplo&lt;/span&gt;.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_22"&gt;MultiSelect&lt;/span&gt; = &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_23"&gt;false&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_24"&gt;PeopleEditorEjemplo&lt;/span&gt;.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_25"&gt;ValidatorEnabled&lt;/span&gt; = &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_26"&gt;true&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_27"&gt;PeopleEditorEjemplo&lt;/span&gt;.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_28"&gt;SelectionSet&lt;/span&gt; = "&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_29"&gt;User&lt;/span&gt;";&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Con esto nos aseguramos que el control no pueda o no estar &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_30"&gt;vació&lt;/span&gt;, contar con selecciones &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_31"&gt;múltiples&lt;/span&gt;, y que puedan seleccionar solo usuarios o grupos, existen propiedades adicionales por ejemplo, para establecer los grupos que &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_32"&gt;estén&lt;/span&gt; disponibles.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Una vez que se tengan establecidas las propiedades solo es necesario llamar el &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_33"&gt;método&lt;/span&gt; correspondiente para validar el control:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;&lt;span class="Apple-style-span"  style="font-size:13px;"&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_34"&gt;void&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_35"&gt;btnAceptar&lt;/span&gt;_&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_36"&gt;Click&lt;/span&gt;(&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_37"&gt;object&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_38"&gt;sender&lt;/span&gt;, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_39"&gt;EventArgs&lt;/span&gt; e)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_40"&gt;PeopleEditorEjemplo&lt;/span&gt;.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_41"&gt;Validate&lt;/span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Con esto el control se validara y mostrara el error correspondiente debajo del control, los mensajes de error dependen de la &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_42"&gt;conflagración&lt;/span&gt; de lenguaje de &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_43"&gt;SharePoint&lt;/span&gt;. Ejemplo de &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_44"&gt;validación&lt;/span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: 16px; "&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_26ZrCIbrFFM/SsvS57CdufI/AAAAAAAAAAc/QjbOyYscVpM/s1600-h/peopleeditorvalidation.jpg"&gt;&lt;img src="http://2.bp.blogspot.com/_26ZrCIbrFFM/SsvS57CdufI/AAAAAAAAAAc/QjbOyYscVpM/s320/peopleeditorvalidation.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5389633271621335538" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 320px; height: 30px; " /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Espero les sirva de algo en sus futuros desarrollos.&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4593097542621118107-7602141770293806262?l=sharepointataraxia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sharepointataraxia.blogspot.com/feeds/7602141770293806262/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://sharepointataraxia.blogspot.com/2009/10/validando-un-control-peopleeditor-en.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4593097542621118107/posts/default/7602141770293806262'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4593097542621118107/posts/default/7602141770293806262'/><link rel='alternate' type='text/html' href='http://sharepointataraxia.blogspot.com/2009/10/validando-un-control-peopleeditor-en.html' title='Validando un Control PeopleEditor en SharePoint'/><author><name>Ricardo Irineo</name><uri>http://www.blogger.com/profile/13736105823557004912</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_26ZrCIbrFFM/SsvS57CdufI/AAAAAAAAAAc/QjbOyYscVpM/s72-c/peopleeditorvalidation.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4593097542621118107.post-8875672550736531943</id><published>2009-07-21T14:11:00.000-07:00</published><updated>2009-10-29T12:34:48.206-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Desarrollo'/><category scheme='http://www.blogger.com/atom/ns#' term='Listas'/><category scheme='http://www.blogger.com/atom/ns#' term='WebParts'/><category scheme='http://www.blogger.com/atom/ns#' term='Código'/><category scheme='http://www.blogger.com/atom/ns#' term='Permisos'/><category scheme='http://www.blogger.com/atom/ns#' term='MOSS'/><category scheme='http://www.blogger.com/atom/ns#' term='Receptores de Eventos'/><title type='text'>Establecer permisos de Item en un receptor de eventos programaticamente parte 1</title><content type='html'>&lt;div&gt;&lt;span style="font-size:85%;"&gt;Supongamos que es necesario que cada item de una lista tenga permisos distintos dependiendo de campos especificos que el usuario llena a la hora de crear un item, por ejemplo en una lista de tareas donde queramos que las tareas sean visibles para todos si no estan asignadas a nadie, per que solo un grupo en especifico pueda editarlas, para esto podemos ayudarnos de un receptor de eventos que lea esta informacion y modifique los permisos del item de acuerdo al requerimiento.&lt;br /&gt;&lt;span style="font-family:monospace;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;El primer paso es el crear un receptor de eventos, puedes ayudarte con las extensiones para Visual Studio que cuentan con una plantilla para la generación de receptores de eventos, esta plantilla no es visible en la creacion de una solucion, solo esta disponible cuando agregas un elemento nuevo a la solucion ya existente. No entrare en detalles en este tema a menos que les interese en cuyo caso dejen sus comentarios.&lt;br /&gt;&lt;br /&gt;Sea cual sea el metodo por el que creas el receptor de eventos este debe atrapar el evento ItemAdded, si utilizaste las extensiones solo debes de quitar los tags de comentarios ("//"), ojo, no quites los tags de la descripcion del evento ("///").&lt;br /&gt;&lt;br /&gt;Ahora debemos ejecutar el codigo con privilegios elevados, ya explicare la razon de esto mas adelante:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;SPSecurity.RunWithElevatedPrivileges(delegate()&lt;/span&gt; &lt;span style="color: rgb(51, 102, 255);"&gt;            {&lt;/span&gt; &lt;span style="color: rgb(51, 102, 255);"&gt;                using (SPSite miSitio = new SPSite(properties.SiteId))&lt;/span&gt; &lt;span style="color: rgb(51, 102, 255);"&gt;                {&lt;/span&gt; &lt;span style="color: rgb(51, 102, 255);"&gt;                    using (SPWeb miWeb = miSitio.OpenWeb(properties.WebUrl.Replace(miSitio.Url,"")))&lt;/span&gt; &lt;span style="color: rgb(51, 102, 255);"&gt;                    {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Con esto lo que hacemos es delegar todo nuestro codigo para ejecutarse con privilegios elevados, en base a estos privilegios obtenemos los objetos SPSite y SPWeb correspondientes al contexto en el que se ejecuto el evento, es muy importante que al crear el sitio lo hagan haciendo referencia al ID del sitio (properties.SiteId) y no lo tomen el sitio del contexto o el sitio como tal, ya que estos incluyen las credenciales del usuario actual; en caso de el SPWeb si solo utilizamos el metodo OpenWeb sin mandarle parametros tambien tendremos problemas con el tipo de credenciales que manejan, es por esto que se le envia la direccion relativa del subsitio actual (por eso se elimina el inicio de WebUrl ya que este incluye la direccion completa del subsitio).&lt;br /&gt;&lt;br /&gt;Ahora que tenemos los componentes principales, podemos emepzar a obtener los datos que necesitamos:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;miWeb.AllowUnsafeUpdates = true;&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;SPRoleDefinition RoleDefinition = miWeb.RoleDefinitions.GetByType(SPRoleType.Contributor);&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;                        SPListItem miItemActual = miWeb.Lists[properties.ListId].GetItemById(properties.ListItemId);&lt;/span&gt; &lt;span style="color: rgb(51, 102, 255);"&gt;                                                &lt;/span&gt; &lt;span style="color: rgb(51, 102, 255);"&gt;                        miItemActual.BreakRoleInheritance(true); &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;miWeb.AllowUnsafeUpdates = true;&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;while (miItemActual.RoleAssignments.Count &gt; 0)&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;                        {&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;       miItemActual.RoleAssignments.Remove(0);&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;                        }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Explicando el codigo anterior lo que hacemos es permitir las actualizaciones en la web que obtuvimos (que es un requisito para ejecutar BreakRoleInheritance), despues obtenemos la definicion de rol de Contribuir, puedes cambiar este usando el enum SPRoleType, despues obtenemos el item asociado al evento (ojo aqui vuelvo a hacer referencia al ID de la lista y el item para obtenerlo, si haces referencia directa tendras problemas en el codigo). &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size:85%;"&gt;En la siguiente parte explicare como crear definiciones de rol de uso.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4593097542621118107-8875672550736531943?l=sharepointataraxia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sharepointataraxia.blogspot.com/feeds/8875672550736531943/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://sharepointataraxia.blogspot.com/2009/07/establecer-permisos-de-item-en-un.html#comment-form' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4593097542621118107/posts/default/8875672550736531943'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4593097542621118107/posts/default/8875672550736531943'/><link rel='alternate' type='text/html' href='http://sharepointataraxia.blogspot.com/2009/07/establecer-permisos-de-item-en-un.html' title='Establecer permisos de Item en un receptor de eventos programaticamente parte 1'/><author><name>Ricardo Irineo</name><uri>http://www.blogger.com/profile/13736105823557004912</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4593097542621118107.post-2909361695782175954</id><published>2009-07-21T11:07:00.001-07:00</published><updated>2009-07-21T14:07:48.149-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint Designer'/><category scheme='http://www.blogger.com/atom/ns#' term='WSS SP2'/><category scheme='http://www.blogger.com/atom/ns#' term='MOSS SP2'/><category scheme='http://www.blogger.com/atom/ns#' term='Flujos de Trabajo'/><title type='text'>Error con Flujos de Trabajo recursivos con SharePoint Designer</title><content type='html'>&lt;span style="font-size:85%;"&gt;Microsoft ha dado una explicación oficial a lo que muchos ya &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_1"&gt;sabíamos&lt;/span&gt;, a partir del &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Service&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;Pack&lt;/span&gt; 2 para &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;Windows&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;SharePoint&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;Services&lt;/span&gt; y Microsoft &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;Office&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;SharePoint&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;Server&lt;/span&gt; los &lt;a href="http://blogs.msdn.com/sharepointdesigner/archive/2009/07/13/service-pack-2-prevents-an-on-change-workflow-from-starting-itself.aspx"&gt;flujos recursivos ya no son permitidos&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style="text-align: left;"&gt;&lt;span style="color: rgb(51, 102, 255);font-size:85%;" &gt;&lt;span style=";font-family:georgia;font-size:100%;"  &gt;&lt;span style="font-weight: bold;"&gt;Impacto&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;Principalmente&lt;/span&gt; los flujos de trabajo que se ven a&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Si creas un flujo de trabajo que &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_11"&gt;envíe&lt;/span&gt; una alerta por correo &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_12"&gt;electrónico&lt;/span&gt; &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_13"&gt;periódicamente&lt;/span&gt; para tareas comunes (respaldos manuales de listas, &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_14"&gt;depuración&lt;/span&gt;, informes de uso, etc). Estos flujos no tienen un fin definido, pero pude que el &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;requerimiento&lt;/span&gt; este justificado.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Flujos de trabajo que se ejecutan mientras se cumpla una &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_16"&gt;condición&lt;/span&gt; especifica (por ejemplo siempre que un elemento muestre un rendimiento debajo del 70%).&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Flujos que simulen un &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;State&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;Machine&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_19"&gt;Workflow&lt;/span&gt;, ya que para mover el flujo entre cada estado se ejecuta una nueva instancia del mismo. (pueden ver un ejemplo de este en un post de &lt;a href="http://coredotnet.blogspot.com/2008/03/creating-state-machine-workflows-using.html"&gt;&lt;span class="date"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_20"&gt;Adnan&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_21"&gt;Farooq&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_22"&gt;Hashmi&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="date"&gt; en ingles).&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="color: rgb(51, 102, 255);font-size:85%;" &gt;&lt;span style=";font-family:georgia;font-size:100%;"  &gt;&lt;span style="font-weight: bold;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_23"&gt;Justificación&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;La &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_24"&gt;razón&lt;/span&gt; de ser de esta &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_25"&gt;restricción&lt;/span&gt; &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_26"&gt;según&lt;/span&gt; el anuncio de &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_27"&gt;Microsoft&lt;/span&gt; es el problema que al crear un flujo de trabajo que se dispare cuando se modifique un elemento y este mismo flujo &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_28"&gt;realize&lt;/span&gt; una &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_29"&gt;molificación&lt;/span&gt; al elemento creara un ciclo infinito que muchas veces no es la &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_30"&gt;intención&lt;/span&gt; del usuario, pero si admiten que puede ser un &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_31"&gt;requerimiento&lt;/span&gt; valido realizar dicho flujo, por lo que proponen  una &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_32"&gt;solución&lt;/span&gt; a este tipo de &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_33"&gt;requerimientos&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);font-size:85%;" &gt;&lt;span style=";font-family:georgia;font-size:100%;"  &gt;&lt;span style="font-weight: bold;"&gt;&lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_34"&gt;Solución&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;Existen dos soluciones, o crear el flujo de trabajo por medio de Visual &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_35"&gt;Studio&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;La segunda &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_36"&gt;opción&lt;/span&gt; es utilizar 2 flujos de trabajo para evitar la &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_37"&gt;restricción&lt;/span&gt; impuesta, esto es algo que si bien no complicado se vislumbra laborioso, especialmente para aquellos que tienen muchos flujos de este tipo, demasiado largos o complejos, puesto que necesitan recrear el mismo flujo, &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_38"&gt;así&lt;/span&gt; cada uno de ellos se quedara "estancado" en un ciclo, pero el flujo espejo &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_39"&gt;podrá&lt;/span&gt; avanzar en su lugar. Para implementar esto se puede copiar el flujo de trabajo pero al intentar implementar el mismo flujo dos veces entran en conflicto, aunque no he realizado pruebas exhaustivas en cuanto a este punto y tampoco he encontrado una herramienta que exista actualmente que te permita &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_40"&gt;recrear&lt;/span&gt; el flujo cambiando los &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_41"&gt;IDs&lt;/span&gt; y &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_42"&gt;GUIDS&lt;/span&gt; asociados.&lt;br /&gt;&lt;br /&gt;La ultima forma es un poco mas compleja apunta a que al terminar un flujo de trabajo &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_43"&gt;inicializes&lt;/span&gt; el siguiente y &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_44"&gt;viceversa&lt;/span&gt;, esto lo puedes hacer con ayuda de las &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_45"&gt;custom&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_46"&gt;activities&lt;/span&gt; que &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_47"&gt;estan&lt;/span&gt; en &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_48"&gt;codeplex&lt;/span&gt;, terminas un flujo "A" e inicializas el flujo "B" que a su vez &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_49"&gt;volverá&lt;/span&gt; a &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_50"&gt;iniciar&lt;/span&gt; "A".&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);font-size:85%;" &gt;&lt;span style=";font-family:georgia;font-size:100%;"  &gt;&lt;span style="font-weight: bold;"&gt;Conclusiones&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;Las pruebas que he realizado hasta ahora indican que la segunda &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_51"&gt;solución&lt;/span&gt; es la mas viable pero menos recomendada en &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_52"&gt;términos&lt;/span&gt; de rendimiento y mejores practicas, la &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_53"&gt;solución&lt;/span&gt; de visual &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_54"&gt;studio&lt;/span&gt; esta siempre sujeta a los tiempos y complejidad del &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_55"&gt;requerimiento&lt;/span&gt; y la ultima &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_56"&gt;opción&lt;/span&gt; significa modificar el &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_57"&gt;comportamiento&lt;/span&gt; del flujo, tal vez inclusive la estructura.&lt;br /&gt;&lt;br /&gt;A mi parecer lo que hace Microsoft es volver &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_58"&gt;SPD&lt;/span&gt; un producto mas seguro para usuarios finales o personas que no &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_59"&gt;estén&lt;/span&gt; relacionadas muy a fondo con conceptos del desarrollo &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_60"&gt;básicos&lt;/span&gt; como la &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_61"&gt;recursividad&lt;/span&gt;. Este cambio responde al hecho de que un flujo de trabajo infinito puede llegar a consumir grandes recursos en el servidor, y al parecer es mucho mas &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_62"&gt;común&lt;/span&gt; equivocarte y crear un flujo de este tipo sin querer a hacerlo con plena conciencia de lo que pretendes, lo cual representa un problema para aquellos que &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_63"&gt;utilizábamos&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_64"&gt;SPD&lt;/span&gt; para este tipo de trabajos debido a la rapidez con la que se genera un flujo.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4593097542621118107-2909361695782175954?l=sharepointataraxia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sharepointataraxia.blogspot.com/feeds/2909361695782175954/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://sharepointataraxia.blogspot.com/2009/07/error-con-flujos-de-trabajo-recursivos.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4593097542621118107/posts/default/2909361695782175954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4593097542621118107/posts/default/2909361695782175954'/><link rel='alternate' type='text/html' href='http://sharepointataraxia.blogspot.com/2009/07/error-con-flujos-de-trabajo-recursivos.html' title='Error con Flujos de Trabajo recursivos con SharePoint Designer'/><author><name>Ricardo Irineo</name><uri>http://www.blogger.com/profile/13736105823557004912</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4593097542621118107.post-401532349697377420</id><published>2009-04-06T17:07:00.001-07:00</published><updated>2009-04-06T17:10:28.095-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Configuracion'/><category scheme='http://www.blogger.com/atom/ns#' term='Flujos de Trabajo'/><category scheme='http://www.blogger.com/atom/ns#' term='Errores'/><title type='text'>No se puede mostrar el formulario porque no está disponible el estado de la sesión</title><content type='html'>Primera Leccion Aprendida, cuando no puedas ejecutar Flujos de Trabajo en un Servidor revisa la configuracion desde 0, es decir no solo la aplicacion sino que los servicios de busqueda y los servicios compartidos del servidor, el enlace hacia la pagina que me ayudo con esto:&lt;br /&gt;&lt;br /&gt;&lt;a style="font-weight: bold;" href="http://www.gavd.net/servers/sharepointv3/spsv3_item.aspx?top=2&amp;amp;itm=631"&gt;Error al mostrar formularios de Flujos de Trabajo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4593097542621118107-401532349697377420?l=sharepointataraxia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sharepointataraxia.blogspot.com/feeds/401532349697377420/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://sharepointataraxia.blogspot.com/2009/04/no-se-puede-mostrar-el-formulario.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4593097542621118107/posts/default/401532349697377420'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4593097542621118107/posts/default/401532349697377420'/><link rel='alternate' type='text/html' href='http://sharepointataraxia.blogspot.com/2009/04/no-se-puede-mostrar-el-formulario.html' title='No se puede mostrar el formulario porque no está disponible el estado de la sesión'/><author><name>Ricardo Irineo</name><uri>http://www.blogger.com/profile/13736105823557004912</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
