Précédent   Forum des professionnels en informatique > Dotnet > Général Dotnet > Développement Office System > SharePoint
SharePoint Forum d'entraide sur Microsoft Office SharePoint Server et Windows SharePoint Services.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 12/09/2008, 11h45   #1
Responsable SQL Server

 
Avatar de mikedavem
 
Homme David BARBARIN
Expert SQL Server
Inscription : août 2005
Messages : 3 551
Détails du profil
Informations personnelles :
Nom : Homme David BARBARIN
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Expert SQL Server
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 551
Points : 6 501
Points : 6 501
Par défaut EventHandler - Problème avec ItemAdded

Bonjour tout le monde

Je suis après faire un event Handler avec l'événement ItemAdded.
Lors de cet événement je cherche à modifier les droits sur un élément d'une liste.

Voici le code

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
public override void ItemAdded(SPItemEventProperties properties)
{
	base.DisableEventFiring();
        base.ItemAdded(properties);

	SPSecurity.RunWithElevatedPrivileges(delegate()
                {
                    using (SPSite oSite = new SPSite(properties.SiteId))
                    {
                        using (SPWeb oWeb = oSite.OpenWeb(properties.RelativeWebUrl))
                        {
                            // Suppression de l'héritage des droits sur l'élément
                            SPListItem element = oWeb.Lists[properties.ListId].GetItemById(properties.ListItemId);                            
                            if (element.HasUniqueRoleAssignments)
                            {
                                element.BreakRoleInheritance(false);
                            }
                            // Suppression lecture visiteurs portail
                            SPPrincipal TargetGroupDenied = oWeb.SiteGroups["Visiteurs de portail"];
                            element.RoleAssignments.Remove(TargetGroupDenied);
                            // Autorisation collaboration membres de documentation
                            SPPrincipal TargetGroupAccessMember = oWeb.SiteGroups["Membres de documentation"];
                            SPRoleAssignment NewRoleCollaboration = new SPRoleAssignment(TargetGroupAccessMember);
                            NewRoleCollaboration.RoleDefinitionBindings.Add(oWeb.RoleDefinitions["Collaboration"]);
                            element.RoleAssignments.Add(NewRoleCollaboration);
                            // Autorisation approbation pour les approbateurs
                            SPPrincipal TargetGroupAccessApprobateurs = oWeb.SiteGroups["Approbateurs"];
                            SPRoleAssignment NewRoleApprobation = new SPRoleAssignment(TargetGroupAccessApprobateurs);
                            NewRoleApprobation.RoleDefinitionBindings.Add(oWeb.RoleDefinitions["Approuver"]);
                            element.RoleAssignments.Add(NewRoleApprobation);
                            // Mis à jour des permissions sur l'item
                            element.Update();
                        }
                    }
                });

 	base.EnableEventFiring();
}
Je recontre un souci avec la ligne en rouge. J'ai un message d'erreur lors du déboggage

Code :
1
2
3
 
Une exception de type 'System.ArgumentException' ......
La valeur n'est pas comprise dans la plage attendue
Apparemment je ne récupère pas le bon ID au niveau de mon élément ou ma liste ne contient pas cet élément .....
Quelqu'un a t'il une idée ?

Merci pour l'aide

Dernière modification par mikedavem ; 12/09/2008 à 12h05.
mikedavem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2008, 21h58   #2
Rédacteur

 
Ludovic Lefort
Inscription : juin 2004
Messages : 789
Détails du profil
Informations personnelles :
Nom : Ludovic Lefort
Âge : 30

Informations forums :
Inscription : juin 2004
Messages : 789
Points : 1 667
Points : 1 667
Envoyer un message via MSN à LefortLudovic
Je viens de faire un projet qui ressemble tres fort à cela.
Je n'ai pas le code en tete mais tu peux le télécharger ici :

http://www.codeplex.com/sprestrictaccess

Ludovic,
__________________
Envie de contribuer à la rubrique SharePoint ? Contactez moi par MP !

SharePoint : http://sharepoint.developpez.com
Mon site : http://lefortludovic.developpez.com
Mon blog : http://www.consultpoint.net/blog
LefortLudovic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2008, 08h49   #3
Responsable SQL Server

 
Avatar de mikedavem
 
Homme David BARBARIN
Expert SQL Server
Inscription : août 2005
Messages : 3 551
Détails du profil
Informations personnelles :
Nom : Homme David BARBARIN
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Expert SQL Server
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 551
Points : 6 501
Points : 6 501
merci pour ta réponse LefortLudovic

Entre temps j'ai cherché de mon côté.
Dans le projet que je suis en train de faire , les éléments de la liste concernée possèdent des champs obligatoires. Par conséquent, après l'upload du fichier, l'utilisateur a un formulaire à compléter. D'après ce que j'ai pu voir, (et c'est peut être là que tu pourras me confirmer), dans ce cas bien précis, lors de l'événement itemAdded, sharepoint ne connait pas encore l'identifiant du fichier uploadé car il est encore dans la phase de vérification de celui-ci d'où l'erreur que j'obtiens.

J'ai passé mon code dans l'événement itempUpdated et cela fonctionne mieux.

Maintenant voici le but de ma démarche (pour expliquer un peu le pourquoi du comment) :

- Lorsqu'un utilisateur upload un fichier , il est soumis à un formulaire car l'élément de la liste possède des champs obligatoires (indice du document , propriétaire du document , référence du document etc....)
- une fois le fichier uploadé dans la liste, il arrive dans un statut brouillon (la liste gère les versions principales et secondaires).
- L'utilisateur publie une version principale si aucune modification ne doit être faite sur son document
- Un workflow manuel est lancé par celui-ci qui permet en autre l'approbation de son document par un approbateur qu'il aura choisi. (L'utilisateur n'a pas le droit d'approuver lui-même le document)

Il y a donc toute une phase où le document n'est pas approuvé. Cette phase peut durer quelques jours selon la disponibilité des gens qui approuvent le document.

Pendant cette même phase si un utilisateur qui ne possède qu'un droit en lecture seule sur le document effectue une recherche sur celui-ci, il apparaît dans les éléments de la recherche. Bien sûr le document n'est pas accessible lorsqu'il essaie de l'ouvrir mais pour certaines raisons on m'a demandé qu'il n'apparaisse pas dans la recherche à ce moment là.

La recherche Sharepoint se base effectivement sur les droits. La solution que j'ai trouvé est la suivante :
- Lors de l'insertion du document : je supprime les droits du groupe qui a les droits en lecture uniquement et je laisse les droits en contribution,approbation ...
- Lors de la validation du document dans mon workflow, je restaure les droits en restaurant l'héritage des droits sur la liste

Si quelqu'un a une autre idée plus simple je suis preneur bien sûr
mikedavem est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 19h22.


 
 
 
 
Partenaires

Hébergement Web