Is task assigned to user

SP2013


Bonjour à tous,

Aujourd’hui je vais vous parler d’un bout de code que j’ai utilisé dernièrement afin de savoir si une tâche de workflow est assignée à la personne l’ayant créé.

Le code suivant permet de savoir si une tâche est assignée au créateur de la tâche ou à un groupe dont il fait partie, même si il n’est pas ajouté nommément dans le groupe SharePoint mais via un groupe Active Directory.

Tout d’abord, on commence par récupérer la valeur des champs “Created by” et “Assigned To”


SPFieldUser authorUserField = (SPFieldUser)task.Fields.GetField(“Author”);

SPFieldUserValue authorUserFieldValue = (SPFieldUserValue)authorUserField.GetFieldValue(task[“Author”].ToString());



SPFieldUser assignedUserField = (SPFieldUser)task.Fields.GetField(“AssignedTo”);

SPFieldUserValue assignedUserFieldValue = (SPFieldUserValue) assignedUserField.GetFieldValue(task[“AssignedTo”].ToString());

 

On teste en premier si le champ “assigned to” contient un user

If (assignedUserFieldValue.User!=null)

{

SPUser assignedUser = assignedUserFieldValue.User;

isAssignedToUser =(assignedUser.ToString() == authorUserFieldValue.User.ToString());

}

Si ce n’est pas le cas  on teste si le groupe contient le user voulu.

Pour cela, nous allons utiliser la fonction « SPGroup.ContainsCurrentUser » qui fonctionne également si le user fait partie d’un groupe active directory ajouté au groupe SharePoint !

 

Pour pouvoir utiliser cette fonction, nous allons utiliser le usertoken de l’utilisateur voulu.

 

Voici le code permettant de faire cela :

isAssignedToCurrentUser=false;

SPGroup assignedGroup = task.Web.SiteGroups.GetByID(assignedUserFieldValue.LookupId) ;

SPSecurity.RunWithElevatedPrivileges( delegate

{

using(SPSite elevatedSite = new SPSite (task.Web.Site.ID))

{

using(SPWeb elevatedWeb = elevatedSite.OpenWeb(task.Web.ID))

{

SPuser currentUser = elevatedWeb.EnsureUser(authorUserFieldValue.User.LoginName);

If (currentUser !=null)

{

using (SPSite currentUserSite = new SPSite(task.web.Site.ID,currentUser.UserToken))

{

using (SPweb currentUserweb = currentUserSite.OpenWeb(task.Web.ID))

{

isAssignedToCurrentUser=assignedGroup.ContainsCurrentUser;

}

}

}

}

} 

});

 

Avec ce code, il reste un cas qui n’est pas géré, à savoir quand la tâche est directement assignée au groupe active directory.

 

En espérant que ça aide

 Christopher

Cet article, publié dans SharePoint 2013, est tagué . Ajoutez ce permalien à vos favoris.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s