viernes, 31 de julio de 2009

Tip del día: Lista de prerrequisitos para una Instalación Típica de SharePoint y/o Project Server

Esta recomendación se base en una instalación típica sobre Windows Server 2003 y SQL Server 2005.

Cuales son los prerrequisitos para instalar cualquiera de estos dos productos:

  1. Windows Server 2003 con Service pack 2
  2. IIS Instalado con los servicios mínimos (sin ftp,smtp).
  3. .Net Framework 2.0 y 3.0 (Requerido para los Workflows de SharePoint). Opcional el .net Framework 3.5 que si lo instalas te incluye ambos Frameworks con sus Service Pack 1.0 respectivos.
  4. SQL-Server 2005 con Service Pack 2.0 instalado. Ojo mejor si las bases de datos de SQL-Server esta en el disco que tenga mayor disponibilidad de espacio y no en el del sistema operativo. O cambiar el directorio predeterminado donde crea las base de datos y Logs y reiniciar los servidores. Los servicios mínimos a instalar en SQL-Server 2005 son: Database Engina, Integration Services, Client Tools y Server Agent. Si vamos incluir Reportería incluyamos Reporting Services, si vamos incluir Cubos para el caso de Project Server incluyamos Analisys Services.

Con ello deberíamos poder instalar los Productos de Office Server como SharePoint o Project Server.

Hasta la próxima,

Manolo Herrera

Tip del día: Preparando tu servidor Demo de SQL-Server Analisys Services para probar los elementos Web de SharePoint

Aunque esta información esta publicada en Internet, encontré que una parte esta en un lado y la otra en otro, para no volver a buscar decidí dejar registro donde la encontré para futuras oportunidades.

Donde obtener las bases de datos de demostración?

En el sitio de Codeplex en: http://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=MSFTDBProdSamples&ReleaseId=4004

Cómo instalar las bases de datos y conectarlas al Analisys Services de SQL-Server?

http://msdn.microsoft.com/en-us/library/ms143804(SQL.90).aspx

Básicamente luego de instalar los msi, debes de abrir el IDE de Visual Studio para Analisys Services en el Servidor y abrir el proyecto que descarga al instalar los msi files de Codeplex. Típicamente están ubicados en:

<drive>:\Program Files\Microsoft SQL Server\90\Tools\Samples\AdventureWorks Analisys Services Project

Debes de tener un servidor de base de datos SQL-Server 2005 con Analisys Service Instalado, Integration Services, y por supuesto Database Engine.

Hasta la próxima!

Manolo Herrera

Como cambiar el servidor de SQL-Server o la instancia de SQL-Server de una instalación de SharePoint existente

Es una pregunta de interés común que por ello he decidido escribir este artículo.  

Prerrequisitos:

Conocimientos mínimos de administración de SQL-Server.

Conocimientos mínimos de administración de SharePoint y de manejo de archivos.

 

En resumen lo que debemos hacer es:

  1. Abrir una ventana de mantenimiento (Avise a lo usuarios que estará en mantenimiento el servidor de SharePoint durante una hora, dependerá del tamaño de sus bases de datos).
  2. Utilice la opción de Quesce Farm del Central Administración para desconectar a los usuarios que estén conectados y que permita nuevas conexiones.
  3. Ejecute el Asistente de configuración de Productos y Tecnologías de SharePoint.
  4. Seleccione la opción de desconectarse de la granja de servidores actual.
  5. Haga un Detach de las bases de datos de SharePoint del servidor actual de SQL-Server donde estaba conectado.
  6. Haga un Attach de las bases de datos de SharePoint en el nuevo servidor o en la nueva instancia.
  7. Ejecute el Asistente de configuración de Productos y Tecnologías de SharePoint y seleccione la opción, Si deseo conectarme a una granja existente y escriba el nombre del servidor de SQL-Server donde realizó el Attach de las bases de datos de SharePoint en el nuevo Servidor o Instancia de SQL-Server.
  8. Reactive la granja de Servidores si aún permanece en modo de inactividad en el mismo lugar donde la inactivo.

En detalle haga lo siguiente:

1. Conéctese al servidor donde esta instalado SharePoint.

2. Ejecute la Administración Central de SharePoint 3.0.

3. Bajo Operaciones ubique del lado derecho superior la opción Quesce Farm o en español “Poner el conjunto de Servidores de Modo de Inactividad”.

image

Seleccione la cantidad minutos que dará tiempo para que el usuario que aún este conectado lo desconecte. Y presione el botón de iniciar modo de inactividad.

En la práctica este modo de inactividad tanto para los usuarios conectados y para las nuevas conexiones no iniciará bloqueándolas hasta que finalice el tiempo de gracia que usted indico en esta opción.

4. Luego del tiempo de espera haga clic sobre el botón [Refresh] del navegador a la página para asegurarse que ya esta en modo de inactividad.  Como lo muestra la imagen de abajo.

image

5. Paso siguiente cierre el navegador y seleccione en el menú de Windows, All programs, Microsoft Office Server, Asistente de configuración de Productos y Tecnologías de SharePoint.

6. Presione el botón  [Siguiente], luego le dará un aviso indicándole que pueda que necesite reiniciar los servicios de IIS y los Servicios de Administración y Temporización de SharePoint. Presione el botón de Yes o Sí, para continuar.

7. Seleccione la opción de desconectar de este conjunto de Servidores.

image

8. Le da un mensaje de advertencia, para continuar presione el botón de [Yes] o [Si].  Luego iniciará el proceso que consta de 4 pasos.  Tenga paciencia y espere que finalice dicho proceso.

9. Si todo se ejecuto correctamente le mostrará una ventana de configuración realizada correctamente para finalizar presione el botón de [Finalizar].

image

10. Ahora vamos a ejecutar el Management Studio de SQL-Server para realizar la operación.  Si es una instalación típica de SharePoint Server no debería ser muy similar a la imagen de abajo.

image 

11. Apunte las base de datos que necesita hacer la operación de “Detach” y proceda haciéndolo. Clic derecho sobre el nombre de la base de datos, Tasks, Detach, y finalice confirmándolo con el botón Ok. Haga este procedimiento con cada base de datos.

image

12. Finalizado este proceso manual, copie los archivos físicos de las bases de datos a la nueva ubicación.  La ubicación típica de los archivos físicos de la base de datos se encuentra en: “C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data”.  No se preocupe por copiarlas cuando estemos seguros que todo funcionó exitosamente las podremos borrar del origen.   En mi experiencia si solo movemos las base de datos puede sucedernos un caída de error o un error y luego ni en el origen o destino se encuentra la base de datos que se estaba copiando en el momento.  Mejor duplicamos el espacio momentáneamente mientras nos aseguramos que todo quedo bien.

13. Diríjase al nuevo servidor o instancia de SQL-Server y ejecute el SQL-Server Manage Studio.

14. Haga clic derecho sobre la capeta Databases y seleccione la opción Attach.. Presione el botón Add.  Ubique las bases de datos seleccione una, presione el botón Ok.  Y repita el procedimiento hasta que finalice con todas las bases de datos que copio.

image

15. Revise que la cuenta de dominio con que instaló SharePoint se autenticada la cuenta en SQL Server y tenga permiso de “owner” sobre las bases de datos “Atachadas”. En Security haga clic sobre el nombre o agregue la cuenta y revise los permisos de cada base de datos.

image

16.  Regrese al servidor donde esta instalado SharePoint y ejecute el Asistente de configuración de Productos y Tecnologías de SharePoint.  Presione el botón [Siguiente], le aparecerá el aviso sobre los servicio del IIS y SharePoint presione el botón [Yes] para continuar.

17.  Escriba el nombre el nuevo Servidor donde realizó la operación de Attach.. y presione el botón de “Recuperar nombres de base de datos” y en el nombre de usuario debe de colocar la misma cuenta con que instaló originalmente la granja de servidor (Esperando que sea una cuenta de dominio y no de acceso local, de lo contrario no podrá hacer la reconexión con éxito y aunque termine el proceso luego le indicará que la cuenta no se puede autenticar en el servidor de SQL-Server), escriba la clave y presione el botón [Siguiente] para continuar.

image

18. Le mostrará una venta para especificar el puerto y el modo de autenticación, deje los valores predeterminados o a su conveniencia. Y Presione el botón [Siguiente].

image

19. A continuación le mostrará una ventana de resumen de lo definido antes de iniciar el proceso.  Presione el botón [Siguiente] para continuar.

image

20.  Luego iniciará el proceso de 9 pasos, vaya a tomar un café y tenga paciencia y esperemos finalice con éxito.

21.  Si todo se realizó con éxito (y eso le deseo) le mostrará la siguiente imagen:

image

Presione el botón de [Finalizar]. 

22. Revise todas y cada una de las aplicaciones Web de SharePoint y cuando este seguro que todo esta funcionando correctamente, elimine las bases de datos del origen que copio al destino. Y relájese que ha terminado de migrar las bases de datos al nuevo servidor de SQL-Server o instancia. Vaya a la opción de Quesce Farm del Central Administración para desconectar a los usuarios que estén conectados y revise si sigue en modo de inactividad. Haga clic sobre el botón para activar la granja de servidores.

Hasta la próxima,

Manolo Herrera

martes, 28 de julio de 2009

Tip del día: Cuando delegamos la administración de un sitio en SharePoint no debemos olvidar asignar al usuario delegado como propietario del grupo

Una de las recomendaciones de Microsoft sobre la asignación de permisos efectivos en un sitio es evitar asignar un usuario directamente al sitio.  En vez de ello asignar el permiso a un grupo de SharePoint o del Directorio Activo. 

Mi recomendación es siempre hágalo sobre un grupo de SharePoint y luego al grupo de SharePoint si lo desea puede aplicarlo a un grupo del Directorio Activo, ya que se depende menos del departamento de Infraestructura o seguridad para aplicar los permisos en el portal.

Cada vez que creamos un grupo de SharePoint de forma predeterminada asigna al propietario del grupo con la cuenta que se creo el mismo.  Pero esto tiene sus implicaciones cuando estamos delegando la administración de determinado sitio a otras personas, ya que de forma predeterminada esta configurado que solo el propietario del grupo puede asignar usuarios y solo los miembros pueden consultar los miembros del grupo.  Como lo muestra la figura de abajo:

image

Que sucede entonces si definimos un grupo de Administradores con permisos de Control Total sobre el sitio image y agregamos al usuario como miembro de dicho grupo y no lo agregamos como propietario del grupo, si no que dejamos el usuario con el que creamos el grupo y tampoco modificamos las opciones de Quién puede ver la participación del grupo, y tampoco modificamos la opción predeterminada de Quién puede modificar la participación del grupo.  Dicho usuario aunque pertenezca a un grupo que tiene permisos en el sitio de Control total, no podrá agregar mas usuarios al grupo de administradores, y tampoco puede consultar quienes son sus miembros.

Cuál es la recomendación entonces?

Cada vez que cree un grupo dentro de SharePoint asegúrese de agregar al usuario propietario del grupo a la persona que se delegará la responsabilidad de administrar los permisos dentro de ese sitio. Como se muestra abajo:

image ´

Espero esto les sirva para aclarar como funciona el propietario del grupo y el cuidado que debe de tenerse con ello para evitar futuras complicaciones en la administración de los sitios y su delegación efectiva.

Hasta la próxima,

Manolo Herrera

Tip del día: Aplique permisos a los elementos que despliega una página maestra en SharePoint

Esta es una requerimiento común que encontrado en los administradores de portales. Necesitan que no muestra ciertos elementos a usuarios visitantes o de lectura como por ejemplo los Sitios de Mapa, la opción de Ver todo el contenido del sitio, etc. La pregunta es cómo hacerlo?.

La buena notica es que dentro de el modelo de objetos de SharePoint hay una clase que nos permite hacer esto llamada SPSecurityTrimmedControl. Esta clase condiciona el contenido que mostrará en el navegador basado en el permiso mínimo definido y comparado contra los permisos del usuario actual .

La sintaxis de esta clase es la siguiente:

<SharePoint:SPSecurityTrimmedControl PermissionsString="AddAndCustomizePages, ManageLists" runat="server">
<%--content %>
</SharePoint:SPSecurityTrimmedControl>

Los posibles valores de PermissionsString puede encontrarlos en el Windows SharePoint Services 3.0 SDK en SPBasePermissions Enumeration . pero para los que quieren ahorrar tiempo abajo les imprimo toda la tabla.

Donde podemos aplicarla? En cualquier lugar de la página maestra siempre y cuando respetemos las etiquetas que estamos encerrando. Ese es le cuidado que debemos de tener.

Ejemplos donde podemos aplicarlo:

Este segmento de código solo muestra la barra horizontal que aparece hasta arriba en SharePoint que muestra el mapa del sitio solo para los usuarios que tiene el permiso Administrar un Web Site.

<!-- Top Site Map -->
<asp:ContentPlaceHolder ID="PlaceHolderGlobalNavigationSiteMap" runat="server">
<sharepoint:spsecuritytrimmedcontrol runat="server" permissionsstring="ManageWeb">

<asp:SiteMapPath SiteMapProvider="SPSiteMapProvider" id="GlobalNavigationSiteMap" RenderCurrentNodeAsLink="true" SkipLinkText="" NodeStyle-CssClass="ms-sitemapdirectional" runat="server"/>
</sharepoint:spsecuritytrimmedcontrol>
</asp:ContentPlaceHolder>

Otra lugar útil donde podemos aplicar este control es en un sitio publico en el internet de limitado acceso no deseamos que el usuario visitante tenga la barra de búsqueda y el logo del encabezado que se encuentra en la página maestra. Tendríamos que aplicarla de esta forma:

<!-- Encabezado logo y search -->
<sharepoint:spsecuritytrimmedcontrol runat="server" permissionsstring="ManageWeb">
<tr>
<td class="ms-globalTitleArea">
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td id="GlobalTitleAreaImage" class="ms-titleimagearea">
<sharepoint:sitelogoimage id="onetidHeadbnnr0" logoimageurl="/_layouts/images/titlegraphic.gif"
runat="server" />
</td>
<td class="ms-sitetitle" width="100%">
<asp:ContentPlaceHolder ID="PlaceHolderSiteName" runat="server">
<h1 class="ms-sitetitle">
<sharepoint:splinkbutton runat="server" navigateurl="~site/" id="onetidProjectPropertyTitle">
<SharePoint:ProjectProperty Property="Title" runat="server" />
</sharepoint:splinkbutton>
</h1>
</asp:ContentPlaceHolder>
</td>
<td style="padding-top: 8px;" valign="top">
<asp:ContentPlaceHolder ID="PlaceHolderSearchArea" runat="server">
<sharepoint:delegatecontrol runat="server" controlid="SmallSearchInputBox" />
</asp:ContentPlaceHolder>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td id="onetIdTopNavBarContainer" width="100%" class="ms-bannerContainer">
<asp:ContentPlaceHolder ID="PlaceHolderTopNavBar" runat="server">
<table class="ms-bannerframe" border="0" cellspacing="0" cellpadding="0" width="100%">
<tr>
<td nowrap valign="middle">
</td>
<td class="ms-banner" width="99%" nowrap id="HBN100">
<asp:ContentPlaceHolder ID="PlaceHolderHorizontalNav" runat="server">
<sharepoint:aspmenu id="TopNavigationMenu" runat="server" datasourceid="topSiteMap"
enableviewstate="false" accesskey="<%$Resources:wss,navigation_accesskey%>" orientation="Horizontal"
staticdisplaylevels="2" maximumdynamicdisplaylevels="1" dynamichorizontaloffset="0"
staticpopoutimageurl="/_layouts/images/menudark.gif" staticpopoutimagetextformatstring=""
dynamichoverstyle-backcolor="#CBE3F0" skiplinktext="" staticsubmenuindent="0"
cssclass="ms-topNavContainer">
<StaticMenuStyle/>
<StaticMenuItemStyle CssClass="ms-topnav" ItemSpacing="0px"/>
<StaticSelectedStyle CssClass="ms-topnavselected" />
<StaticHoverStyle CssClass="ms-topNavHover" />
<DynamicMenuStyle BackColor="#F2F3F4" BorderColor="#A7B4CE" BorderWidth="1px"/>
<DynamicMenuItemStyle CssClass="ms-topNavFlyOuts"/>
<DynamicHoverStyle CssClass="ms-topNavFlyOutsHover"/>
<DynamicSelectedStyle CssClass="ms-topNavFlyOutsSelected"/>
</sharepoint:aspmenu>
<sharepoint:delegatecontrol runat="server" controlid="TopNavigationDataSource">
<Template_Controls>
<asp:SiteMapDataSource
ShowStartingNode="False"
SiteMapProvider="SPNavigationProvider"
id="topSiteMap"
runat="server"
StartingNodeUrl="sid:1002"/>
</Template_Controls>
</sharepoint:delegatecontrol>
</asp:ContentPlaceHolder>
</td>
<td class="ms-banner">
&nbsp;&nbsp;
</td>
<td valign="bottom" align="right" style="position: relative; bottom: 0; left: 0;">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td>
<table height="100%" class="ms-siteaction" cellpadding="0" cellspacing="0">
<tr>
<td class="ms-siteactionsmenu" id="siteactiontd">
<sharepoint:siteactions runat="server" accesskey="<%$Resources:wss,tb_SiteActions_AK%>"
id="SiteActionsMenuMain" prefixhtml="&lt;div&gt;&lt;div&gt;" suffixhtml="&lt;/div&gt;&lt;/div&gt;"
menunotvisiblehtml="&amp;nbsp;">
<CustomTemplate>
<SharePoint:FeatureMenuTemplate runat="server"
FeatureScope="Site"
Location="Microsoft.SharePoint.StandardMenu"
GroupId="SiteActions"
UseShortId="true"
>
<SharePoint:MenuItemTemplate runat="server" id="MenuItem_Create"
Text="<%$Resources:wss,viewlsts_pagetitle_create%>"
Description="<%$Resources:wss,siteactions_createdescription%>"
ImageUrl="/_layouts/images/Actionscreate.gif"
MenuGroupId="100"
Sequence="100"
UseShortId="true"
ClientOnClickNavigateUrl="~site/_layouts/create.aspx"
PermissionsString="ManageLists, ManageSubwebs"
PermissionMode="Any" />
<SharePoint:MenuItemTemplate runat="server" id="MenuItem_EditPage"
Text="<%$Resources:wss,siteactions_editpage%>"
Description="<%$Resources:wss,siteactions_editpagedescription%>"
ImageUrl="/_layouts/images/ActionsEditPage.gif"
MenuGroupId="100"
Sequence="200"
ClientOnClickNavigateUrl="javascript:MSOLayout_ChangeLayoutMode(false);"
/>
<SharePoint:MenuItemTemplate runat="server"
id="MenuItem_Settings"
Text="<%$Resources:wss,settings_pagetitle%>"
Description="<%$Resources:wss,siteactions_sitesettingsdescription%>"
ImageUrl="/_layouts/images/ActionsSettings.gif"
MenuGroupId="100"
Sequence="300"
UseShortId="true"
ClientOnClickNavigateUrl="~site/_layouts/settings.aspx"
PermissionsString="EnumeratePermissions,ManageWeb,ManageSubwebs,AddAndCustomizePages,ApplyThemeAndBorder,ManageAlerts,ManageLists,ViewUsageData"
PermissionMode="Any" />
</SharePoint:FeatureMenuTemplate>
</CustomTemplate>
</sharepoint:siteactions>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</asp:ContentPlaceHolder>
</td>
</tr>
</sharepoint:spsecuritytrimmedcontrol>
<!-- Fin de Encabezado logo y search –>

Otro caso en el Mapa del sitio de la posición actual nos da la posibilidad de navegar hacia atrás de los sitios, algo no deseable cuando deseamos restringir la navegación al usuario con permisos bajos de autorización.

<!-- SiteMap de en medio de la página-->
<sharepoint:spsecuritytrimmedcontrol runat="server" permissionsstring="ManageWeb">
<tr>
<td valign="top" class="ms-titlearea">
<asp:ContentPlaceHolder ID="PlaceHolderTitleBreadcrumb" runat="server">
<asp:SiteMapPath SiteMapProvider="SPContentMapProvider" ID="ContentMap" SkipLinkText=""
NodeStyle-CssClass="ms-sitemapdirectional" runat="server" />
&nbsp;
</asp:ContentPlaceHolder>
</td>
</tr>
</sharepoint:spsecuritytrimmedcontrol>
<!-- End SiteMap de en medio de la página—>

Y finalmente lo que la mayoría de administradores de sitios les parece que no debería estar permitido que usuarios tengan acceso a la opción de Ver todo el contenido del sitio. Aquí abajo los dejo con el segmento de código:

<!-- View All Site Content -->
<sharepoint:spsecuritytrimmedcontrol runat="server" permissionsstring="ManageWeb">
<div class="ms-quicklaunchheader">

<SharePoint:SPLinkButton id="idNavLinkViewAll" runat="server" NavigateUrl="~site/_layouts/viewlsts.aspx" Text="<%$Resources:wss,quiklnch_allcontent%>" AccessKey="<%$Resources:wss,quiklnch_allcontent_AK%>"/>

</div>
</sharepoint:spsecuritytrimmedcontrol>

En estos ejemplos son de casos reales y puede aplicarse diferentes niveles de permisos o combinados. Todo lo que agregues en permissionsstrings el usuario debe de cumplirlo.

Los dejo con la tabla de permisos, hasta la próxima,

Manolo Herrera

SPBasePermissions Enumeration Table

Member name

Description
AddAndCustomizePagesAdd, change, or delete HTML pages or Web Part Pages, and edit the Web site using a Windows SharePoint Services–compatible editor.
AddDelPrivateWebPartsAdd or remove personal Web Parts on a Web Part Page.
AddListItemsAdd items to lists, add documents to document libraries, and add Web discussion comments.
ApplyStyleSheetsApply a style sheet (.css file) to the Web site.
ApplyThemeAndBorderApply a theme or borders to the entire Web site.
ApproveItemsApprove a minor version of a list item or document.
BrowseDirectoriesEnumerate files and folders in a Web site using Microsoft Office SharePoint Designer 2007 and WebDAV interfaces.
BrowseUserInfoView information about users of the Web site.
CancelCheckoutDiscard or check in a document which is checked out to another user.
CreateAlertsCreate e-mail alerts.
CreateGroupsCreate a group of users that can be used anywhere within the site collection.
CreateSSCSiteCreate a Web site using Self-Service Site Creation.
DeleteListItemsDelete items from a list, documents from a document library, and Web discussion comments in documents.
DeleteVersionsDelete past versions of a list item or document.
EditListItemsEdit items in lists, edit documents in document libraries, edit Web discussion comments in documents, and customize Web Part Pages in document libraries.
EditMyUserInfoAllows a user to change his or her user information, such as adding a picture.
EmptyMaskHas no permissions on the Web site. Not available through the user interface.
EnumeratePermissionsEnumerate permissions on the Web site, list, folder, document, or list item.
FullMaskHas all permissions on the Web site. Not available through the user interface.
ManageAlertsManage alerts for all users of the Web site.
ManageListsCreate and delete lists, add or remove columns in a list, and add or remove public views of a list.
ManagePermissionsCreate and change permission levels on the Web site and assign permissions to users and groups.
ManagePersonalViewsCreate, change, and delete personal views of lists.
ManageSubwebsCreate subsites such as team sites, Meeting Workspace sites, and Document Workspace sites.
ManageWebGrant the ability to perform all administration tasks for the Web site as well as manage content. Activate, deactivate, or edit properties of Web site scoped Features through the object model or through the user interface (UI). When granted on the root Web site of a site collection, activate, deactivate, or edit properties of site collection scoped Features through the object model. To browse to the Site Collection Features page and activate or deactivate site collection scoped Features through the UI, you must be a site collection administrator.
OpenAllow users to open a Web site, list, or folder to access items inside that container.
OpenItemsView the source of documents with server-side file handlers.
UpdatePersonalWebPartsUpdate Web Parts to display personalized information.
UseClientIntegrationUse features that launch client applications; otherwise, users must work on documents locally and upload changes.
UseRemoteAPIsUse SOAP, WebDAV, or Microsoft Office SharePoint Designer 2007 interfaces to access the Web site.
ViewFormPagesView forms, views, and application pages, and enumerate lists.
ViewListItemsView items in lists, documents in document libraries, and view Web discussion comments.
ViewPagesView pages in a Web site.
ViewUsageDataView reports on Web site usage.
ViewVersionsView past versions of a list item or document.

jueves, 23 de julio de 2009

Tip del día: Agrega al administrador del Sitio como tu primer contacto en SharePoint

En un ambiente de colaboración como lo es un portal de SharePoint, uno de los hitos importantes es la administración del contenido del portal y una forma de acercarnos a las necesidades de los usuarios del portal es proveyendo el contacto del administrador del sitio. Que en un portal típico no es una sola persona sino que dependiendo de la forma que se organizó tendrán un administrador por departamento por área funcional por estrategia corporativa, y esto representa dentro de la taxonomía de SharePoint un sitio que tendrá sus propios elementos, librerías, listas ,etc.  A las cuales el administrador utilizará para proveer información de interés a la comunidad de usuarios a la que sirve.

Para este ejemplo incorporaremos una función de java script dentro de los archivos js que contiene SharePoint para mostrar la presencia del usuario al sitio.  La función es IMNRC(“correo electrónico”) que al parecer invoca un control Activex llamado name.DLL (algo que no pude corroborar, pero le paso la info) en la máquina del cliente(Esta es la ruta donde encontré dicho archivo c:\Program Files\Microsoft Office\Office12\NAME.DLL), este viene a partir de Office 2003.  Para los curiosos esta función esta dentro de el archivo ows.js que esta ubicada en el directorio 12 hive SharePoint /_layouts/1033 o /_layouts/3082 dependiendo de la versión del lenguaje con que instaló SharePoint.

Para este ejemplo puedes utilizar un elemento Web de SharePoint llamado Editor de Contenido Web o Content Editor Web Part.

Ahora veamos un ejemplo y luego lo comentamos:

   1:  <span>


   2:      <a href=”mailto:micorreo@demo.com” id="owneremail"      


   3:           title=micorreo@demo.com>Manolo Herrera    


   4:     </a>


   5:      &nbsp;


   6:      <img border="0" width="12" height="12"        


   7:         src="/_layouts/images/imnhdr.gif" alt=""        


   8:         onload="IMNRC('micorreo@demo.com')"        


   9:         name="imnmark"        


  10:         ShowOfflinePawn="1"        


  11:         id="5f30ebad_1592_4118_a3c7_e1b6a6990640,type=sip" />


  12:  </span> 




La función IMNRC debe de estar entre una etiqueta <span/> y para este ejemplo agregamos un vínculo para invocar el correo en la máquina del cliente para que lo envié al administrador y una etiqueta <img/> de html para desplegar la imagen de offline del usuario entre tanto de activa al conectarse que funciona en conjunto con la opción ShowOffLinePawn que es opcional. 



Algo importante es el id= este debe de ser único y no puede repetirse.  Puedes utilizar el generador de GUID de Visual Studio GUIDGen.exe o el que viene en el SDK del cualquier versión del .Net Framework.



Podríamos reemplazar la etiqueta <a href=”mailto:” ></a> por el link del sitio personal del usuario. Como por ejemplo: <a href=”http://myserver:2020/Personal/dominio_manolo_herrera”>Manolo Herrera </a>



Otra funcionalidad oculta de esta función es el comportamiento de arrastrar el ratón enfrente de la imagen nos mostrará un menú de contexto para enviar correo, y otras opciones mas que puedes descubrirlas al utilizarlo.



Referencias:



http://www.codeplex.com/features (Nombre del usuario basado en un lista)



http://graegert.com/?p=748 (Solución un elemento web personalizado que incorporar esta funcionalidad basado en el profile del usuario.)



En resumen:



No olvide la etiqueta <span>, el <id> y la cuenta del correo del usuario para que pueda identificar al usuario.  Y lo mas importante incorpore funcionalidades que aumente la colaboración y productividad de sus usuarios.



Hasta la próxima,



Manolo Herrera

martes, 21 de julio de 2009

Tip del día: Modo de edición en un elemento Web Personalizado de SharePoint

Muy conocidos por todos, utilizado por pocos.  Programáticamente podemos controlar como se comporta un elemento Web Personalizado.

En donde mas te parezca puedes validar en que modo esta tu elemento Web pero un lugar efectivo de utilizar es en el evento CreateChildControls()

   1:  if (WebPartManager.DisplayMode == WebPartManager.BrowseDisplayMode) {


   2:   


   3:  …//tu codigo..


   4:   


   5:  }




Arriba en el ejemplo valido que haga todo lo que debe de hacer si ya no esta en modo de Edición, bueno en ningún modo mas que en el BrowseDisplayMode. 



Según el SDK de WSS los posibles valores son:



BrowseDisplayMode 
CatalogDisplayMode


ConnectDisplayMode


DesignDisplayMode


EditDisplayMode



Por sus nombres puedes asumir su funcionamiento o sino puede encontrar la información en: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.webparts.webpartmanager_fields.aspx



Hasta la próxima,



Manolo Herrera