lunes, 31 de enero de 2011

Variante al acceder UserPofileManager vía código en SharePoint 2010

 

Para obtener los perfiles de usuario de SharePoint Server utilizamos la clase UserPofileManager y en 2007 pasábamos una instancia de la clase ServerContext que representaba los servicios compartidos de SharePoint 2007 o SSP.   Pero en 2010 ya no existe mas SSP ahora cada servicio es independiente del otro y esto también afecta la forma en que escribimos el código en 2010. 

Ahora cuando deseamos utilizar la clase ServerContext en 2010 a través de el ensamblado Microsoft.Office.Server.dll nos muestra la imagen de abajo::

image

Y cuando la pasamos al UserProfileManager también nos previene que ya es una sentencia obsoleta.

image

Y nos indica que utilicemos la clase SPServiceContext.

Entonces la nueva forma de hacerlo no varía mucho de la anterior pero si tiene un impacto importante en los recursos utilizados y en el tiempo que demorará la solicitud de nuestro código.

Ejemplo completo de la forma en que se hacía en  2007 :

image

La nueva forma de hacerlo sería la siguiente:

image

PropertyConstants es una clase que nos permite acceder los campos de los perfiles de usuario no importante el lenguaje con que esta instalado SharePoint y esta disponible en ambas versiones y es mejor utilizarla en vez de utilizar un string que varía de versión del lenguaje en que esta instalado SharePoint, ya que en inglés sería “WorkEmail” y en español “Correo del Trabajo”, por ejemplo.

La recomendación será que nuevos desarrollos o en los cambios que necesitemos hacer vayamos migrando el código dejando de utilizar ServerContext y ahora utilizar SPServiceContext.

Hasta la próxima!, SharePoint4Fun!,

Manolo Herrera

martes, 4 de enero de 2011

Este nuevo año me trajo un nuevo y liviano contenedor de control de inversión para SharePoint

Hace algún tiempo estaba con la intención de desarrollar un IoC (Inversion of Control) o DI (Dependency Injection) para el desarrollo de elementos Web dentro de SharePoint, anteriormente lo hacía manual el acoplamiento da cada uno de los elementos, pero este descanso de fin de año me sirvió para desarrollarlo finalmente. Y estoy satisfecho de lo realizado.

Es muy liviano solo ocupa 10 Kb (Lo he publicado en codeplex para contribuir con la comunidad tecnológica y lo bautice como IoC4Fun) y consta de 2 clases el contenedor y el Registrador o TypeRegister como le llama a la clase que registra las dependencias dentro del contenedor.

Quiero agradecer a la contribución de Ken Egozi por si su artículo sobre construir un contenedor en 33 líneas en 15 minutos me sirvió de ayuda para desarrollar mi propio contendedor de inyección de dependencia. 

A diferencia de Ken le invertí un poco de mas de 15 minutos y el resultado fue una herramienta muy liviana, que hace lo necesario y no estoy pegado a ninguna plataforma o framework fuera del .Net framework 3.5. 

A continuación enumeraré las funcionalidades que fluí agregando:

En vez de utilizar un diccionario para registrar los tipos, utilice una lista genérica de tipo TypeRegister.

Agregue la funcionalidad para localizar las propiedades y no solo parámetros del constructo y que resolviera las dependencias basado en parámetros definidos al momento de ser registrados.

image

Agregue la opción Share para compartir la misma instancia entre dependencias.

image

Que el contenedor aceptara una la instancia de una clase ya creada en memoria necesaria para aplicar el patrón Passive View al momento de inyectar la instancia de la página en el presentador.

image

Y por último agregué la opción para no buscar ninguna dependencia (DisposeAll) o que permitiera dependencias nulas por si una propiedad no fuese requerida o es parte de la lógica de la clase que la contiene (AllowNull).

image

Al final tenemos una resultado elegante, práctico y fácil de implementar:

image

Algo que me agrado fue que no agregue código intrusivo a las dependencias aunque con sus respectivas limitaciones que no afectan para las soluciones que desarrollo como la limitación de solo tener un constructor para que sepa como resolverlo el contenedor.  Pero gané un código muy limpio como muestro en la imagen de abajo:

image

Otra buena funcionalidad fue revisar que no se registrará mas de una vez un los mismos tipos, a través de Linq fue algo muy sencillo.

image

y la posibilidad de definir diferentes implementaciones de una misma interfaz como el caso del Logger en el ejemplo:

image

Bueno amigo lector le pido viste codeplex el proyecto IoC4Fun y hágame llegar sus comentarios.

Contribute4Fun!,

Manolo Herrera

miércoles, 22 de diciembre de 2010

Conector Social de Outlook se conecta a red Social Empresarial en SharePoint y otras redes sociales conocidas

Ahora puedes tener desde el Outlook 2010 un conector social que permitirá desde mas cerca monitorear las actividades de tus socios, amigos y conocidos gracias a este conector de Redes sociales.

Además puedes desarrollar proveedores para otras redes sociales a través del Kit de Desarrollo o SDK.

Las proveedores existes a este momento son:

LinkedIn

 

myspace

Facebook

 

Windows Live

 

 

 

Además del predeterminado para la red Social de la Empresa:

Para Linkedin solo esta disponible la versión de 32 bits a este fecha y si tienes Office 64 no vas a poder utilizarlo.  Pero pienso muy pronto estará disponible.

En Outlook luce así:

image

Para configurar la conexión a una red social solo debes dentro del panel de Personas: Selecciona View, People Pane , Account Settings

image

Luego seleccionas el proveedor que para mi Outlook tengo SharePoint y Facebook

 image

Ingresas el url, para el caso de SharePoint, el usuario y la clave.

image

En ambos casos asociara tu cuenta de Outlook con la cuenta de tu red social la de amigos en caso de Facebook, la de la Empresa en caso de SharePoint.

BeConected4Fun!,

Manolo Herrera

martes, 21 de diciembre de 2010

Cómo hacer para que se actualice el suministro de noticias en mi perfil en SharePoint 2010

Esto en inglés es mucho mas fácil de ubicar y se describe como:

image

Pero en español es un poco confuso encuentro con el nombre:

image

Y dependiendo de este trabajo con que frecuencia se ejecuta así veremos las actividades en nuestro perfil en la sección de Suministro de noticias o  My news feeds.

Para configurar la periodicidad de la ejecución del trabajo mencionado hacemos clic sobre el y nos mostrará las siguientes opciones:

image

Cámbiela según su configuración y necesidad y presione el botón Aceptar.

Para configurar que tipo de noticias deseamos seguir dentro de Suministro de noticias en nuestro perfil hacemos clic sobre Configuración de suministro de noticias o Feed Settings.

Alli seleccionamos el tipo de contenido que deseamos ver en nuestro suministro de noticias.

image

El resultado si tiene noticias es el siguiente:

image

SocialComputing4Fun!,

Manolo Herrera

Cómo corregir el error MOSS MA not found al intentar crear la conexión del Directorio Activo en Perfil de Usuarios en SharePoint 2010

Confirmado por muchas publicaciones y por mi persona, al enfrentarme también a este suceso.  El error se debe primordialmente a que alguno de los servicios de ForeFront no esta iniciado o necesita que se reinicie nuevamente.

Los servicios son:

Forefront Identity Manager Service
ForeFront Identity Manager Synchronization Service

Lo que debe de hacer es reiniciarlos cada uno de ellos y el problema desaparece.

Referencia de la solución encontrada:

http://social.technet.microsoft.com/forums/en-us/sharepoint2010setup/thread/CF35F233-C6A9-440A-AA61-8BE190782FCC

ForeFront4Fun!,

Manolo Herrera

Error de importación de Perfiles de Usuario en SharePoint 2010

Muy probablemente sea un error de permisos.  Y lo curioso es que en la misma cuenta utilizada para SharePoint 2007 que si sincroniza con el AD, no funciona con SharePoint 2010.   Al parecer requiere de un permiso especial en SP 2010 y es Replicating Directory Changes.  Pero antes de que lleguemos a la solución del problema veamos los síntomas y errores.

 

Síntomas:

En el visor de eventos le muestra el evento número 6050

Log Name:      Application
Source:        FIMSynchronizationService
Date:          21/10/2010 10:15:01 a.m.
Event ID:      6050
Task Category: Management Agent Run Profile
Level:         Error
Keywords:      Classic
User:          N/A
Computer:      full server-name


o en los SharePoint Logs muestra el siguiente mensaje:

Usage Logging Importer: Exception occured while retrieving profiling information for the user=[username]: Microsoft.Office.Server.UserProfiles.UserNotFoundException: Error al recuperar el perfil de usuario.     at Microsoft.Office.Server.UserProfiles.UserProfileCache.GetUserData(UserProfileManager objManager, Nullable`1 recordId, Guid gAcct, String strAcct, Byte[] bSid, String strEmail, Boolean doNotResolveToMasterAccount)     at Microsoft.Office.Server.UserProfiles.UserProfile.RetrieveUser(String strAcct, Guid gAcct, Byte[] bSid, Nullable`1 recordId, Boolean doNotResolveToMasterAccount, Boolean loadFullProfile)     at Microsoft.Office.Server.UserProfiles.UserProfile..ctor(UserProfileManager objManager, String strAcct, Boolean doNotResolveToMasterAccount, Boolean forceU...    f9f0282c-2eb2-4f50-b258-ee6767c3762b

Para confirmar si es un problema de permisos revise los logs de sincronización para ello vaya a:

C:\Program Files\Microsoft Office Servers\14.0\Synchronization Service\UIShell

Y ejecute la siguiente herramienta:

miisclient.exe

Haga clic sobre el error como se muestra en la imagen de abajo:

image

Si el error es el 8453 es seguro que es por permisos.

image

Para ello necesita que la cuenta que utiliza para sincronizar el AD con los perfiles de usuario de SharePoint tengan el permiso de replicar los cambios en el AD.  Para ello siga las siguientes instrucciones:

1.Open the Active Directory Users and Computers snap-in
2.On the View menu, click Advanced Features.
3.Right-click the domain object, such as “company.com”, and then click Properties.
4.On the Security tab, if the desired user account is not listed, click Add; if the desired user account is listed, proceed to step 7.
5.In the Select Users, Computers, or Groups dialog box, select the desired user account, and then click Add.
6.Click OK to return to the Properties dialog box.
7.Click the desired user account.
8.Click to select the Replicating Directory Changes check box from the list.
9.Click Apply, and then click OK.
10.Close the snap-in.

Eso es todo, y eso fue mi experiencia en solución al problema gracias a las siguientes referencias importantes:

http://www.go4answers.com/Example/user-profile-synchronization-issues-61019.aspx

http://themossblog.com/articles/sharepoint-2010-user-profile-synchronization-failing-event-id-6050/

http://blog.jussipalo.com/2010/02/sp2010-fimsynchronizationservice-errors.html

Otras referencias encontradas que hablan como configurar los perfiles de usuario:

http://www.harbar.net/articles/sp2010ups.aspx

http://technet.microsoft.com/en-us/library/cc663011.aspx

http://technet.microsoft.com/en-us/library/ee721049.aspx

Search&Solve4Fun!,

Manolo Herrera

lunes, 13 de diciembre de 2010

Como cambiar el bloqueo de apretura de PDF´s en SharePoint 2010

Dentro los cambios en SharePoint 2010 está la restricción de manejo de archivos en el navegador.  Esto entre otras cosas nos limita a primero guardar el PDF en nuestra máquina y luego abrir el documento, comportamiento no deseado por la mayoría de usuarios.  Esto es a nivel Aplicación Web y por ende debe de modificarse en la Administración Central  de SharePoint 2010.

Haga clic en Aplicaciones Web.

Seleccionar Aplicacion Web y luego Seleccionar Configuracion General

Sobre la aplicación Web y no sobre el link de la aplicación haga clic izquierdo con el ratón y seleccione Configuración General.

ConfiguracionWeb

Le desplegará un menú y seleccione nuevamente Configuración general.

Permisivo

Haga la búsqueda de la opción Manejo de archivos del explorador y luego haga clic sobre la opción Permisivo.  Para finalizar haga clic en el botón aceptar que aparece hasta abajo o arriba.

Y Listo el comportamiento variara un poco de explorador a explorador pero quitará el problema que solo le deja guardar el documento PDF.

Referencia encontrada:

http://social.msdn.microsoft.com/Forums/en/sharepoint2010general/thread/3e5b820f-9183-414e-a6f8-ec7d0e93d299

Configure4Fun!,

Manolo Herrera