Monday, December 17, 2012

Asignar múltiples tareas a un grupo de usuarios desde un workflow en SharePoint 2010

Asignar múltiples tareas a un grupo de usuarios desde un workflow en SharePoint 2010
Hace unos días me encontré con un requerimiento que solicitaba asignar tareas a distintos usuarios a partir de la carga de un nuevo documento en una biblioteca de documentos de SharePoint. Básicamente el requerimiento de negocios decía que cada vez que un administrador subiese un documento a la biblioteca X, debía asignarse a cada usuario de un grupo Y una tarea de lectura.
En lo que primero que pensé es que debía hacerlo con un workflow, pero cuál de las acciones se ajustaría? Así que me puse a googlear un poco y descubrí discusiones como esta http://sharepoint.stackexchange.com/questions/11265/assign-tasks-to-multiple-people-with-multiple-completions y esta http://sharepoint.stackexchange.com/questions/11265/assign-tasks-to-multiple-people-with-multiple-completions las cuales me orientaron un poco en mi solución.

Lo que decidí hacer entonces es lo siguiente:

1) Crear una lista personalizada llamada Lectores (la cual me va a servir para poder luego decirle al workflow a quién tiene que asignarle tareas de lectura), que contiene los siguientes campos: titulo (Una linea de texto) y personas (Persona o grupo, teniendo en cuenta ademas permitir sólo la selección de personas y que el campo a mostrar deberá ser cuenta). Luego cargue un registro con el valor Todos como título y en personas  cargue a cada uno de mis lectores (los cuales son usurios de AD), ese registro por ser el primero tomó el valor de ID 1.

2) Crear una lista de tareas llamada Lecturas Pendientes (Donde se almacenarán las tareas asignadas a cada usuario del grupo Y).

3) Luego con SharePoint Designer edité la biblioteca de documentos X agregando un workflow llamado Crear Tareas de Lectura que se ejecutará automáticamente cuando se suba un documento a la biblioteca de documentos.
Edité el workflow incluyendo una acción de tareas llamada Iniciar proceso de tareas personalizado, relacionado a su vez con la lista de tareas Lecturas Pendientes.

La idea es relacionar el elemento actual, es decir el documento a subir en la Biblioteca de Documentos X, la lista de tareas Lecturas Pendientes y la lista de Lectores. Así que seleccionamos a los participantes del proceso de tareas, en el contexto del workflow, teniendo en cuenta de que la acción se realice para todos los participantes a la vez en paralelo, seleccionando la opción Todos a la vez (paralelo).


Como verán aquí seleccionamos como origen de datos a los Lectores (nuestra lista de usuarios) y de la misma el campo personas que contiene a nuestros usuarios y los devolvemos como usuarios de Windows (Nombres de inicio de sesión, delimitados por punto y comas). Pero el detalle es que lo que necesitamos es buscar en este conjunto de registros que nos devuelve para lo cual utilizo el ID del registro de lista que para mi caso era el 1 ya que sólo contenía un registro donde alojé a todos los usuarios, separados por punto y coma. Esto posteriormente me va a permitir cambiar agregando o quitando personas a mi grupo según se requiera, con sólo editar el registro de lista.

Al final la selección debería ser la como la siguiente:
Y eso es todo ahora cada vez que carguemos un documento en la biblioteca X, se generará una tarea para cada usuario del campo Personas de la lista Lectores, en la lista de tares Lecturas Pendientes.

Nota: Hay varias cosas que hice como personalizar las vistas para la lista de lecturas pendientes, y demás detalles que obvie en este post, pero no son relevantes.

Espero les sea de utilidad como siempre.



Tuesday, December 04, 2012

Cuentas Administradas SharePoint 2010 object reference not set to an instance of an object - error

Cuentas Administrdas y Object reference not set to an instance of an object
Al habilitar el cambio de contraseña automático cuando creamos una cuenta administrada en SharePoint 2010 es común encontrarse con un error del tipo:

Acceso denegado. Sólo los administradores de equipos pueden crear definiciones de trabajo del servicio de administración de tipo: Microsoft.SharePoint.Administration.SPGeneratePasswordJobDefinition, Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral....
Es probable que esto ocurra por el nivel de impersonalización que todavía debo entender! http://msdn.microsoft.com/en-us/library/ms681722.aspx

Como les comentaba esto sucede sólo al crear una cuenta seteando la propiedad Habilitar el cambio de contraseña automático.

Esto ocasiona posteriormente el siguiente error al tratar de acceder a Configurar cuentas administradas de la Administración Central de SharePoint.

Luego entonces lo que descubrí googleando un poco es que si quitamos la opción de Habilitar el cambio de contraseña automático a todas las cuentas en conflicto el problema se resuelve y posterior podríamos volver a setearla sin problemas.
Un comando de PS para que vean cómo hacerlo:

Get-SPManagedAccount #Muestra todas las cuentas administradas.
$ma=Get-SPManagedAccount -Identity "domain\spaccount"
$ma
$ma.AutomaticChange=$false
$ma.Update()
$ma

Otra solución es crear las cuentas sin la opción Habilitar el cambio de contraseña automático y una vez creada setear dicha propiedad desde la Administración Central o desde PS.

Todavía tengo que probar si el cambio de contraseñas se realiza realmente para estas cuentas administradas.

Espero como siempre les sea útil.

Fuantes: 
http://social.technet.microsoft.com/Forums/en-US/sharepointadminprevious/thread/406f1817-d687-49d7-9691-26e487fb5577
http://smallcitydesign.com/object-reference-not-set-to-an-instance-of-an-object-when-creating-a-managed-account/
http://msdn.microsoft.com/en-us/library/ms681722.aspx