<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://geeks.ms/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>Haaron Gonzalez : Tecnicas, Soporte</title><link>http://geeks.ms/blogs/haarongonzalez/archive/tags/Tecnicas/Soporte/default.aspx</link><description>Etiquetas: Tecnicas, Soporte</description><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP1 (Build: 31106.3070)</generator><item><title>Comunicando anuncios por correo electrónico con SharePoint Designer 2010</title><link>http://geeks.ms/blogs/haarongonzalez/archive/2012/10/07/comunicando-anuncios-por-correo-electr-243-nico-con-sharepoint-designer-2010.aspx</link><pubDate>Mon, 08 Oct 2012 00:50:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:207048</guid><dc:creator>Haaron Gonzalez</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/haarongonzalez/rsscomments.aspx?PostID=207048</wfw:commentRss><comments>http://geeks.ms/blogs/haarongonzalez/archive/2012/10/07/comunicando-anuncios-por-correo-electr-243-nico-con-sharepoint-designer-2010.aspx#comments</comments><description>&lt;p align="justify"&gt;El usuario final como siempre sorprendiedonos con nuevos escenarios, sucede que se busca hacer que en vez de mandar un correo electrónico con el enlace a un elemento de lista de anuncios como parte de la opcion de send link o de las alertas, que mejor en el correo electrónico viaje el texto del cuerpo del anuncio. Y sinceramente me pareció un escenario razonable el no querer enlaces en este específico tema de la lista de anuncios. Y bueno la solución para este ejemplo fue crear un flujo de trabajo de lista con una forma de iniciación para solicitarle al usuario capture el grupo o los usuarios a los que quiere hacer llegar vía correo electrónico el anuncio. Aprovecho para hacer mención de las caracteristicas de SharePoint Designer 2010.&lt;/p&gt;  &lt;p&gt;Aquí el ejemplo:&lt;/p&gt;  &lt;p align="justify"&gt;Abrimos nuestro sitio con SharePoint Designer 2010 y seleccionamos la sección de Workflows para proceder a crear un flujo de trabajo de lista asociado a la lista de anuncios, como se muestra a continuación:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/3201.image_5F00_7676CDAD.png"&gt;&lt;img style="background-image:none;border-right-width:0px;margin:5px auto;padding-left:0px;padding-right:0px;display:block;float:none;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/7624.image_5F00_thumb_5F00_3A6A8BF8.png" width="640" height="354" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Nombramos el flujo de trabajo con los datos:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Name: Send Annoucement by Eamil &lt;/li&gt;    &lt;li&gt;Description: Use this option to send anouncement by email &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Una vez dentro del Workflow Designer entonces elegimos la opción de Initiation Form Parameters.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/8015.image_5F00_53C26965.png"&gt;&lt;img style="background-image:none;border-right-width:0px;margin:5px auto;padding-left:0px;padding-right:0px;display:block;float:none;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/4863.image_5F00_thumb_5F00_4FC4EF08.png" width="1024" height="269" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Usando el asistente de configuración de la forma de iniciación agregamos un campo de tipo persona dando clic en el botón Add, posteriormente especificamos el nombre del campo “Mail Receipients” una descripción y el tipo de campo, aquí tenemos que seleccionar el campo “Person of Group”, esto nos permite elegir a que grupos o usuarios mandaremos el correo electrónico. Posteriormente configuramos el campo especificando que muestre la cuenta, que permita capturar usuarios y grupos, que permita capturar más de un usuario o grupo y listo, damos clic en Finish y después Ok.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/6840.image_5F00_2E55239F.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/8407.image_5F00_thumb_5F00_3D4BB6DF.png" width="1024" height="574" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Posteriormente de la lista de acciones disponibles en el flujo elegimos el de Send Email.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/8306.image_5F00_3EAC8759.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/4846.image_5F00_thumb_5F00_74CDFFA8.png" width="640" height="428" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Procedemos entonces a configurar la acción de Send Email dando clic en el enlace these users. Esto carga la ventana de configuración de la actividad permitiéndonos entonces definir lo siguiente:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Tomar a los destinatarios de los parámetros de iniciación del flujo para que a estos se les mande el correo electrónico &lt;/li&gt;    &lt;li&gt;Tomar al título del anuncio para que este sea el título del correo &lt;/li&gt;    &lt;li&gt;Tomar al cuerpo del anuncio para que este sea el cuerpo del correo electrónico &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Tomar a los destinatarios de los parámetros de iniciación del flujo para que a estos se les mande el correo electrónico&lt;/h3&gt;  &lt;p align="justify"&gt;Del cuadro de texto “To” o “Para” simplemente seleccionamos el icono de la libreta de direcciones para posteriormente elegir de la ventana de Selección de usuarios. En primer instancia la ventana de sección de usuarios nos permite elegir a cualquier usuario al que queramos mandarle el correo electrónico, de hecho esta ventana es rica en funcionalidad y ofrece opciones adicionales para obtener a los usuarios que nos interesa utiliza, por ejemplo personas o grupos del sitio, el usuario que creo el anuncio y la opción de Workflow lookup for users la cual nos permite buscar de diferentes fuentes de datos o del contexto del flujo de trabajo a los usuarios que necesitemos incluir. En este caso estoy mandando cargar de los parámetros y variables del flujo de trabajo “Workflow variables and parameters” a la variable “Mail recipients” que definimos en la forma de iniciación y además formatear el resultado para que nos regrese el correo electrónico separado por comas. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/7115.image_5F00_0F6A75F5.png"&gt;&lt;img style="background-image:none;border-right-width:0px;margin:5px 5px 5px 0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/4370.image_5F00_thumb_5F00_46B03B89.png" width="1024" height="556" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Sugiero que te des el tiempo de explorar la ventana de “Lookup for Person of Group” encontraras que es muy rica en funcionalidad y capaz de darte opciones muy útiles sin tener que recurrir a la programación.&lt;/p&gt;  &lt;h3&gt;Tomar al título del anuncio para que este sea el título del correo&lt;/h3&gt;  &lt;p align="justify"&gt;De igual manera del campo “Subject” damos clic en el icono que muestra una función. En este caso se carga otro cuadro de dialogo con funcionalidad muy útil. Se llama Lookup for string y este nos permite elegir del elemento “recordemos que estamos en el contexto de un elemento de lista de anuncios” el campo Title. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/2626.image_5F00_00EB65D1.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/0116.image_5F00_thumb_5F00_28EDEF23.png" width="1024" height="710" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Tomar al cuerpo del anuncio para que este sea el cuerpo del correo electrónico&lt;/h3&gt;  &lt;p align="justify"&gt;En el caso de tomar el cuerpo del anuncio aquí usamos el botón “Add or Change Lookup” que se encuentra ubicado en la parte inferior de la ventana. Este botón también es “Lookup String” con el cual podemos hacer referencia dentro del cuerpo de correo electrónico al cuerpo del elemento del anuncio. Y con esto estaríamos cumpliendo con el requerimiento solicitado.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/3835.image_5F00_009B6A77.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/3173.image_5F00_thumb_5F00_2FBD3041.png" width="864" height="768" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Podemos ver entonces que es sencillo incluir en el cuerpo del correo electrónico cualquier información que se encuentre dentro de una lista SharePoint. &lt;/p&gt;  &lt;p&gt;Ya para terminar simplemente publicamos el flujo de trabajo &lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/6505.image_5F00_1D3493F2.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/5633.image_5F00_thumb_5F00_53C23F36.png" width="1024" height="153" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Este proceso compila en un archivo .xoml toda la configuración de nuestro flujo de trabajo expresada visualmente pero almacenada en forma declarativa. También he de mencionar que en las características iniciales del flujo de trabajo de manera pre determinada el flujo puede será invocado a manualmente por el usuario que estaría enviando el correo electrónico. Lo que no queremos es que se mande de forma automática cuando se da de alta o se edita algún anuncio, si ese fuese el caso, entonces el usar una forma de iniciación no sería la estrategia más adecuada, probablemente en vez de solicitar el llenado manual de los destinatarios, hacer que el flujo mande el correo usando el grupo de los integrantes del sitio o algún otro grupo creado manualmente para este proceso en particular. &lt;/p&gt;  &lt;p align="justify"&gt;Ya para terminar y facilitar el uso de este flujo de trabajo dentro de SharePoint Designer 2010 en la lista de anuncios existe la opción de Custom Action en la cual podemos crear un elemento del menú contextual de la lista que dispare la ejecución del flujo de trabajo recién creado, facilitando la experiencia de uso.&lt;/p&gt;  &lt;p align="justify"&gt;De la barra lateral de SharePonit Designer 2010 seleccionamos la opción de Lists and Libraries, posteriormente damos clic en nuestra lista de Announcements, esto nos lleva a la ventana de resumen de la configuración de nuestra lista y como se puede ver ahí se encuentra la sección de Custom Actions.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/1385.image_5F00_4241B891.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/7853.image_5F00_thumb_5F00_3537B2B3.png" width="640" height="300" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;En el botón New damos clic y esto carga la ventana de configuración del Custom Action donde podemos especificar el título y descripción de nuestra acción así como también que va a suceder cuando alguien lo invoque, en este caso iniciar el flujo de trabajo previamente construido sobre el elemento actual.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/4572.SNAGHTML520cf98_5F00_39618A78.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="SNAGHTML520cf98" border="0" alt="SNAGHTML520cf98" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/5661.SNAGHTML520cf98_5F00_thumb_5F00_6CF9D109.png" width="868" height="768" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;En la parte inferior de esta ventana inclusive puedes configurar el icono que deseas usar para el esta acción y que será visto en el menú contextual. El resultado es que dentro de los elementos del menú contextual que un elemento de lista tiene aparece el custom action:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/5557.image_5F00_7F224C31.png"&gt;&lt;img style="background-image:none;border-right-width:0px;margin:5px 5px 5px 0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/2630.image_5F00_thumb_5F00_3543C481.png" width="1024" height="413" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;También en el Ribbon de la lista de anuncios existe la opción de agregar un botón más, se le llama Quick Step. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/4628.image_5F00_1CA40164.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/2656.image_5F00_thumb_5F00_5E7AC0E5.png" width="1024" height="225" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;A dar clic se carga SharePoint Designer 2010 y una ventana de dialogo donde especificamos que sucederá cuando se le dé clic:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/5710.SNAGHTML5228437_5F00_63B981C9.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="SNAGHTML5228437" border="0" alt="SNAGHTML5228437" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/3821.SNAGHTML5228437_5F00_thumb_5F00_5B090370.png" width="919" height="768" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;De igual manera podemos especificar que icono se utilizara para este botón, en mi caso, subí el icono a la librería de SiteAssets.&lt;/p&gt;  &lt;h3&gt;El resultado&lt;/h3&gt;  &lt;p&gt;El resultado es:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/1134.image_5F00_5DBE9296.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/5165.image_5F00_thumb_5F00_02DBDD03.png" width="1024" height="215" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Agregamos un nuevo elemento:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/2287.image_5F00_37B8BC73.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/4118.image_5F00_thumb_5F00_769A1741.png" width="844" height="768" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Despues lo seleccionamos y damos clic sobre nuestro flamante boton en el Ribbon:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/4454.image_5F00_62905EDE.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/4263.image_5F00_thumb_5F00_0498BAA5.png" width="1024" height="292" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Esto carga la forma de iniciacion del flujo de trabajo y procedemos a especificar el usuario o grupo que recibira la informacion por correo electronico, en este caso elegi un grupo.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/4544.image_5F00_5DBA7E97.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/3060.image_5F00_thumb_5F00_7B4C5996.png" width="1024" height="271" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Y al dar clic en Start el flujo de trabajo se ejecuta y la accion de Send Email hace su trabajo. Es importante hacer mención que tambien con SharePoint Designer 2010 podemos editar la forma de iniciación generada por el flujo de trabajo para personalizar el texto de los botones de la forma y/o agregar algun icono o logotipo de la empresa. &lt;/p&gt;  &lt;p&gt;El resultado es el correo en el Outlook:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/2211.image_5F00_7DC56587.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/6433.image_5F00_thumb_5F00_6FA6768A.png" width="923" height="768" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Espero que al leer esta lineas encuentres que SharePoint Designer 2010 ha sido diseñado para rapidamente dar soluciones a necesidades de personalización que se requieran en SharePoint. &lt;/p&gt;  &lt;p&gt;Saludos!&lt;/p&gt;
Originalmente publicado en msmvps.com&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=207048" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Productividad/default.aspx">Productividad</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Demo/default.aspx">Demo</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/SharePoint+2010/default.aspx">SharePoint 2010</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/SharePoint+Designer+2010/default.aspx">SharePoint Designer 2010</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Soporte/default.aspx">Soporte</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Tecnicas/default.aspx">Tecnicas</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Workflow/default.aspx">Workflow</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Practicas/default.aspx">Practicas</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Requerimientos/default.aspx">Requerimientos</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Workflow+Designer/default.aspx">Workflow Designer</category></item><item><title>Sin capacidad de almacenamiento suficiente durante proceso de Exportacion/Importacion en SharePoint</title><link>http://geeks.ms/blogs/haarongonzalez/archive/2012/03/08/sin-capacidad-de-almacenamiento-suficiente-durante-proceso-de-exportacion-importacion-en-sharepoint.aspx</link><pubDate>Thu, 08 Mar 2012 20:08:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:203762</guid><dc:creator>Haaron Gonzalez</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/haarongonzalez/rsscomments.aspx?PostID=203762</wfw:commentRss><comments>http://geeks.ms/blogs/haarongonzalez/archive/2012/03/08/sin-capacidad-de-almacenamiento-suficiente-durante-proceso-de-exportacion-importacion-en-sharepoint.aspx#comments</comments><description>&lt;p&gt;En esta semana nos encontramos con un escenario muy particular relacionado con comandos Import/Export SPWeb en SharePoint 2010. Al correr Export-SPWeb o Import-SPWeb el proceso en algún punto marcaba error y la razón fue porque la unidad C: llegaba a su capacidad máxima de almacenamiento. &lt;/p&gt;  &lt;p&gt;Es increíble, ya que es bien sabido que debemos contar con volúmenes de disco duro adicionales para guardar los LOGS de SharePoint y en el caso de la base de datos los LOGS y MDFs de SQL. Además, la unidad C: solo es para guardar los archivos del sistema y debemos tener libre el doble equivalente de memoria RAM en capacidad de almacenamiento en disco duro. En otras palabras, si tengo 8GB de RAM, siempre debería tener por lo menos 16GB de espacio almacenamiento libre en C:&lt;/p&gt;  &lt;p&gt;Entonces si tengo el almacenamiento de mi servidor de aplicaciones debidamente configurado con diversos volúmenes e incluso con cierto nivel de RAID, ¿porque se llena el disco duro al ejecutar comandos Import-SPWeb y Export-SPWeb?&lt;/p&gt;  &lt;p&gt;Resulta que estos comandos son la alternativa disponible para mover sitios web de SharePoint entre colecciones de sitio, son capaces de mover permisos, contenido, versiones, workflows, etc. En estos tiempos donde muchas empresas carecen de gobernabilidad y planeación de un servicio SharePoint es común ver sitios web de SharePoint realmente grandes con una jerarquía de sitios muy profunda y desde la perspectiva de almacenamiento realmente enormes y esto tiene una implicación importante a considerar cuando trabajamos con Import-SPweb y Export-SPWeb.&amp;#160; En realidad y de forma interna estos comandos hacen uso de una funcionalidad pre-construida en SharePoint llamada &lt;a href="http://technet.microsoft.com/en-us/library/ee721058.aspx"&gt;Content Deployment&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;Content Deployment ofrece una alternativa para mover contenido de un lugar a otro y cuenta con todo un proceso para realizarlo. Este proceso es invocado tanto por los comandos Import-SPWeb, Export-SPWeb, Content Deployment del Central Administracion, los respaldos granulares y el modelo de objetos de SharePoint entre otros. En primer instancia este proceso requiere de varios atributos como tipo de exportación (full o incremental), sitios o contenido que será incluido, rutas y paths de archivos donde se exporta el contenido y los logs de los procesos, entre otras opciones de configuración. El caso es que en algún punto, este proceso construye un archivo XML que describe todas las instrucciones detalladas de exportación o importación que proceso deberá seguir y por consiguiente si el sitio a exportar es muy grande, este archivo y algunos otros temporales que genera lo será también. Y bueno, ¿En dónde crees que estos archivos tras bambalinas se almacenan de forma temporal? &lt;strong&gt;Pues en el TEMP del usuario firmado&lt;/strong&gt; y ¿En dónde se almacena el TEMP del usuario firmado? &lt;b&gt;Pues en el disco duro C: y he ahí la razón.&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;Una alternativa de solución a esto es modificar la variable de entorno TEMP para que su ruta de almacenamiento apunte a una unidad que si tenga la capacidad de almacenamiento necesaria para soportar nuestros procesos de importación y exportación.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/1207.clip_5F00_image001_5F00_28DE2619.png"&gt;&lt;img style="border-right-width:0px;display:block;float:none;border-top-width:0px;border-bottom-width:0px;margin-left:auto;border-left-width:0px;margin-right:auto;" title="clip_image001" border="0" alt="clip_image001" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/0066.clip_5F00_image001_5F00_thumb_5F00_65364F29.png" width="434" height="480" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;También si estás trabajando con PowerShell puedes usar &lt;strong&gt;$env:temp&lt;/strong&gt; para obtener la ruta del TEMP y modificarla usando &lt;strong&gt;set-item -path env:temp -value &amp;quot;F:\TEMP&amp;quot;&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;Cosas de la vida! Saludos&lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;UPDATE: Existe el switch NoFileCompression que podemos utilizar para evitar que de forma temporal se generen los archivos adicionales que se comentaron durante el post. Por default, NoFileCompression es False y esto genera en la carpeta TEMP los archivos temporales previos a los que genera el proceso. Este switch lo deberas especificar tanto en Export-SPWeb como Import-SPWeb.&lt;/font&gt;&lt;/p&gt;
Originalmente publicado en msmvps.com&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=203762" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/SharePoint+2010/default.aspx">SharePoint 2010</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Issues/default.aspx">Issues</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Soporte/default.aspx">Soporte</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Tecnicas/default.aspx">Tecnicas</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Practicas/default.aspx">Practicas</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Content+Deployment/default.aspx">Content Deployment</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Scripting/default.aspx">Scripting</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/PowerShell/default.aspx">PowerShell</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/SharePoint+Admin/default.aspx">SharePoint Admin</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Aprendizaje/default.aspx">Aprendizaje</category></item><item><title>Instalando Granja de Servidores SharePoint 2010 Small Farm (3-Tier)</title><link>http://geeks.ms/blogs/haarongonzalez/archive/2012/01/24/instalando-granja-de-servidores-sharepoint-2010.aspx</link><pubDate>Tue, 24 Jan 2012 09:17:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:202946</guid><dc:creator>Haaron Gonzalez</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/haarongonzalez/rsscomments.aspx?PostID=202946</wfw:commentRss><comments>http://geeks.ms/blogs/haarongonzalez/archive/2012/01/24/instalando-granja-de-servidores-sharepoint-2010.aspx#comments</comments><description>&lt;p&gt;Para un programador SharePoint es importante conocer la arquitectura de la plataforma y en ese sentido realizar un proceso de instalaci&amp;oacute;n de una granja SharePoint es un deber. En esta ocasi&amp;oacute;n quiero compartir como lograr en una topolog&amp;iacute;a llamada Small Farm (Three Tier). &lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/3821.clip_5F00_image001_5F00_2D3903CC.png"&gt;&lt;img style="border-right-width:0px;display:block;float:none;border-top-width:0px;border-bottom-width:0px;margin-left:auto;border-left-width:0px;margin-right:auto;" title="clip_image001" alt="clip_image001" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/5857.clip_5F00_image001_5F00_thumb_5F00_43ABA253.png" height="293" border="0" width="640" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;B&amp;aacute;sicamente tenemos un software (Network Load Balancing) para balancear y distribuir la carga entre dos servidores Web Front End (&lt;b&gt;litwarewfe1&lt;/b&gt; y &lt;b&gt;litwarewfe2&lt;/b&gt;) y tendremos un solo servidor de aplicaciones (&lt;b&gt;litwareapp&lt;/b&gt;) con la mayor&amp;iacute;a de las aplicaciones de servicio y la herramienta central de administraci&amp;oacute;n configurada, todo el contenido y la configuraci&amp;oacute;n ser&amp;aacute; almacenada sobre un solo servidor de base de datos SQL Server (&lt;b&gt;litwaredb&lt;/b&gt;).&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#0080ff;font-size:small;"&gt;&lt;i&gt;Network Load Balancing en Windows Server 2008 R2 para WFE de SharePoint 2010&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:647708fd-61be-4d96-a9b7-28670d3df00d" class="wlWriterEditableSmartContent"&gt;
&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=rw6ysVOyIvo&amp;amp;feature=youtube_gdata_player" target="_new"&gt;&lt;img src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/7331.videobd82ec11efb8_5F00_210763D8.jpg" style="border-style:none;" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;span style="color:#0080ff;font-size:small;"&gt;&lt;i&gt;Configurando Granja de Servidores SharePoint 2010&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:d18db3aa-ddae-47e2-a28b-4923edddedcb" class="wlWriterEditableSmartContent"&gt;
&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=6fJjfaNk2qg&amp;amp;feature=youtube_gdata_player" target="_new"&gt;&lt;img src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/2476.videoe8e52142ca45_5F00_0EFB204B.jpg" style="border-style:none;" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;span style="color:#0080ff;font-size:small;"&gt;&lt;i&gt;Configurando Granja de Servidores SharePoint 2010 con PowerShell&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:c9ac4bea-42d3-44b3-81d4-f4bf8c5c69a7" class="wlWriterEditableSmartContent"&gt;
&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=8EAUMH3SqBc&amp;amp;feature=youtube_gdata_player" target="_new"&gt;&lt;img src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/7127.video08f929820c70_5F00_5FE8BEA6.jpg" style="border-style:none;" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
Originalmente publicado en msmvps.com&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=202946" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Demo/default.aspx">Demo</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/SharePoint+2010/default.aspx">SharePoint 2010</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Dise_26002300_241_3B00_o/default.aspx">Dise&amp;#241;o</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Configuracion/default.aspx">Configuracion</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Soporte/default.aspx">Soporte</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Tecnicas/default.aspx">Tecnicas</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/WFE/default.aspx">WFE</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/NLB/default.aspx">NLB</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/DNS/default.aspx">DNS</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Training/default.aspx">Training</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Practicas/default.aspx">Practicas</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Central+Administration/default.aspx">Central Administration</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Scripting/default.aspx">Scripting</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/PowerShell/default.aspx">PowerShell</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/My+Site/default.aspx">My Site</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/IIS+7/default.aspx">IIS 7</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/SharePoint+Admin/default.aspx">SharePoint Admin</category></item><item><title>Descargando las PPTs de SharePoint Conference 2011</title><link>http://geeks.ms/blogs/haarongonzalez/archive/2012/01/08/descargando-las-ppts-de-sharepoint-conference-2011.aspx</link><pubDate>Mon, 09 Jan 2012 04:21:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:202656</guid><dc:creator>Haaron Gonzalez</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/haarongonzalez/rsscomments.aspx?PostID=202656</wfw:commentRss><comments>http://geeks.ms/blogs/haarongonzalez/archive/2012/01/08/descargando-las-ppts-de-sharepoint-conference-2011.aspx#comments</comments><description>&lt;p&gt;Para los que fueron o han adquirido el acceso a MySPC del sitio &lt;a href="http://www.mssharepointconference.com"&gt;http://www.mssharepointconference.com&lt;/a&gt; encontré en internet un &lt;a href="http://blogs.architectingconnectedsystems.com/blogs/cjg/archive/2011/10/10/SharePoint-Conference-PPTs-_2D00_-Download-them-via-PowerShell_2100_.aspx"&gt;script&lt;/a&gt; de PowerShell para descargar las presentaciones de SharePoint Conference 2011 de forma automática, solo que al ejecutarlo, PowerShell marcaba el siguiente error:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;File C:\spc2011\GetAllPPTs.ps1 cannot be loaded because the execution of scripts is disabled on this system. Please see “get-help about_signing” for more details&lt;/strong&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Para solucionarlo:&lt;/p&gt;  &lt;p&gt;1. Ejecutamos el script Set-ExecutionPolicy RemoteSigned &lt;/p&gt;  &lt;p&gt;2. Posteriormente, en las propiedades del archivo GetAllPPTs.ps1 damos clic en el botón Unblock.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/0160.clip_5F00_image001_5F00_4A03D576.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="clip_image001" border="0" alt="clip_image001" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/1856.clip_5F00_image001_5F00_thumb_5F00_54645DFC.png" width="355" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;3. Ejecutamos de nuevo y listo.&lt;/p&gt;  &lt;p&gt;Aun no se si este script nos sirve para descargar los videos.&lt;/p&gt;  &lt;p&gt;Saludos&lt;/p&gt;
Originalmente publicado en msmvps.com&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=202656" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Fix/default.aspx">Fix</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/SharePoint+2010/default.aspx">SharePoint 2010</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Issues/default.aspx">Issues</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Soporte/default.aspx">Soporte</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Tecnicas/default.aspx">Tecnicas</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Scripting/default.aspx">Scripting</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/PowerShell/default.aspx">PowerShell</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/SPC11/default.aspx">SPC11</category></item><item><title>Configurando User Policy en SharePoint 2010</title><link>http://geeks.ms/blogs/haarongonzalez/archive/2011/12/07/configurando-user-policy-en-sharepoint-2010.aspx</link><pubDate>Wed, 07 Dec 2011 18:47:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:202030</guid><dc:creator>Haaron Gonzalez</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/haarongonzalez/rsscomments.aspx?PostID=202030</wfw:commentRss><comments>http://geeks.ms/blogs/haarongonzalez/archive/2011/12/07/configurando-user-policy-en-sharepoint-2010.aspx#comments</comments><description>&lt;p&gt; Como parte de los procesos internos de diagn&amp;oacute;stico de amenazas y riesgos de seguridad que cualquier &amp;aacute;rea de IT anualmente realiza, se tienen herramientas automatizadas para evaluar aplicaciones y su nivel de vulnerabilidad. Se nos ha solicitado dar permisos de acceso a una cuenta de usuario temporal para realizar una prueba de la superficie de seguridad de SharePoint. Y la pregunta que surge es en donde le daremos permisos a esta cuenta temporal para acceder a evaluar. Uno pensar&amp;iacute;a que en el Top Level Site Collection en alg&amp;uacute;n grupo de seguridad podr&amp;iacute;amos asignarle permisos de acceso a dicha cuen&lt;/p&gt;
&lt;p&gt;ta, sin embargo, que pasa cuando tenemos gran cantidad de site collections, &amp;iquest;tendr&amp;iacute;amos que acceder a dar permisos de acceso en cada una?&lt;/p&gt;
&lt;p&gt;Una alternativa aceptable para lograr dar permisos globales y de forma temporal a esta cuenta es la opci&amp;oacute;n de User Policy que existe en las propiedades de un Web Application dentro del Central Administration.&lt;/p&gt;
&lt;p&gt;Seleccionamos Manage Web applications y de la lista elegimos la aplicaci&amp;oacute;n web donde aplicaremos la pol&amp;iacute;tica, despu&amp;eacute;s damos clic sobre User Policy.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/6763.image_5F00_2D71E823.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" alt="image" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/1665.image_5F00_thumb_5F00_6A82ED2A.png" height="198" border="0" width="644" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Dentro de User Policy seleccionamos Add User y especificamos sobre qu&amp;eacute; zona dentro del Web Application estaremos otorgando permisos. En este caso utilizare All Zones, sin embargo podr&amp;iacute;amos ser lo suficientemente estrictos como para especificar en cu&amp;aacute;l de las zonas disponibles esta pol&amp;iacute;tica de acceso tendr&amp;iacute;a efecto.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/7870.image_5F00_27B37C25.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" alt="image" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/1581.image_5F00_thumb_5F00_5383D014.png" height="322" border="0" width="644" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;A dar clic en Next capturamos la cuenta de usuario temporal y el nivel de permisos que tendr&amp;aacute; sobre la zona previamente especificada. Lo interesante aqu&amp;iacute; es que para la cuenta en cuesti&amp;oacute;n podemos elegir el nivel de permiso y para no dejar rastro de la cuenta o proceso automatizado de evaluaci&amp;oacute;n sobre los cambios o accesos realizados seleccionemos la opci&amp;oacute;n de que la cuente se muestre como System Account.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/1122.image_5F00_6467B25D.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" alt="image" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/4101.image_5F00_thumb_5F00_601D8EFE.png" height="484" border="0" width="469" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;El resultado es el control de los permisos que las cuentas tienen sobre nuestras aplicaciones web de SharePoint. En cualquier momento un administrador puede acceder y remover los permisos.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/7651.image_5F00_0D6EFF02.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" alt="image" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/0312.image_5F00_thumb_5F00_1DBA50EE.png" height="443" border="0" width="644" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Con esto durante damos una alternativa de soluci&amp;oacute;n para el escenario de acceso temporal para pruebas de seguridad realizadas por el &amp;aacute;rea de IT como parte de sus procesos regulatorios internos.&lt;/p&gt;
&lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:4fcc3eac-23b8-4ff9-910d-c32f061679d7" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/SharePoint" rel="tag"&gt;SharePoint&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Central+Administration" rel="tag"&gt;Central Administration&lt;/a&gt;,&lt;a href="http://technorati.com/tags/User+Policy" rel="tag"&gt;User Policy&lt;/a&gt;,&lt;a href="http://technorati.com/tags/SharePoint+2010" rel="tag"&gt;SharePoint 2010&lt;/a&gt;,&lt;a href="http://technorati.com/tags/IT" rel="tag"&gt;IT&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Support" rel="tag"&gt;Support&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;
Originalmente publicado en msmvps.com&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=202030" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/SharePoint+2010/default.aspx">SharePoint 2010</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Staff/default.aspx">Staff</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Soporte/default.aspx">Soporte</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Troubleshooting/default.aspx">Troubleshooting</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Tecnicas/default.aspx">Tecnicas</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Practicas/default.aspx">Practicas</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Central+Administration/default.aspx">Central Administration</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/SharePoint+Admin/default.aspx">SharePoint Admin</category></item><item><title>Accediendo a documentos SharePoint desde explorador de Windows</title><link>http://geeks.ms/blogs/haarongonzalez/archive/2011/10/20/accediendo-a-documentos-sharepoint-desde-explorador-de-windows.aspx</link><pubDate>Thu, 20 Oct 2011 08:38:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:201273</guid><dc:creator>Haaron Gonzalez</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/haarongonzalez/rsscomments.aspx?PostID=201273</wfw:commentRss><comments>http://geeks.ms/blogs/haarongonzalez/archive/2011/10/20/accediendo-a-documentos-sharepoint-desde-explorador-de-windows.aspx#comments</comments><description>&lt;p&gt;El día de hoy me contactó un colega para preguntar sobre cómo manejar la información de una biblioteca de documentos SharePoint 2010 desde una experiencia de usuario totalmente familiar que no requiera capacitación y/o dependencia al uso del mismo SharePoint como tal. &lt;/p&gt;  &lt;p&gt;El escenario consiste en poner a disposición un conjunto de archivos a un grupo de personas que se encuentran geográficamente dispersos y que requieren colaborar en el consumo y edición de los mismos archivos. Claro que uno primeramente piensa en crear un sitio de equipo y mostrar las bondades pre fabricadas del producto, sin embargo, fue muy estricto en especificar que la experiencia de usuario debe de ser desde explorador de Windows ya que la manera en que trabajan estas personas es abrir un multiples de archivos relacionados de un software no convencional con simplemente seleccionarlos desde el explorador de windows, dar clic derecho y abrirlos.&lt;/p&gt;  &lt;p&gt;La solución que pude ofrecer fue la de mapear una biblioteca de documentos de SharePoint 2010 hacia una unidad lógica dentro del disco duro para que así se pueda trabajar con los archivos sin necesidad de acceder al portal SharePoint desde un navegador y seguir respetando el requerimiento de seleccionar y abrir conjuntos de archivos. &lt;/p&gt;  &lt;p&gt;Buscamos la biblioteca en cuestión y en el Tab Library del Ribbon elegimos la opción de Open with Explorer:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/5810.image_5F00_77CD79C2.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/5460.image_5F00_thumb_5F00_0F748B5C.png" width="1136" height="250" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Esto carga una ventana de explorador de Windows con las carpetas y elementos de nuestra biblioteca de documentos. Seleccionamos y copiamos la dirección Url de la ventana de explorador de Windows y presionamos la tecla Alt para mostrar la barra de menú, damos clic sobre Tools y seleccionamos el sub menú Map Network drive para cargar la ventana de configuración de mapeo de un ruta de red.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/3362.SNAGHTMLc54a8a_5F00_64004494.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="SNAGHTMLc54a8a" border="0" alt="SNAGHTMLc54a8a" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/2477.SNAGHTMLc54a8a_5F00_thumb_5F00_50AF6828.png" width="962" height="598" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Configuramos la unidad de red con la informacion de unidad y las credenciales necesarias para acceder.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/1727.SNAGHTMLc728d8_5F00_7FD12DF2.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="SNAGHTMLc728d8" border="0" alt="SNAGHTMLc728d8" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/0574.SNAGHTMLc728d8_5F00_thumb_5F00_34AE0D63.png" width="632" height="464" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Especificamos la unidad que se asignara a esta carpeta. En Folder pegamos nuestra dirección Url copiada desde el explorador de Windows. Damos clic en Finish, con esto se configura en nuestro explorador de Windows una nueva unidad de disco duro que de forma directa mapea el contenido de una biblioteca de documentos.&lt;/p&gt;  &lt;p&gt;Cuando los usuarios acceden a su equipo simplemente cargan su explorador de Windows y tienen&amp;#160; a su disposición los documentos de SharePoint.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/3414.SNAGHTMLc97e47_5F00_10590314.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="SNAGHTMLc97e47" border="0" alt="SNAGHTMLc97e47" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/2604.SNAGHTMLc97e47_5F00_thumb_5F00_62C7BD83.png" width="908" height="612" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Es posible renombrar la unidad con algo un poco mas descriptivo. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/4760.image_5F00_72A6DC7A.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/1134.image_5F00_thumb_5F00_7CF800DA.png" width="184" height="168" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Asi mismo es posible crear un Group Policy Object para empujar a todos los usuarios del dominio la configuracion mencionada sin necesidad de que los mismos usuarios tenga que realizarla.&amp;#160; &lt;/p&gt;
Originalmente publicado en msmvps.com&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=201273" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Productividad/default.aspx">Productividad</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/SharePoint+2010/default.aspx">SharePoint 2010</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Issues/default.aspx">Issues</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Configuracion/default.aspx">Configuracion</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Soporte/default.aspx">Soporte</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Troubleshooting/default.aspx">Troubleshooting</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Tecnicas/default.aspx">Tecnicas</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Practicas/default.aspx">Practicas</category></item><item><title>Enviando un correo al jefe inmediato en un flujo de trabajo SharePoint Designer 2010</title><link>http://geeks.ms/blogs/haarongonzalez/archive/2011/09/27/enviando-un-correo-al-jefe-inmediato-en-un-flujo-de-trabajo-sharepoint-designer-2010.aspx</link><pubDate>Wed, 28 Sep 2011 06:26:45 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:200783</guid><dc:creator>Haaron Gonzalez</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/haarongonzalez/rsscomments.aspx?PostID=200783</wfw:commentRss><comments>http://geeks.ms/blogs/haarongonzalez/archive/2011/09/27/enviando-un-correo-al-jefe-inmediato-en-un-flujo-de-trabajo-sharepoint-designer-2010.aspx#comments</comments><description>&lt;p&gt;&lt;b&gt;From:&lt;/b&gt; Haarón González [mailto:haarongonzalez@mvps.org]     &lt;br /&gt;&lt;b&gt;Sent:&lt;/b&gt; Tuesday, September 27, 2011 8:16 AM    &lt;br /&gt;&lt;b&gt;To:&lt;/b&gt; Privado    &lt;br /&gt;&lt;b&gt;Subject:&lt;/b&gt; RE: Consulta&lt;/p&gt;  &lt;p&gt;Estimado Privado, tanto SharePoint 2007 como 2010 cuentan con una aplicación específica para personalizar el producto, se llama SharePoint Designer 2007 o 2010, en ambos casos es sin costo y la peudes descargar desde &lt;a href="http://www.microsoft.com/download/en/details.aspx?id=16573"&gt;aqui&lt;/a&gt;. Con esta herramienta podemos personalizar el comportamiento de nuestros sitios SharePoint sin codificar o instalar algún otro componente. Claro que tiene sus ventajas y desventajas pero &lt;a href="http://office.microsoft.com/es-mx/sharepoint-designer-help/introduccion-a-sharepoint-designer-2010-HA010370548.aspx"&gt;aquí&lt;/a&gt; puedes encontrar más información al respecto.&lt;/p&gt;  &lt;p&gt;Dentro de las características de este producto existe el Workflow Designer. Básicamente cargamos SharePoint Designer 2010 y abrimos el sitio que deseamos personalizar. Navegamos en la sección de Site Object para elegir Workflow. Esto carga el Ribbon específico para flujos de trabajo y muestra los tipos de flujo que se pueden crear y algunos existentes.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/8507.image_5F00_4B3FB706.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;margin:5px 5px 5px 0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/1727.image_5F00_thumb_5F00_7DFF97AD.png" width="644" height="346" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;De acuerdo a tu pregunta y en tu caso muy particular estaremos creando un List Workflow donde deberás elegir a que lista o biblioteca de documentos deseas personalizar.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/4403.image_5F00_55045CD7.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;margin:5px 5px 5px 0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/8308.image_5F00_thumb_5F00_6125D6FE.png" width="229" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Deberás especificar el nombre y descripción de tu flujo de trabajo y al dar Ok, se cargara a Workflow Designer y sus correspondientes opciones dentro del Ribbon.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/4478.image_5F00_5ED92875.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;margin:5px 5px 5px 0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/2526.image_5F00_thumb_5F00_18B84595.png" width="644" height="331" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;La naturaleza de construcción de un flujo de trabajo radica en la noción de:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Steps (Pasos del flujo de trabajo): &lt;/li&gt;    &lt;li&gt;Conditions (Condiciones que evalúan algo)&lt;/li&gt;    &lt;li&gt;Actions (Acciones que se ejecutan cuando estas condiciones se cumplen)&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;La manera en la que esto funciona es que un paso (Step) agrupa una serie de condiciones (Conditions) y acciones (Actions) que se ejecutan en un determinado momento, es posible crear más de un paso y ejecutarlos en paralelo, sin embargo, en este momento no es tu caso. Dentro del bloque de Step 1 agregamos una o más condiciones usando el Ribbon. SharePoint Designer 2010 nos permite utilizar las condiciones pre fabricadas en el producto.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/4520.image_5F00_07A3F1E5.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/7610.image_5F00_thumb_5F00_3F0A0313.png" width="336" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Sin embargo, como programador tu puedes crear las tuyas propias utilizando algunas de las clases de Workflow Foundation ver &lt;a href="http://www.haarongonzalez.com.mx/wfday/sesion2/replaymeeting.htm"&gt;WebCast Construyendo Flujos de Trabajo en SharePoint 2010 utilizando SharePoint Designer 2010&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;Claro que el Step no necesariamente requiere una condición para ejecutarse. &lt;/p&gt;  &lt;p&gt;A continuación una vez que agregamos las condiciones que requerimos evaluar, procedemos a agregar las acciones que básicamente reflejan las reglas de negocio que necesitamos contemplar en nuestra lista o biblioteca. Aquí lo interesante es que también se muestran todas las acciones disponibles en SharePoint 2010 y categorizadas por el tipo de acción. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/6787.image_5F00_52873CE7.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/0647.image_5F00_thumb_5F00_5BB3525B.png" width="444" height="772" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Aquí quiero hacer notar que existe una acción llamada &lt;b&gt;Lookup Manager of a User&lt;/b&gt; que obtiene al usuario que se tiene configurado como jefe directo en el directorio activo. Por lo tanto, creo que es muy factible la construcción de tu flujo de trabajo que mencionas en tu correo. &lt;/p&gt;  &lt;p&gt;Básicamente lo que harás es invocar la acción Lookup Manager of a User configurando la propiedad “this user” para que obtenga el correo electrónico del usuario que registro o inicio el flujo. En este caso ese dato existe en los campos (fields) del elemento actual (Current Item) que representa el documento o elemento de lista en cuestión. Es importante mencionar que el resultado de la acción es guardado en la variable Manager que posteriormente otra actividad puede utilizar.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/6523.image_5F00_4A031BF6.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;margin:5px 5px 5px 0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/8081.image_5F00_thumb_5F00_433FECA6.png" width="1028" height="736" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Después agregas otra actividad llamada Send Email y configuras a quien se le mandara el correo electrónico. En este caso usaremos la variable Manager que contiene el correo electrónico que la acción FInd Manager genero con base el usuario en cuestión.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/2475.image_5F00_437BAE34.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;margin:5px 5px 5px 0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/0601.image_5F00_thumb_5F00_71853887.png" width="821" height="772" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Das clic en Ok y capturas el título y cuerpo del correo electrónico que requieres enviar al jefe. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/0880.image_5F00_054E59B7.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;margin:5px 5px 5px 0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/6242.image_5F00_thumb_5F00_34ACA2B6.png" width="1028" height="533" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Después das clic en Ok y guardas el flujo de trabajo. Seleccionas Publish y listo ya puedes probar el comportamiento de tu flujo de trabajo. &lt;/p&gt;  &lt;p&gt;Mucho más detalle aquí: &lt;a href="http://office.microsoft.com/en-us/sharepoint-designer-help/workflow-conditions-in-sharepoint-designer-2010-a-quick-reference-guide-HA010376962.aspx"&gt;http://office.microsoft.com/en-us/sharepoint-designer-help/workflow-conditions-in-sharepoint-designer-2010-a-quick-reference-guide-HA010376962.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Bien espero que encuentres la solución a tu escenario y a tus órdenes cualquier pregunta que tengas.&lt;/p&gt;  &lt;p&gt;Saludos&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;HG&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;De: &lt;/b&gt;Privado    &lt;br /&gt;&lt;b&gt;Enviado: &lt;/b&gt;lunes, 26 de septiembre de 2011 09:44 a.m.    &lt;br /&gt;&lt;b&gt;Para: &lt;/b&gt;Haaron Gonzalez    &lt;br /&gt;&lt;b&gt;Asunto: &lt;/b&gt;Consulta&lt;/p&gt;  &lt;p&gt;Hola buenos días desde Colombia.. &lt;/p&gt;  &lt;p&gt;Haaron quería preguntarte algo, estoy haciendo un flujo de trabajo con SharePoint 2010 pero requiero que dependiendo de la persona que ejecute el flujo de trabajo le envié un correo al el jefe inmediato.&lt;/p&gt;  &lt;p&gt;Por ejemplo el empleado 1 tiene como jefe a Jefe 1&lt;/p&gt;  &lt;p&gt;Y empleado 2 tiene como jefe el jefe 2&lt;/p&gt;  &lt;p&gt;Entonces si el empleado 1 ejecuta el flujo, le debe enviar un correo a el jefe 1, de igual manera &lt;/p&gt;  &lt;p&gt;Si el empleado 2 ejecuta el flujo, le debe enviar un correo a el jefe 2.&lt;/p&gt;  &lt;p&gt;Esto no sé cómo hacer pues SharePoint le envía un mensaje a alguien puntual.. puedo hacer esto?? &lt;/p&gt;  &lt;p&gt;Gracias por tu respuesta&lt;/p&gt;
Originalmente publicado en msmvps.com&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=200783" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Demo/default.aspx">Demo</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/SharePoint+Designer+2010/default.aspx">SharePoint Designer 2010</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Soporte/default.aspx">Soporte</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Tecnicas/default.aspx">Tecnicas</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/SharePoint+Designer/default.aspx">SharePoint Designer</category></item><item><title>Facilitando el descubrimiento con SEO Toolkit</title><link>http://geeks.ms/blogs/haarongonzalez/archive/2011/09/27/facilitando-el-descubrimiento-con-seo-toolkit.aspx</link><pubDate>Tue, 27 Sep 2011 20:23:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:200779</guid><dc:creator>Haaron Gonzalez</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/haarongonzalez/rsscomments.aspx?PostID=200779</wfw:commentRss><comments>http://geeks.ms/blogs/haarongonzalez/archive/2011/09/27/facilitando-el-descubrimiento-con-seo-toolkit.aspx#comments</comments><description>&lt;p&gt;Para todos aquellos que construimos soluciones para Internet es necesario contemplar como agregar metadatos a nuestras p&amp;aacute;ginas para que buscadores o servicios de b&amp;uacute;squeda permitan encontrarlas, indexarlas y potencialmente arrojarlas como resultados. &lt;/p&gt;
&lt;p&gt;Sin embargo, no solamente llenar de metadatos los encabezados de nuestras p&amp;aacute;ginas es suficiente para permitir a servicios de b&amp;uacute;squeda encontrar y rastrear el contenido. Es necesario asegurar que nuestro sitio web cuenta con enlaces propiamente vinculados a otros sitios, contenido ligero y accesible, c&amp;oacute;digo HTML bien formado que cumple con los est&amp;aacute;ndares, entre otros elementos y referencias importantes de revisar. &lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.microsoft.com/web/seo?appid=10990002"&gt;SEO Toolkit&lt;/a&gt; es una herramienta que nos permite optimizar nuestros sitios web para un mejor decrubrimiento por parte de servicios y motores de busqueda. SEO Toolkit analiza nuestros sitios y recomienda posibles mejoras que podemos realizar y as&amp;iacute; facilitar a los servicios de b&amp;uacute;squeda el encontrar nuestro contenido. Podr&amp;iacute;amos pensar que &lt;a href="http://www.microsoft.com/web/seo?appid=10990002"&gt;SEO Toolkit&lt;/a&gt; es un agente analizador que identifica como optimizar nuestros sitios para facilitar su descubrimiento en internet.&lt;/p&gt;
&lt;p&gt;Esta es una herramienta de Microsoft por lo tanto se instala sobre IIS 7.0 y hace uso de SQL Server 2008 para recopilar y almacenar el resultado de los an&amp;aacute;lisis. As&amp;iacute; mismo este componente se integra a IIS 7 y permite acceder a reportes, reglas, validaciones y sugerencias para mejorar nuestro portal.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/2350.SNAGHTML371585e_5F00_5A00B5D7.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:block;float:none;margin-left:auto;border-top:0px;margin-right:auto;border-right:0px;" title="SNAGHTML371585e" alt="SNAGHTML371585e" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/1541.SNAGHTML371585e_5F00_thumb_5F00_192EB9A8.png" height="484" border="0" width="628" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Cuando creamos un nuevo an&amp;aacute;lisis podemos configurar el sitio que queremos analizar, el n&amp;uacute;mero de enlaces que deseamos revisar, la autentificaci&amp;oacute;n que se deber&amp;aacute; soportar y todo lo necesario para que la herramienta desempe&amp;ntilde;e una revisi&amp;oacute;n de forma adecuada.&lt;/p&gt;
&lt;p&gt;Los resultados obtenidos son muy valiosos ya que nos carga validaciones e incumplimientos que se realizaron. Por cada incumplimiento nos da un alto nivel de detalle entre ello la posible soluci&amp;oacute;n. Por fin ya no tendremos que recurrir a otras herramientas de an&amp;aacute;lisis de sitios web.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/1184.SNAGHTML3717495_5F00_73589344.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:block;float:none;margin-left:auto;border-top:0px;margin-right:auto;border-right:0px;" title="SNAGHTML3717495" alt="SNAGHTML3717495" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/8741.SNAGHTML3717495_5F00_thumb_5F00_3171ADF6.png" height="484" border="0" width="628" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Ya hacia falta una herramienta tan valiosa como esta, que bien que Microsoft identific&amp;oacute; el hueco y nos proporciono una alternativa aceptable. Estoy seguro que SEO Toolkit aportar&amp;aacute; mucho valor para tus proyectos web. &lt;/p&gt;
&lt;p&gt;Dejo el enlace del sitio para que proceda a evaluar e instalar.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.microsoft.com/web/seo?appid=10990002" target="_blank"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:block;float:none;margin-left:auto;border-top:0px;margin-right:auto;border-right:0px;" title="image" alt="image" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/4555.image_5F00_66BAC05B.png" height="50" border="0" width="187" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;HG&lt;/p&gt;
&lt;p&gt;
Originalmente publicado en msmvps.com&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=200779" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Productividad/default.aspx">Productividad</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Testing/default.aspx">Testing</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Fix/default.aspx">Fix</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Toolkit/default.aspx">Toolkit</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Proceso/default.aspx">Proceso</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Management/default.aspx">Management</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Tools/default.aspx">Tools</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/ASP.NET+2.0/default.aspx">ASP.NET 2.0</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Soporte/default.aspx">Soporte</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Herramientas/default.aspx">Herramientas</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Tecnicas/default.aspx">Tecnicas</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Estandares/default.aspx">Estandares</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Scripting/default.aspx">Scripting</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Search/default.aspx">Search</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Hosting/default.aspx">Hosting</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/IIS+7/default.aspx">IIS 7</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/IIS/default.aspx">IIS</category></item><item><title>Como validar campos en formularios de listas personalizadas de SharePoint con SharePoint Designer</title><link>http://geeks.ms/blogs/haarongonzalez/archive/2011/06/15/como-validar-campos-en-formularios-de-listas-personalizadas-de-sharepoint-con-sharepoint-designer.aspx</link><pubDate>Wed, 15 Jun 2011 23:39:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:196159</guid><dc:creator>Haaron Gonzalez</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/haarongonzalez/rsscomments.aspx?PostID=196159</wfw:commentRss><comments>http://geeks.ms/blogs/haarongonzalez/archive/2011/06/15/como-validar-campos-en-formularios-de-listas-personalizadas-de-sharepoint-con-sharepoint-designer.aspx#comments</comments><description>&lt;p&gt;Lo &amp;uacute;nico que puedo decir es que aquellos peque&amp;ntilde;os y finos detalles dejan un sabor mucho m&amp;aacute;s agradable a la experiencia. &lt;/p&gt;
&lt;p&gt;Durante un pasado servicio de soporte se solicit&amp;oacute; un requerimiento de validar que el campo fecha de una lista personalizada, no permitiera ingresar fechas mayores o iguales al d&amp;iacute;a de hoy. Sin duda, de primera mano y como todo un programador piensas en construir un Custom Field que contenga la funcionalidad solicitada, sin embargo, todas las implicaciones y costo de desarrollar, probar, implementar y mantener una funcionalidad como tal no se justifica como para esta necesidad solicitada y el sentido de urgencia. &lt;/p&gt;
&lt;p&gt;El folcl&amp;oacute;rico y temperamental SharePoint Desginer 2007 a.k.a &amp;ldquo;&lt;strong&gt;SPD&lt;/strong&gt;&amp;rdquo; hace su aparici&amp;oacute;n como una alternativa para realizar la validaci&amp;oacute;n solicitada. &lt;/p&gt;
&lt;p&gt;B&amp;aacute;sicamente la soluci&amp;oacute;n ser&amp;aacute;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Copiar y pegar la p&amp;aacute;gina NewForm.aspx de la lista en cuesti&amp;oacute;n con el nombre de NewFormEnhancement.aspx &lt;/li&gt;
&lt;li&gt;Abrir la p&amp;aacute;gina y poner invisible el primer WebPart &lt;/li&gt;
&lt;li&gt;Agregar un Custom List Form de tipo New para la lista en cuesti&amp;oacute;n &lt;/li&gt;
&lt;li&gt;Agregar validadores a field donde requerimos la funcionalidad &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;b&gt;1. Copiar y pegar la p&amp;aacute;gina NewForm.aspx de la lista en cuesti&amp;oacute;n con el nombre de NewFormEnhanced.aspx &lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/6318.image_5F00_1F26DD4A.png"&gt;&lt;img height="240" width="210" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/3276.image_5F00_thumb_5F00_6C56D6D5.png" align="right" alt="image" border="0" title="image" style="border-right-width:0px;margin:15px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cargamos el sitio en cuesti&amp;oacute;n usando &lt;strong&gt;SPD&lt;/strong&gt;, aseg&amp;uacute;rate de firmarte al sitio en cuesti&amp;oacute;n&amp;nbsp; con una cuenta que por lo menos el permiso de &lt;strong&gt;Site Collection owner&lt;/strong&gt;. &lt;/li&gt;
&lt;li&gt;Cuando cargas el sitio podr&amp;aacute;s ver en forma de &amp;aacute;rbol el contenido. &lt;/li&gt;
&lt;li&gt;Expande la carpeta &lt;strong&gt;Lists&lt;/strong&gt; y de los elementos mostrados expandes la lista que deseas personalizar. Observa que se tienen un conjunto de archivos .aspx, selecciona &lt;strong&gt;NewForm.aspx&lt;/strong&gt; y da clic derecho, copia la p&amp;aacute;gina y ah&amp;iacute; mismo pegas con el nombre de &lt;strong&gt;NewFormEnhancements.aspx&lt;/strong&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;2. &lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/1256.image_5F00_4FD9E4F5.png"&gt;&lt;img height="162" width="244" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/7838.image_5F00_thumb_5F00_0B2D4AB4.png" align="left" alt="image" border="0" title="image" style="border-right-width:0px;margin:15px 35px 15px 15px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/a&gt; &lt;/b&gt;&lt;b&gt;Abrir la p&amp;aacute;gina y poner invisible el primer WebPart&lt;/b&gt;&lt;b&gt; &lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Das doble clic sobre &lt;strong&gt;NewFormEnhanced.aspx&lt;/strong&gt;. &lt;strong&gt;SPD&lt;/strong&gt; carga la p&amp;aacute;gina para poder ser editada. &lt;/li&gt;
&lt;li&gt;Da clic sobre el &amp;uacute;nico &lt;strong&gt;WebPart&lt;/strong&gt; en la p&amp;aacute;gina y da clic derecho para elegir la opci&amp;oacute;n de &lt;strong&gt;WebPart Properties&lt;/strong&gt;. &lt;strong&gt;WebPart Properties&lt;/strong&gt; carga el panel de propiedades correspondiente. &lt;/li&gt;
&lt;li&gt;Expande la secci&amp;oacute;n de &lt;strong&gt;Layout&lt;/strong&gt; y da clic sobre el cuadro de verificaci&amp;oacute;n &lt;strong&gt;Hidden&lt;/strong&gt;. Esto hace que en la p&amp;aacute;gina en cuesti&amp;oacute;n el &lt;strong&gt;WebPart&lt;/strong&gt; pre determinado no este visible. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;3. &lt;/b&gt;&lt;b&gt;Agregar un Custom List Form de tipo New para la lista en cuesti&amp;oacute;n&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/5381.image_5F00_6EB058D3.png"&gt;&lt;img height="272" width="434" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/5126.image_5F00_thumb_5F00_352D48DC.png" align="right" alt="image" border="0" title="image" style="border-right-width:0px;margin:15px 15px 15px 25px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/a&gt;En el c&amp;oacute;digo Markup de la p&amp;aacute;gina en cuesti&amp;oacute;n buscamos el lugar donde se encuentra&amp;nbsp; &lt;strong&gt;&amp;lt;/WebPartPages: &lt;br /&gt;ListFormWebPart&amp;gt; &lt;br /&gt;&amp;lt;/ZoneTemplate&amp;gt; &lt;br /&gt;&amp;lt;/WebPartPages: &lt;br /&gt;WebPartZone&amp;gt;&lt;/strong&gt; y justo debajo posicionamos nuestro cursor. &lt;/li&gt;
&lt;li&gt;Seleccionamos del men&amp;uacute; &lt;strong&gt;Insert&lt;/strong&gt; la opci&amp;oacute;n &lt;strong&gt;SharePoint Controls&lt;/strong&gt; y &lt;strong&gt;Custom List Form&lt;/strong&gt;. Esto carga una ventana de dialogo que nos permite seleccionar el tipo de &lt;strong&gt;WebPart&lt;/strong&gt; que deseamos insertar sobre nuestra p&amp;aacute;gina personalizada. &lt;/li&gt;
&lt;li&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/6708.image_5F00_4DBCE62C.png"&gt;&lt;img height="230" width="240" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/2117.image_5F00_thumb_5F00_292B58A8.png" align="left" alt="image" border="0" title="image" style="border-right-width:0px;margin:15px 35px 15px 15px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/a&gt; Configuramos el tipo de forma de captura que ser&amp;aacute; aprovisionado por esta ventana de dialogo. B&amp;aacute;sicamente elegimos la lista de la cual necesitamos una instancia del formulario de captura y muy importante es el tipo de formulario de captura que requerimos como la forma de nuevo elemento, forma de modificaci&amp;oacute;n de un elemento o forma de visualizaci&amp;oacute;n de un elemento. Elegimos &lt;strong&gt;New Item form&lt;/strong&gt;, damos clic en Ok y esto genera una nueva instancia de la forma de captura para nuevos elementos de la lista que elegimos. Esta forma de captura es aprovisionada en c&amp;oacute;digo Markup de tipo &lt;strong&gt;WebPartPages:DataFormWebPart&lt;/strong&gt; el cual expone los fields que el formulario tiene y el layout HTML donde estos fields son ubicados en la forma, esto nos da grandes posibilidades de personalizaci&amp;oacute;n visual. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;4. &lt;/b&gt;&lt;b&gt;Agregar validadores a field donde requerimos la funcionalidad&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/6562.image_5F00_68890C38.png"&gt;&lt;img height="291" width="468" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/2451.image_5F00_thumb_5F00_2ED64C81.png" align="right" alt="image" border="0" title="image" style="border-right-width:0px;margin:15px 15px 25px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/a&gt; Buscamos el field de tipo fecha que deseamos validar. &lt;/li&gt;
&lt;li&gt;Nos aseguramos de modificar el tipo de control que se tiene configurado. Simplemente seleccionamos el control en cuesti&amp;oacute;n y damos clic derecho sobre &amp;eacute;l, elegimos la opci&amp;oacute;n de &lt;strong&gt;Show common control task&lt;/strong&gt; cargando con ello una secci&amp;oacute;n donde podemos elegir el tipo de control. Como podemos ver seguramente tenemos la opci&amp;oacute;n de&lt;strong&gt; Form Field&lt;/strong&gt; como &lt;strong&gt;Format As&lt;/strong&gt;, damos clic sobre el cuadro de selecci&amp;oacute;n y elegimos &lt;strong&gt;Date Picker&lt;/strong&gt;. Esto hace una especie de cambio en el control. &lt;/li&gt;
&lt;li&gt;Damos clic derecho Properties sobre el control y buscamos la propiedad &lt;strong&gt;ID&lt;/strong&gt; en mi caso fue &amp;ldquo;ff6_1&amp;rdquo;. Este ID es muy importante ya que con el podremos asociarlos a otros controles del lado servidor como TextBox, Validation Controls,. etc. Lo &amp;uacute;nico importante que se debe de contemplar es que cuando utilizamos los controles de ASP.NET o nativos de SharePoint, estos hacen referencia al control no con el &lt;strong&gt;ID&lt;/strong&gt; como tal, sino con el siguiente patr&amp;oacute;n &amp;ldquo;&lt;strong&gt;ID$IDTipoDeDato&lt;/strong&gt;&amp;rdquo; en otras palabras &lt;strong&gt;&amp;ldquo;ff6_1$ ff6_1Date&lt;/strong&gt;&amp;rdquo;. &lt;/li&gt;
&lt;li&gt;Dentro del c&amp;oacute;digo Markup buscamos la terminaci&amp;oacute;n de la declaraci&amp;oacute;n del control Date Picker &lt;strong&gt;&amp;ldquo;&amp;lt;/SharePoint:DateTimeControl&lt;/strong&gt;&amp;gt;&amp;rdquo; y justo abajo pegamos el siguiente c&amp;oacute;digo: &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="color:#804040;font-size:xx-small;"&gt;&lt;strong&gt;&amp;lt;SharePoint:InputFormCustomValidator &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#804040;font-size:xx-small;"&gt;&lt;strong&gt;ClientValidationFunction=&amp;quot;IsValidDate&amp;quot; &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#804040;font-size:xx-small;"&gt;&lt;strong&gt;ID=&amp;quot;custvDueDate&amp;quot; &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#804040;font-size:xx-small;"&gt;&lt;strong&gt;runat=&amp;quot;server&amp;quot; &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#804040;font-size:xx-small;"&gt;&lt;strong&gt;Display=&amp;quot;Dynamic&amp;quot; &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#804040;font-size:xx-small;"&gt;&lt;strong&gt;SetFocusOnError=&amp;quot;false&amp;quot;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#804040;font-size:xx-small;"&gt;&lt;strong&gt;ControlToValidate=&amp;quot;ff6_1$ff6_1Date&amp;quot; &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#804040;font-size:xx-small;"&gt;&lt;strong&gt;BreakBefore=&amp;quot;true&amp;quot; &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#804040;font-size:xx-small;"&gt;&lt;strong&gt;BreakAfter=&amp;quot;false&amp;quot; &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#804040;font-size:xx-small;"&gt;&lt;strong&gt;ErrorMessage=&amp;quot;Date must be grater than today&amp;quot; /&amp;gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Como se puede observar, tenemos controles del lado servidor espec&amp;iacute;ficos de SharePoint. Estos controles heredan de los controles de validaci&amp;oacute;n de ASP.NET y agregan otro comportamiento adicional muy similar a los de ASP.NET pero especial para SharePoint. Mediante las directivas pre definidas en la p&amp;aacute;gina podemos acceder a ellos.&amp;nbsp; &lt;a href="http://karinebosch.wordpress.com/"&gt;Karine Bosch&lt;/a&gt; explica &lt;a href="http://karinebosch.wordpress.com/sharepoint-controls/sharepoint-validation-controls/"&gt;aqu&amp;iacute; &lt;/a&gt;cada uno de estos controles y lo hace muy bien. Favor de ver este post antes de continuar.&lt;/p&gt;
&lt;p&gt;En el caso de &lt;strong&gt;InputFormCustomValidator &lt;/strong&gt;lo estamos usando para realizar una validaci&amp;oacute;n sobre el field Due Date. Recuerda que la regla es NO permitir la captura de fechas mayores o iguales al dia de hoy. El control de validaci&amp;oacute;n custom &lt;strong&gt;InputFormCustomValidator&lt;/strong&gt;&amp;nbsp; nos permite asignar c&amp;oacute;digo compilado .NET para realizar la validaci&amp;oacute;n en cuesti&amp;oacute;n, solo que bajo el contexto de ejecuci&amp;oacute;n de SharePoint se requerir&amp;iacute;a hacer algunas modificaciones en el web.config para permitir la compilaci&amp;oacute;n de la p&amp;aacute;gina, sin embargo, este control nos permite hacer lo mismo utilizando c&amp;oacute;digo del lado del cliente. Y justo ese es el escenario que pienso compartir aqu&amp;iacute;. &lt;/p&gt;
&lt;p&gt;B&amp;aacute;sicamente estamos confiando en realizar la validaci&amp;oacute;n desde el navegador de internet utilizando Javascript. Como ven, la propiedad &lt;strong&gt;ClientValidationFunction &lt;/strong&gt;apunta a una funci&amp;oacute;n Javascript &amp;ldquo;&lt;strong&gt;IsValidDate&lt;/strong&gt;&amp;rdquo; encargada de realizar la validaci&amp;oacute;n personalizada y este c&amp;oacute;digo javascript deber&amp;aacute; de estar referenciado o registrado en la p&amp;aacute;gina en cuesti&amp;oacute;n y lo hacemos agregandolo dentro de un Content Place Holder especial. Cuando el usuario capture una fecha sobre el control, este dispara el uso de la funci&amp;oacute;n javascript para validar la informaci&amp;oacute;n capturada, la funcion javascript recibe en sus argumentos el source y args, en otras palabras el objeto que lo dispara y algunos argumentos del objeto como el valor que contiene. Cuando args.IsValid es igual a true significa que la validacion es correcta y por lo tanto hace que el control &lt;strong&gt;InputFormCustomValidator&lt;/strong&gt; no muestre el mensaje de error. Cuando es false, hace lo contrario.&lt;/p&gt;
&lt;p&gt;Este c&amp;oacute;digo javascipt lo podemos agregar justo al inicio de la p&amp;aacute;gina despu&amp;eacute;s de la declaraci&amp;oacute;n de las directivas:&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#804040;font-size:xx-small;"&gt;&lt;strong&gt;&amp;lt;asp:Content ContentPlaceHolderId=&amp;quot;PlaceHolderAdditionalPageHead&amp;quot; runat=&amp;quot;server&amp;quot;&amp;gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#804040;font-size:xx-small;"&gt;&lt;strong&gt;&amp;lt;script language=&amp;quot;javascript&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#804040;font-size:xx-small;"&gt;&lt;strong&gt;function IsValidDate(source, args)&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#804040;font-size:xx-small;"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#804040;font-size:xx-small;"&gt;&lt;strong&gt;var today = new Date(new Date().setHours(0,0,0,0));&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#804040;font-size:xx-small;"&gt;&lt;strong&gt;var arrayDate = args.Value.split(&amp;quot;/&amp;quot;);&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#804040;font-size:xx-small;"&gt;&lt;strong&gt;var controlDate = new Date(arrayDate[2], arrayDate[0]-1, arrayDate[1]);&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#804040;font-size:xx-small;"&gt;&lt;strong&gt;args.IsValid =( today&amp;lt;controlDate);&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#804040;font-size:xx-small;"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#804040;font-size:xx-small;"&gt;&lt;strong&gt;&amp;lt;/script&amp;gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#804040;font-size:xx-small;"&gt;&lt;strong&gt;&amp;lt;/asp:Content&amp;gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Como podemos ver utilizamos un Content Place Holder que no propiamente estaba declarado dentro de la p&amp;aacute;gina y adentro agregamos el javascript de la funci&amp;oacute;n &lt;strong&gt;IsValidDate&lt;/strong&gt; el cual recibe como argumento el dato que se desea validar. Con funcionalidad javascript se generan variables de tipo date para gestionar la comparaci&amp;oacute;n. &lt;/p&gt;
&lt;p&gt;El resultado:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/4848.image_5F00_4A0EA582.png"&gt;&lt;img height="64" width="460" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/1222.image_5F00_thumb_5F00_6DC7CD1C.png" alt="image" border="0" title="image" style="border-right-width:0px;display:block;float:none;border-top-width:0px;border-bottom-width:0px;margin-left:auto;border-left-width:0px;margin-right:auto;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;No olvides dar check in a la pagina para poder probarla. Para terminar, asegurate de especificar en las propiedades de la lista en cuestion tu nueva pagina como la pagina principal para agregar elementos en la lista. Con esto cuando un usuario de clic en New dentro de la lista, SharePoint carge la nueva pagina personalizada.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;En &lt;strong&gt;SPD&lt;/strong&gt;, das clic derecho sobre la lista en cuestion. &lt;/li&gt;
&lt;li&gt;Seleccionas &lt;strong&gt;Properties&lt;/strong&gt;. &lt;/li&gt;
&lt;li&gt;Seleccionas la pesta&amp;ntilde;a &lt;strong&gt;Supporting Files &lt;/strong&gt;y en &lt;strong&gt;new item from&lt;/strong&gt; buscas la nueva pagina creada. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/0121.image_5F00_3B63F99D.png"&gt;&lt;img height="453" width="669" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/0243.image_5F00_thumb_5F00_6AD26869.png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;margin-left:0px;border-top:0px;margin-right:0px;border-right:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Credito a Hector Mata por el codigo javascript, gracias!&lt;/p&gt;
&lt;p&gt;Originalmente publicado en msmvps.com&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=196159" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Code/default.aspx">Code</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/WSS+3.0/default.aspx">WSS 3.0</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/SharePoint+2007/default.aspx">SharePoint 2007</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Staff/default.aspx">Staff</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/ASP.NET+2.0/default.aspx">ASP.NET 2.0</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Soporte/default.aspx">Soporte</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Tecnicas/default.aspx">Tecnicas</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/SharePoint+Designer/default.aspx">SharePoint Designer</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/XSLT/default.aspx">XSLT</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/XPath/default.aspx">XPath</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/SharePoint+Designer+2007/default.aspx">SharePoint Designer 2007</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Windows+SharePoint+Services/default.aspx">Windows SharePoint Services</category></item><item><title>Intranet-extranet de SharePoint en 40 minutos</title><link>http://geeks.ms/blogs/haarongonzalez/archive/2011/05/13/intranet-extranet-de-sharepoint-en-40-minutos.aspx</link><pubDate>Fri, 13 May 2011 20:39:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:194177</guid><dc:creator>Haaron Gonzalez</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/haarongonzalez/rsscomments.aspx?PostID=194177</wfw:commentRss><comments>http://geeks.ms/blogs/haarongonzalez/archive/2011/05/13/intranet-extranet-de-sharepoint-en-40-minutos.aspx#comments</comments><description>&lt;p&gt;En las &amp;uacute;ltimas semanas colegas programadores que no conocen SharePoint 2007 se acercan para preguntar y evaluar si SharePoint puede dar una soluci&amp;oacute;n aceptable para escenarios donde usuarios externos (fuera del directorio activo) a la organizaci&amp;oacute;n colaboren con usuarios internos (dentro del directorio activo) en alg&amp;uacute;n proceso de negocio relevante para la organizaci&amp;oacute;n. &lt;/p&gt;
&lt;p&gt;Afortunadamente SharePoint 2007 fue construido utilizando .NET Framework 2.0/3.0 y sobre ASP.NET 2.0 por lo tanto las caracter&amp;iacute;sticas que cualquier programador ASP.NET 2.0 conoce pr&amp;aacute;cticamente las tenemos disponibles en SharePoint 2007, aunque esto no necesariamente aplica para la experiencia de desarrollo &lt;img style="border-bottom-style:none;border-left-style:none;border-top-style:none;border-right-style:none;" class="wlEmoticon wlEmoticon-sadsmile" alt="Sad smile" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/6470.wlEmoticon_2D00_sadsmile_5F00_5D554BE9.png" /&gt;.&lt;/p&gt;
&lt;p&gt;Dicho lo anterior, tuve un par de reuniones explicando como s&amp;iacute; SharePoint 2007 podr&amp;iacute;a habilitar el escenario mencionado, sin embargo, por m&amp;aacute;s que lo explico y lo justifico, no hay mejor opci&amp;oacute;n que demostrarlo. Es por eso que me di a la tarea de grabar un video de c&amp;oacute;mo configurar una Intranet que hace uso de directorio activo como su fuente de credenciales de usuario y Extranet que hace uso Membership y Role Providers de ASP.NET 2.0 para gestionar usuarios en bases de datos SQL utilizando las caracter&amp;iacute;sticas de Form Base Authentication. En el proceso podran visualizar como la Herramienta Central de Administracion de SharePoint aprovisiona base de datos de contenido, web sites de IIS y application pool. &lt;img style="border-bottom-style:none;border-left-style:none;border-top-style:none;border-right-style:none;" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/4276.wlEmoticon_2D00_smile_5F00_33157834.png" /&gt;&lt;/p&gt;
&lt;p&gt;
&lt;iframe src="http://www.youtube.com/embed/AKGIKJ1QpN4" frameborder="0" height="349" width="425"&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;NOTA: Es muy importante mencionar que ninguna intranet-extranet que se utilice empresarialmente en escenarios de producci&amp;oacute;n quedara configurada en 40 minutos, hay aspectos de planeaci&amp;oacute;n, configuraci&amp;oacute;n y seguridad que se deben de contemplar muy seriamente.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Y para terminar un poquito de arquitectura basica sobre un escenario en cuestion:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SPDB: Database Server &lt;/li&gt;
&lt;li&gt;SPAPP: SharePoint Application Server &lt;/li&gt;
&lt;li&gt;SPWFE1: Web Front End en Zona Intranet &lt;/li&gt;
&lt;li&gt;SPWFE2: Web Front End en Zona Extranet &lt;/li&gt;
&lt;li&gt;AD: Directorio Activo &lt;/li&gt;
&lt;li&gt;EX: Exchange &lt;/li&gt;
&lt;li&gt;ISA: ISA Server o firewall fisico &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/3157.image_5F00_3E5E8C71.png" border="0" height="348" width="640" /&gt;&lt;/p&gt;
&lt;p&gt;Como se refiere en la imagen, tenemos servicios dos zonas, Intranet y DMZ. Intranet hace uso de los recursos de red internos de la organizaci&amp;oacute;n como directorio activo o servidor de correo electr&amp;oacute;nico, entre otro. En la misma zona interna tenemos una Topologia Small Farm de SharePoint con un solo Web Front End que usuarios internos podran acceder mediante &lt;a href="http://intranet.splatin.com"&gt;http://intranet.splatin.com&lt;/a&gt;. En la zona DMZ tenemos otro Web Front End unido a la granja filtrado por un firewall hacia adentro y hacia afuera. Puede ser firewall de software como el caso de ISA Server o de hardware. Podriamos pensar que el Web Front End de la zona DMZ tenga 2 tarjetas de red, una para trafico externo con IP publica y dominio como &lt;a href="http://extranet.splatin.com"&gt;http://extranet.splatin.com&lt;/a&gt;, y otra tarjeta para trafico interno con IP privada o de la red local. Aqui tenemos otras alternativas de configuraci&amp;oacute;n mas sofisticadas que el area de infraestructura seguramente podra aprovisionar. Usuario con acceso a internet llega al Web Front End de la zona DMZ pasando por el firewall.&lt;/p&gt;
&lt;p&gt;Para ti que eres programador ASP.NET y estas evaluando SharePoint espero sea de utilidad este breve ejemplo acercamiento de soluci&amp;oacute;n.&lt;/p&gt;
&lt;p&gt;HG&lt;/p&gt;
Originalmente publicado en msmvps.com&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=194177" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Comunidad/default.aspx">Comunidad</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Demo/default.aspx">Demo</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/WSS+3.0/default.aspx">WSS 3.0</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/SharePoint+2007/default.aspx">SharePoint 2007</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/ASP.NET+2.0/default.aspx">ASP.NET 2.0</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Dise_26002300_241_3B00_o/default.aspx">Dise&amp;#241;o</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Soporte/default.aspx">Soporte</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Tecnicas/default.aspx">Tecnicas</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/WSS/default.aspx">WSS</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/WFE/default.aspx">WFE</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/DNS/default.aspx">DNS</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/.NET+Framework+3.0/default.aspx">.NET Framework 3.0</category></item><item><title>Como ayudar a que programadores SharePoint dejen de pensar como programadores .NET</title><link>http://geeks.ms/blogs/haarongonzalez/archive/2011/04/26/como-ayudar-a-que-programadores-sharepoint-dejen-de-pensar-como-programadores-net.aspx</link><pubDate>Tue, 26 Apr 2011 16:19:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:193000</guid><dc:creator>Haaron Gonzalez</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/haarongonzalez/rsscomments.aspx?PostID=193000</wfw:commentRss><comments>http://geeks.ms/blogs/haarongonzalez/archive/2011/04/26/como-ayudar-a-que-programadores-sharepoint-dejen-de-pensar-como-programadores-net.aspx#comments</comments><description>&lt;p&gt;Es natural esta situaci&amp;oacute;n y todos aquellos programadores ASP.NET en alg&amp;uacute;n momento hemos pasado por aqu&amp;iacute;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Las listas de SharePoint no son tablas de SQL &lt;/li&gt;
&lt;li&gt;No te inventes problemas que demuestren tu superioridad ingenieril &lt;/li&gt;
&lt;li&gt;Piensa en el usuario y su experiencia &lt;/li&gt;
&lt;li&gt;Tambi&amp;eacute;n existe Office cliente como parte de la soluci&amp;oacute;n &lt;/li&gt;
&lt;li&gt;Conoce las funcionalidades OOB (Out of the box) de SharePoint &lt;/li&gt;
&lt;li&gt;No pierdas tiempo dise&amp;ntilde;ando lo que ya existe &lt;/li&gt;
&lt;li&gt;No instales el Office en los WFE &lt;/li&gt;
&lt;li&gt;XML, XPath y XSLT son amigos &lt;/li&gt;
&lt;li&gt;Al&amp;eacute;jate del web.config y global.asax &lt;/li&gt;
&lt;li&gt;No hagas Web Services para invocar Web Services de SharePoint &lt;/li&gt;
&lt;li&gt;Conoce los roles de SharePoint y la arquitectura en general &lt;/li&gt;
&lt;li&gt;Consulta el User Profile program&amp;aacute;ticamente en vez del Active Directory &lt;/li&gt;
&lt;li&gt;No todo son Event o Feature Receivers ni Site Definitions &lt;/li&gt;
&lt;li&gt;Existen comandos en el stsadm.exe o PowerShell consid&amp;eacute;ralos antes de abrir Visual Studio &lt;/li&gt;
&lt;li&gt;Conoce lo que significa ensamblados Partial Trust y Full Trust en SharePoint &lt;/li&gt;
&lt;li&gt;Abre tu mente a temas de infraestructura como SSL, DNS, FQDN, NLB, etc. &lt;/li&gt;
&lt;li&gt;Crear desarrollo ASP.NET con SQL y mediante Page Viewer WebParts simular&lt;span style="text-decoration:line-through;"&gt; y creerse &lt;/span&gt;que es SharePoint &lt;/li&gt;
&lt;li&gt;Sobre todo, no minimices el problema &lt;/li&gt;
&lt;li&gt;Cuando le eches la culpa a SharePoint y la frustraci&amp;oacute;n suba de nivel, es tiempo de comprarse un libro y leerlo &lt;img src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/3404.wlEmoticon_2D00_smile_5F00_6A50C79A.png" alt="Sonrisa" class="wlEmoticon wlEmoticon-smile" style="border-bottom-style:none;border-left-style:none;border-top-style:none;border-right-style:none;" /&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Bienvenido cualquier escenario o consejo. &lt;/p&gt;
&lt;p&gt;HG&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#ff0000;"&gt;&lt;b&gt;NOTA: Este post no pretende incomodar, ofender&amp;nbsp;o comparar absolutamente a ninguna clase de programador, lenguaje de programaci&amp;oacute;n o tecnolog&amp;iacute;a. Gracias.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
Originalmente publicado en msmvps.com&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=193000" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Negocio/default.aspx">Negocio</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Trabajo+en+Equipo/default.aspx">Trabajo en Equipo</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Madurez/default.aspx">Madurez</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Issues/default.aspx">Issues</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Soporte/default.aspx">Soporte</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Desarrollo/default.aspx">Desarrollo</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Herramientas/default.aspx">Herramientas</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Tecnicas/default.aspx">Tecnicas</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Suck/default.aspx">Suck</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Training/default.aspx">Training</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Practicas/default.aspx">Practicas</category></item><item><title>Cuantos ingenieros se necesitan para cambiar una bombilla o crear sitios SharePoint</title><link>http://geeks.ms/blogs/haarongonzalez/archive/2011/03/31/cuantos-ingenieros-se-necesitan-para-cambiar-una-bombilla-o-crear-sitios-sharepoint.aspx</link><pubDate>Thu, 31 Mar 2011 19:50:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:191407</guid><dc:creator>Haaron Gonzalez</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/haarongonzalez/rsscomments.aspx?PostID=191407</wfw:commentRss><comments>http://geeks.ms/blogs/haarongonzalez/archive/2011/03/31/cuantos-ingenieros-se-necesitan-para-cambiar-una-bombilla-o-crear-sitios-sharepoint.aspx#comments</comments><description>&lt;p&gt;No es curioso, es un hecho que en el ambiente laboral relacionado con tecnolog&amp;iacute;as de informaci&amp;oacute;n y seguramente en muchos otros, nos encontramos con diversas personalidades, temperamentos y arquetipos colaborando d&amp;iacute;a con d&amp;iacute;a para resolver alg&amp;uacute;n problema t&amp;eacute;cnico o de negocio. Las personas tenemos toda una historia distinta, adem&amp;aacute;s de cualidades que en parte de forma consiente o inconsciente constituye la forma muy particular de ver y reaccionar ante vida, en algunos casos estas cualidades son las adecuadas para ciertos escenarios pero que en definitiva en otros no lo son. &lt;/p&gt;
&lt;p&gt;Entonces la pregunta es, &amp;iquest;c&amp;oacute;mo aprovechar lo que cada quien aporta para generar valor empresarial?, esa es una pregunta que especialistas en Management, Leadership y Coaching podr&amp;iacute;an responder sin ning&amp;uacute;n problema. Sin embargo, desde mi &amp;oacute;ptica por lo menos &lt;strong&gt;compartir constantemente una visi&amp;oacute;n compartida con lineamientos claros&lt;/strong&gt; es esencial para organizar y aprovechar lo que cada persona con su historia histeria y experiencia aporta.&lt;/p&gt;
&lt;p&gt;En esta historia, el requerimiento es crear un conjunto finito de sitios con las siguientes caracter&amp;iacute;sticas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cada sitio se basa en la plantilla de sitio de &lt;b&gt;Trabajo en Equipo&lt;/b&gt; &lt;/li&gt;
&lt;li&gt;Cada sitio no deber&amp;aacute; tener &lt;b&gt;herencia de permisos&lt;/b&gt; &lt;/li&gt;
&lt;li&gt;Cada sitio deber&amp;aacute; contar con 4 grupos &amp;ldquo;Owners, Visitors, Members, Permissions&amp;rdquo; bajo la nomenclatura &amp;ldquo;&lt;b&gt;Sitio + Nombre de grupo&lt;/b&gt;&amp;rdquo; &lt;/li&gt;
&lt;li&gt;Cada sitio cuenta con usuarios espec&amp;iacute;ficos para cada grupo. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Lo que piensan los miembros del equipo de TI:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Miembro 1 - Vamos a lucirnos con la soluci&amp;oacute;n&lt;b&gt;, hagamos un WSP con feature receiver&lt;/b&gt; a nivel sitio web para que cuando le den activar en las caracter&amp;iacute;sticas del sitio, program&amp;aacute;ticamente los construya y configure. &lt;/li&gt;
&lt;li&gt;Miembro 2 &amp;ndash; &amp;iquest;Hay urgencia por parte del cliente como para dedicar tiempo a construir y probar un WSP?, &amp;iquest;se va a reutilizar la jerarqu&amp;iacute;a en alg&amp;uacute;n otro sitio en el futuro?, &amp;iquest;conviene dejar archivos en el 12 hive y un ensamblado en el GAC con full trust assembly?, &amp;iquest;vamos a implementar en DEV, QA, UAT y PROD el WSP? Yo digo que &lt;b&gt;construyamos los sitios manualmente&lt;/b&gt; usando el UI de SharePoint. &lt;/li&gt;
&lt;li&gt;Miembro 3 &amp;ndash; &lt;b&gt;Usemos scripts&lt;/b&gt; en un archivos *.bat que ejecute el comando stsadm.exe para crear los sitios y grupos, pasamos par&amp;aacute;metros e nivel comando y creamos un solo archivo que cuente con todas las instrucciones necesarias. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Despu&amp;eacute;s los miembros dan inicio a los argumentos t&amp;eacute;cnico-personales para defender su postura a capa y espada, &lt;span style="text-decoration:line-through;"&gt;como si fueran program managers de microsoft&lt;/span&gt;, correos electr&amp;oacute;nicos empiezan a fluir con preguntas que toman minutos leer y escribir de regreso para ser enviados de nuevo. El tiempo pasa, el tema sube de nivel, siguen estancados, el usuario pregunta por sus sitios y en eso Miembro 2 lo toma personal, sube de nivel su contestaci&amp;oacute;n y claudica ante su postura. Miembro 1 ratifica la postura de Miembro 2 con el af&amp;aacute;n de no afectar al equipo y Miembro 3 procede a ejecutar la postura del Miembro 2. &lt;b&gt;Tiempo total transcurrido 2.5 horas.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Si lo analizamos, todos pierden. El esp&amp;iacute;ritu del equipo se deteriora, definitivamente se ve mal y el usuario de plano esperando. Realmente cualquier postura es aceptable y totalmente factible, cada una con sus peculiaridades, estimaciones, esfuerzos y consecuencias. &lt;/p&gt;
&lt;p&gt;Dicho esto, tengo 2 preguntas:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&amp;iquest;C&amp;oacute;mo podr&amp;iacute;amos contextualizar las cosas para asegurar que antes de dar inicio a una soluci&amp;oacute;n construida por ingenieros, todos est&amp;eacute;n viendo hacia el mismo lugar? Esa es una respuesta que probablemente podamos encontrar aqu&amp;iacute; &lt;a href="http://www.crecenegocios.com/los-objetivos-de-una-empresa/"&gt;http://www.crecenegocios.com/los-objetivos-de-una-empresa/&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&amp;iquest;Qu&amp;eacute; estrategia t&amp;eacute;cnica conviene utilizar para un escenario donde el resultado se requiere de inmediato? &lt;b&gt;A veces me pregunto si mi trabajo es preguntar&lt;/b&gt;, sin embargo haciendo un intento de posible respuesta, dejo algunos cuestionamientos respecto al escenario planteado y claro, su implementaci&amp;oacute;n. &lt;/li&gt;
&lt;/ol&gt;
&lt;h1&gt;Construyendo sitios de forma manual&lt;/h1&gt;
&lt;h2&gt;Pros&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;R&amp;aacute;pida ejecuci&amp;oacute;n usando UI de SharePoint &lt;/li&gt;
&lt;li&gt;Cero dependencia a c&amp;oacute;digo, ensamblado o XMLs, todo queda en la base de datos usando los site definitions y templates propietarios de SharePoint que si est&amp;aacute;n considerados para ser migrados y respaldados &lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Cons&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;No es repetible &lt;/li&gt;
&lt;li&gt;Requiere de intervenci&amp;oacute;n manual para replicar en cada ambiente y por lo tanto hay margen de error &lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Implementaci&amp;oacute;n&lt;/h2&gt;
&lt;p&gt;Ubicados en el sitio en cuesti&amp;oacute;n accedemos a &lt;strong&gt;Acciones de sitio&lt;/strong&gt;, &lt;strong&gt;Configuraci&amp;oacute;n del sitio, Toda la configuraci&amp;oacute;n del sitio&lt;/strong&gt; y al de final las galer&amp;iacute;as elegimos &lt;strong&gt;crear sitios o &amp;aacute;rea de trabajo&lt;/strong&gt;. Especificamos el nombre, url y los siguientes puntos:&lt;/p&gt;
&lt;table width="400" cellpadding="2" cellspacing="2" border="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="200" valign="top"&gt;&lt;strong&gt;Crear sitio&lt;/strong&gt;&lt;/td&gt;
&lt;td width="200" valign="top"&gt;&lt;strong&gt;Configurar grupos&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="200" valign="top"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/7573.image_5F00_3C44BF6E.png"&gt;&lt;img height="484" width="300" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/2806.image_5F00_thumb_5F00_2FA6EC85.png" alt="image" border="0" title="image" style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td width="200" valign="top"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/5554.image_5F00_7B629D71.png"&gt;&lt;img height="484" width="435" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/7827.image_5F00_thumb_5F00_1ECF1C0A.png" alt="image" border="0" title="image" style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1&gt;&amp;nbsp;&lt;/h1&gt;
&lt;h1&gt;Construyendo sitios program&amp;aacute;ticamente&lt;/h1&gt;
&lt;h2&gt;Pros&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Total portabilidad a m&amp;uacute;ltiples ambientes y sitios con m&amp;iacute;nimo esfuerzo de implementaci&amp;oacute;n &lt;/li&gt;
&lt;li&gt;Aprovisionamiento y des aprovisionamiento flexible de la funcionalidad y dependencias &lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Cons&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Crea una dependencia a un WSP, ensamblado en GAC y archivos en 12 hive &lt;/li&gt;
&lt;li&gt;Requiere de construcci&amp;oacute;n, pruebas, empaquetamiento y puesta en marcha en cada ambiente &lt;/li&gt;
&lt;li&gt;Pasa a control de versiones y gesti&amp;oacute;n &lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Implementaci&amp;oacute;n&lt;/h2&gt;
&lt;p&gt;En este caso vemos que utilizamos una colecci&amp;oacute;n especial de tipo diccionario para almacenar la URL y Nombre del sitio que deseamos crear. Existen varias formas de hacer lo mismo, en este caso recorremos la colecci&amp;oacute;n de plantillas SharePoint para poder elegir la que usaremos &amp;ldquo;Team Sites&amp;rdquo;. Recorremos la colecci&amp;oacute;n de nuestro diccionario y utilizamos la colecci&amp;oacute;n Webs para agregar un nuevo site pasando los argumento recolectados, lo mas importante destacar en este punto es que el ultimo argumento false indica que no se mantiene la herencia y a continuaci&amp;oacute;n ya dentro del sitio rompemos la herencia, posteriormente recorremos el arreglo que tiene el nombre de los grupos que estaremos construyendo program&amp;aacute;ticamente, ese c&amp;oacute;digo se los debo y si alguien quiere compartirlo adelante.&lt;/p&gt;
&lt;pre class="csharpcode"&gt;           &lt;span style="font-family:Courier New;font-size:xx-small;"&gt;&lt;span class="kwrd"&gt;uint&lt;/span&gt;        lcid_english = 1033;
            &lt;span class="kwrd"&gt;string&lt;/span&gt;      siteUrl = &lt;span class="str"&gt;&amp;quot;http://portal.litwareinc.com&amp;quot;&lt;/span&gt;;
            &lt;span class="kwrd"&gt;string&lt;/span&gt;[]    groupTypeNames = {&lt;span class="str"&gt;&amp;quot;Owners&amp;quot;&lt;/span&gt;,&lt;span class="str"&gt;&amp;quot;Members&amp;quot;&lt;/span&gt;,&lt;span class="str"&gt;&amp;quot;Permissions&amp;quot;&lt;/span&gt;,&lt;span class="str"&gt;&amp;quot;Visitors&amp;quot;&lt;/span&gt;};

            Dictionary&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;, &lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; targetSites = &lt;span class="kwrd"&gt;new&lt;/span&gt; Dictionary&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;, &lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt;();
            targetSites.Add(&lt;span class="str"&gt;&amp;quot;demo1&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;Sitio de demostracion 1&amp;quot;&lt;/span&gt;);
            targetSites.Add(&lt;span class="str"&gt;&amp;quot;demo2&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;Sitio de demostracion 2&amp;quot;&lt;/span&gt;);
            targetSites.Add(&lt;span class="str"&gt;&amp;quot;demo3&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;Sitio de demostracion 3&amp;quot;&lt;/span&gt;);
                    
                &lt;span class="kwrd"&gt;using&lt;/span&gt; (SPSite site = &lt;span class="kwrd"&gt;new&lt;/span&gt; SPSite(siteUrl))
                {
                    SPWebTemplate siteTemplate = &lt;span class="kwrd"&gt;null&lt;/span&gt;;
                    SPWebTemplateCollection templateCollection = site.GetWebTemplates(lcid_english);
                    
                    &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (SPWebTemplate template &lt;span class="kwrd"&gt;in&lt;/span&gt; templateCollection)
                    {
                        &lt;span class="kwrd"&gt;if&lt;/span&gt; (template.Title.Equals(&lt;span class="str"&gt;&amp;quot;Team Site&amp;quot;&lt;/span&gt;))
                        {
                            siteTemplate = template; 
                            &lt;span class="kwrd"&gt;break&lt;/span&gt;;
                        }
                    }

                    &lt;span class="kwrd"&gt;using&lt;/span&gt; (SPWeb web = site.OpenWeb())
                    {
                        &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (KeyValuePair&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;, &lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; siteInfo &lt;span class="kwrd"&gt;in&lt;/span&gt; targetSites)
                        {
                            &lt;span class="kwrd"&gt;using&lt;/span&gt; (SPWeb newWeb = web.Webs.Add(&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="csharpcode"&gt;&lt;span style="font-family:Courier New;font-size:xx-small;"&gt;siteInfo.Key, &lt;/span&gt;&lt;/pre&gt;
&lt;pre class="csharpcode"&gt;&lt;span style="font-family:Courier New;font-size:xx-small;"&gt;siteInfo.Value, &lt;/span&gt;&lt;/pre&gt;
&lt;pre class="csharpcode"&gt;&lt;span style="font-family:Courier New;font-size:xx-small;"&gt;&lt;span class="kwrd"&gt;string&lt;/span&gt;.Empty, &lt;/span&gt;&lt;/pre&gt;
&lt;pre class="csharpcode"&gt;&lt;span style="font-family:Courier New;font-size:xx-small;"&gt;lcid_english, siteTemplate, &lt;span class="kwrd"&gt;false&lt;/span&gt;, &lt;span class="kwrd"&gt;false&lt;/span&gt;))
                            {
                                newWeb.BreakRoleInheritance(&lt;span class="kwrd"&gt;false&lt;/span&gt;);
                                newWeb.Update();

                                &lt;span class="kwrd"&gt;foreach&lt;/span&gt;(&lt;span class="kwrd"&gt;string&lt;/span&gt; groupTypeName &lt;span class="kwrd"&gt;in&lt;/span&gt; groupTypeNames)
                                {
                                    &lt;span class="kwrd"&gt;string&lt;/span&gt; groupType = &lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;&amp;quot;{0} {1}&amp;quot;&lt;/span&gt;,siteInfo.Value,groupTypeName);
                                    
                                    &lt;span class="rem"&gt;// aqui deberas crear el grupo y asignar los permisos         &lt;/span&gt;
                                }                                                                  
                            }                            
                        }
                    }                
                }&lt;/span&gt; &lt;/pre&gt;
&lt;p&gt;

&lt;/p&gt;
&lt;h1&gt;Construyendo sitios con comandos stsadm.exe&lt;/h1&gt;
&lt;h2&gt;Pros&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Reutilizaci&amp;oacute;n moderada e intervenci&amp;oacute;n manual para especificar sites, groups que se aprovisionaran por los comandos &lt;/li&gt;
&lt;li&gt;F&amp;aacute;cil de corregir y reaccionar ante cualquier error &lt;/li&gt;
&lt;li&gt;La forma recomendada por Microsoft &lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Cons &lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Crea una dependencia al script que ejecuta los comandos de staadm.exe para la estructura solicitada &lt;/li&gt;
&lt;li&gt;Pasa a control de versiones y gesti&amp;oacute;n &lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Implementaci&amp;oacute;n&lt;/h2&gt;
&lt;p&gt;En esta alternativa utilizamos las sentencias del comando stsadm.exe ubicado en c:\program files\common files\microsoft shared\web server extensions\12\bin especificando mediante &amp;ndash;o la opci&amp;oacute;n que deseamos y mediante los par&amp;aacute;metros especificamos lo que requerimos. Espec&amp;iacute;ficamente &amp;ndash;unique describe que no queremos heredar los permisos. Subrayo en rojo la parte donde especificamos el URL del sitio que estaremos creando. En este caso estamos creando un sitio llamado Sitio 1 y posteriormente creando cuatro grupos en donde los grupos Visitors y Members tienen como due&amp;ntilde;o al grupo Permissions.&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Courier New;font-size:xx-small;"&gt;stsadm.exe -o createweb &amp;ndash;url &amp;quot;el url del sitio donde crearemos/&lt;strong&gt;&lt;span style="color:#ff0000;"&gt;url del nuevo sitio&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;/strong&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:xx-small;"&gt;-lcid 1033 -sitetemplate STS#0&amp;nbsp; -title &amp;quot;Sitio 1&amp;quot; -description &amp;quot;&amp;quot; &amp;ndash;unique&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Courier New;font-size:xx-small;"&gt;stsadm.exe -o creategroup -url &amp;quot;el url del sitio donde aplicaremos&amp;quot;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:xx-small;"&gt; -name &amp;quot;Sitio 1 Permissions&amp;quot; -description &amp;quot;Permissions of the site&amp;quot; -ownerlogin &amp;quot;administrator@litwareinc.com&amp;quot; -type &amp;quot;Owner&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Courier New;font-size:xx-small;"&gt;stsadm.exe -o creategroup -url &amp;quot;el url del sitio donde aplicaremos&amp;quot;&lt;/span&gt;&lt;a href="http://portal.litwareinc.com/2/&amp;quot;"&gt;&lt;span style="font-family:Courier New;font-size:xx-small;"&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:Courier New;font-size:xx-small;"&gt; -name &amp;quot;Sitio 1 Owners&amp;quot; -description &amp;quot;Owners of the site&amp;quot; -ownerlogin &amp;quot;administrator@litwareinc.com&amp;quot; -type &amp;quot;Owner&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Courier New;font-size:xx-small;"&gt;stsadm.exe -o creategroup -url &amp;quot;el url del sitio donde aplicaremos&amp;quot;&lt;/span&gt;&lt;a href="http://portal.litwareinc.com/2/&amp;quot;"&gt;&lt;span style="font-family:Courier New;font-size:xx-small;"&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:Courier New;font-size:xx-small;"&gt; -name &amp;quot;Sitio 1 Visitors&amp;quot; -description &amp;quot;Visitors of the site&amp;quot; -ownerlogin &amp;quot;Sitio 1 Permissions&amp;quot; -type &amp;quot;Visitor&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Courier New;font-size:xx-small;"&gt;stsadm.exe -o creategroup -url &amp;quot;el url del sitio donde aplicaremos&amp;quot;&lt;/span&gt;&lt;a href="http://portal.litwareinc.com/2/&amp;quot;"&gt;&lt;span style="font-family:Courier New;font-size:xx-small;"&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:Courier New;font-size:xx-small;"&gt; -name &amp;quot;Sitio 1 Members&amp;quot; -description &amp;quot;Members of the site&amp;quot; -ownerlogin &amp;quot;Sitio 1 Permissions&amp;quot; -type &amp;quot;Member&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Personalmente en ocasiones he llegado a pensar, &amp;iquest;qu&amp;eacute; es mas complejo?, la tecnolog&amp;iacute;a o la psicolog&amp;iacute;a, en fin.&lt;/p&gt;
&lt;p&gt;&amp;iquest;Cu&amp;aacute;l es la mejor alternativa? Depende &lt;img src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/8400.wlEmoticon_2D00_smile_5F00_2F86A0EB.png" alt="Sonrisa" class="wlEmoticon wlEmoticon-smile" style="border-bottom-style:none;border-left-style:none;border-top-style:none;border-right-style:none;" /&gt;&lt;/p&gt;
Originalmente publicado en msmvps.com&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=191407" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Vision/default.aspx">Vision</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/WSS+3.0/default.aspx">WSS 3.0</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/SharePoint+2007/default.aspx">SharePoint 2007</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Trabajo+en+Equipo/default.aspx">Trabajo en Equipo</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Issues/default.aspx">Issues</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Configuracion/default.aspx">Configuracion</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Soporte/default.aspx">Soporte</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Desarrollo/default.aspx">Desarrollo</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Tecnicas/default.aspx">Tecnicas</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/stsadm/default.aspx">stsadm</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/WSS/default.aspx">WSS</category></item><item><title>Consideraciones para poner en marcha soluciones personalizadas SharePoint en ambientes de producción de nuestros clientes</title><link>http://geeks.ms/blogs/haarongonzalez/archive/2010/10/10/consideraciones-para-poner-en-marcha-soluciones-personalizadas-sharepoint-en-ambientes-de-producci-243-n-de-nuestros-clientes.aspx</link><pubDate>Sun, 10 Oct 2010 11:44:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:183165</guid><dc:creator>Haaron Gonzalez</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/haarongonzalez/rsscomments.aspx?PostID=183165</wfw:commentRss><comments>http://geeks.ms/blogs/haarongonzalez/archive/2010/10/10/consideraciones-para-poner-en-marcha-soluciones-personalizadas-sharepoint-en-ambientes-de-producci-243-n-de-nuestros-clientes.aspx#comments</comments><description>&lt;p&gt;Seguramente como desarrollador puede que seas el responsable o miembro de un equipo de desarrollo encargado de realizar el análisis, diseñar, &lt;img style="margin:5px 5px 5px 0px;display:inline;" align="right" src="http://www.larepublica.com.uy/publicaciones/101/20100507/images/409252_0.gif" alt="" /&gt;construcción, pruebas o implementar una solución de colaboración, por tal motivo quiero compartir algunos consejos relacionados con este tema ya que es muy sano para todos los involucrados delimitar los ámbitos de responsabilidad para asegurar que nuestro trabajo “que definitivamente coadyuva con el de otros” pueda fluir de manera elegante y contundente.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;strong&gt;Inventario de soluciones:&lt;/strong&gt; Es importante tener en cuenta aquellas otras soluciones de colaboración que se tengan implementadas en el ambiente de producción con la finalidad de asegurarnos que nuestra solución o sus pre-requisitos no infieran con las otras. Esto sucede por ejemplo cuando usamos las extensiones de AJAX más recientes y que desarrollos anteriores hagan uso de las extensiones de AJAX 1.0. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Validación de estado de ejecución de cada solución:&lt;/strong&gt; Antes de tocar al servidor y una vez teniendo el inventario de soluciones, asegúrate de saber y dejar en claro con el cliente cuales de estas se encuentran en debida operación y cuáles no. Esto es para eliminar el riesgo de que te hagan responsable del fallo de alguna después de que estuviste en la granja. Toma una impresión de pantalla de la sección de Solution Management donde se pueda ver el estado de implementación actual de todos los WSP instalados. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;No implementes en horas de oficina:&lt;/strong&gt; parece hasta broma pero sucede que por falta de comunicación puedas pensar que la granja está vacía y que por eso te citaron a las 10:00 AM a implementar. Busca siempre una hora donde se sepa que usuarios no estarán utilizando los servicios de la granja y aconseja al cliente de realizar un comunicado oficial donde se especifique la ventana de tiempo requerida y la intermitencia del servicio. Recuerda que cuando implementamos hacemos IISRESET o modificaciones al web.config y esto causa un reciclaje que potencialmente puede transformarse en momentos de downtime o intermitencia del servicio. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Respaldo de los eventos del visor de eventos:&lt;/strong&gt; Es esencial asegurarte de tener en cuenta que eventos tanto de información o de error están registrados previo a tu intervención, si encuentras alguno que sea importante de entender sugiero exponer al cliente el estatus y dar un par de sugerencias para mitigarlos previo a tu intervención. Es común encontrar errores relacionados con el rastreo de las búsquedas y con el tamaño de los logs. Antes, durante y después de tu intervención en la granja te recomiendo realizar múltiples respaldo de los elementos que se estén registrados en el visor de eventos con la finalidad de detectar posibles colisiones funcionales producto de la instalación de tus pre-requisitos o tu funcionalidad. También si quieres ser demasiado critico en este tema, se recomienda que durante cada paso de tu implementación te asegures de que las otras aplicaciones web siguen funcionando invocándolas directamente desde un navegador. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Revisar lo servidores de la granja y los servicios:&lt;/strong&gt; Solicita un diagrama de la granja SharePoint, las organizaciones normalmente cuentan con la documentación o memoria técnica que algún proveedor realizo cuando implemento la granja de producción. Valídalo, valida que lo que está descrito en esa memoria técnica este físicamente configurado en producción y da a tu cliente evidencia de ello. Él lo agradecerá. Aquí es importante comentar que si detectas algún riesgo en la configuración lo menciones previo a tu intervención, por ejemplo, contar con el rol de Web Application en todos los servidores de la granja “index, search, sso” y que solamente se encuentren configurado 2 en el balanceador. Cuando haces despliegue de tu WSP estos estarán eternamente en estado de “Deploying” debido a que no pueden implementarse en los otros servidores que cuentan con el rol de Web Application que están fuera de los registrados en el balanceador. En la herramienta central de administración dentro de operations está la opción de Servers in farm, date el tiempo de analizar cuales servidores son Web Front End y que servicios se encuentran configurado. Insisto, toma una impresión de pantalla y si notas alguna inconsistencia de configuración comunícalo al cliente o a alguien que te pueda asesorar. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Siempre utilizar archivos “WSP”:&lt;/strong&gt; Los archivos WSP que significan “Web Solution Package” son paquetes de despliegue de archivos y ensamblados que se ejecutaran dentro del contexto funcional de SharePoint. Estos paquetes cuentan con toda una serie de instrucciones fijas y precisas sobre donde ubicar los archivos y recursos que estamos instalando con la finalidad de poder retraerlos en algún momento dado sin perder absolutamente nada de funcionalidad o configuración. Así mismo, estos archivos los podemos utilizar para re instalar en alguna otra granja la misma funcionalidad sin tanto esfuerzo ya que estos se encargan de acomodar los archivos y recursos en el lugar esperado. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Ejecutar un respaldo de la granja en un servidor adicional:&lt;/strong&gt; esta opción normalmente siempre está configurada para hacerse de manera incremental. Solo asegúrate de que el cliente cuente con un respaldo reciente de toda la granja y asegúrate de tener la certeza de ante cualquier eventualidad el cliente pueda recuperar el estado de su granja. No olvides copiar la carpeta 12. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Crea un plan de despliegue:&lt;/strong&gt; define la estrategia de despliegue desde el punto de vista técnico y logística donde se pueda acordar con los distintos actores las actividades, tiempos y sobre todo los requisitos para poder ejecutarse. Mientras el cliente sepa que esperar y entienda todas las posibles consecuencias positivas y negativas estarás con la posibilidad de poder levantar la mano y solicitar lo que necesites con la certeza de que la solución fluirá pronto. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Ten un plan de desinstalación:&lt;/strong&gt; Define la estrategia de rallback a la implementación en caso de algún fallo donde de plano no sepas que está pasando. &lt;/li&gt;    &lt;li&gt;Manten un buen humor, respirar profundamente, ser muy cuidadoso, tomar en serio las cosas, ir generando manualmente una bitaccora de movimientos de instalacion, etc etc.&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Hay mas recomendaciones que podamos incluir en esta lista, vamos abriendo la discusion y por favor comparte las que en tu experiencia consideres pertinentes nos enriquecernos todos. &lt;/p&gt;
Originalmente publicado en msmvps.com&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=183165" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Productividad/default.aspx">Productividad</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Proceso/default.aspx">Proceso</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Futuro/default.aspx">Futuro</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Soporte/default.aspx">Soporte</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Tecnicas/default.aspx">Tecnicas</category></item><item><title>Operation aborted (Exception from HRESULT: 0x80004004 (E_ABORT))</title><link>http://geeks.ms/blogs/haarongonzalez/archive/2010/09/28/operation-aborted-exception-from-hresult-0x80004004-e-abort.aspx</link><pubDate>Tue, 28 Sep 2010 18:12:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:182555</guid><dc:creator>Haaron Gonzalez</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/haarongonzalez/rsscomments.aspx?PostID=182555</wfw:commentRss><comments>http://geeks.ms/blogs/haarongonzalez/archive/2010/09/28/operation-aborted-exception-from-hresult-0x80004004-e-abort.aspx#comments</comments><description>&lt;p&gt;Si por alguna razón te encuentras realizando algún respaldo de tu granja SharePoint y de repente surge la siguiente excepción:&lt;/p&gt;  &lt;p align="center"&gt;&lt;strong&gt;&lt;font size="4"&gt;Operation aborted (Exception from HRESULT: 0x80004004 (E_ABORT))&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Significa que tu archive LOG de la base de datos en cuestión ha llegado al límite de su capacidad. La solución a esto es truncarlo o reducir su tamaño. Por truncarlo entendemos bloquear el límite que puede almacenar el archive log para que el resto se almacene en Data, en otras palabras establecer un tamaño fijo de almacenamiento del LOG.&lt;/p&gt;  &lt;p&gt;Para realizar este proceso desde nuestro Enterprise Manager de SQL ejecutamos las siguientes instrucciones:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;font size="3" face="Courier New"&gt;USE nombredebasededatos      &lt;br /&gt;&lt;/font&gt;&lt;font size="3" face="Courier New"&gt;GO      &lt;br /&gt;&lt;/font&gt;&lt;font size="3" face="Courier New"&gt;DBCC SHRINKFILE(‘nombredebasededatos’, 1)      &lt;br /&gt;&lt;/font&gt;&lt;font size="3" face="Courier New"&gt;BACKUP LOG nombredebasededatos WITH TRUNCATE_ONLY      &lt;br /&gt;&lt;/font&gt;&lt;font size="3" face="Courier New"&gt;DBCC SHRINKFILE(‘nombredebasededatos’, 1)&lt;/font&gt;&lt;/p&gt;
Originalmente publicado en msmvps.com&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=182555" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/SQL/default.aspx">SQL</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/TSQL/default.aspx">TSQL</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Issues/default.aspx">Issues</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Soporte/default.aspx">Soporte</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Tecnicas/default.aspx">Tecnicas</category><category domain="http://geeks.ms/blogs/haarongonzalez/archive/tags/Suck/default.aspx">Suck</category></item></channel></rss>