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
 
Nom : David BARBARIN
Date d'inscription: août 2005
Localisation: LYON
Âge: 31
Messages: 1 510
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 :
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 :
 
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 actuellement connecté   Envoyer un message privé Réponse avec citation
Vieux 13/09/2008, 21h58   #2
Responsable SharePoint

 
Nom : Ludovic Lefort
Date d'inscription: juin 2004
Localisation: Bruxelles, Belgique
Âge: 28
Messages: 768
Envoyer un message via MSN à LefortLudovic
Par défaut

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
Vieux 14/09/2008, 08h49   #3
Responsable SQL Server
 
Avatar de mikedavem
 
Nom : David BARBARIN
Date d'inscription: août 2005
Localisation: LYON
Âge: 31
Messages: 1 510
Par défaut

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 actuellement connecté   Envoyer un message privé Réponse avec citation
NEWS SHAREPOINTF.A.Q SHAREPOINTTUTORIELS SHAREPOINTLIVRES SHAREPOINTOFFICE 2010

Réponse Proposer ce sujet en actualité

Précédent   Forum des professionnels en informatique > Dotnet > Général Dotnet > Développement Office System > SharePoint



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non



Fuseau horaire GMT +1. Il est actuellement 13h31.


Vos questions techniques : forum d'entraide SharePoint - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Hébergement - Participez - Copyright © 2000-2010 www.developpez.com - Legal informations.