IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SharePoint .NET Discussion :

Récupération d'un Content Type dans un ItemAdding


Sujet :

SharePoint .NET

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 21
    Points : 16
    Points
    16
    Par défaut Récupération d'un Content Type dans un ItemAdding
    Bonjour à tous
    Bon ben je suis toujours dans la decouverte de sharepoint et j'ai un probleme qui parait simple mais je tourne en rond en fait

    Voila je souhaiterai que lorsque un utilisateur upload un fichier dans une liste, qu'il est à choisir un des trois parametres Param1, Param2 et Param3 (Param1 est par defaut). Et apres dans mon itemadding, je veux recuperer ce parametre.

    Le probleme est que j'arrive a creer des content types sous sharepoint directement pour realiser cela mais j'aurai preferer le faire dans mon code directement. Est ce possible ?

    Je viens de voir que l'on peut faire egalement des colums; serait ce mieux des colum que des content type ? Est ce que je dois passer par des fichiers XMl ?

    Voila mici beaucoup d'avance
    Bonne journée et bon moss

  2. #2
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 21
    Points : 16
    Points
    16
    Par défaut
    Bonjour encore
    Bon ben j'ai un peu avancé mais ça marche po ><
    Je vous explique ce que j'ai fait si quelqu'un peut m'aider s'il vous plait

    - J'ai, sous sharepoint, crée une liste de document avec une colonne NivoDeConfi : trois choix obligatoire "Niveau n°1", "Niveau n°2" et "Niveau n°3".

    - J'ai alors créé un eventhandler itemadding ou je récupère ce statut et associe des droits d'accès spéciaux selon le niveau voila le code:

    using System;
    using System.Collections.Generic;
    using System.Text;
    using Microsoft.SharePoint;

    namespace NiveauDeConfidentialite
    {
    public class GestionSecu : SPItemEventReceiver
    {
    public override void ItemAdding(SPItemEventProperties properties)
    {
    base.ItemAdding(properties);
    using (SPSite SiteAModifier = new SPSite("http://portable-pcr/"))
    {
    using (SPWeb WebAModifier = SiteAModifier.OpenWeb())
    {
    SPRoleAssignment NouvelleAssignation1 = null;
    SPRoleAssignment NouvelleAssignation2 = null;
    SPRoleAssignment NouvelleAssignation3 = null;
    SPRoleAssignment NouvelleAssignation4 = null;

    SPRoleAssignment NouvelleAssignation11 = null;
    SPRoleAssignment NouvelleAssignation22 = null;
    SPRoleAssignment NouvelleAssignation33 = null;
    SPRoleAssignment NouvelleAssignation44 = null;

    SPRoleAssignment NouvelleAssignation111 = null;
    SPRoleAssignment NouvelleAssignation222 = null;
    SPRoleAssignment NouvelleAssignation333 = null;
    SPRoleAssignment NouvelleAssignation444 = null;

    SPListItem Objet = WebAModifier.Lists[properties.ListId].GetItemById(properties.ListItemId);

    Objet.BreakRoleInheritance(false);

    SPPrincipal GestDeRevue = WebAModifier.SiteGroups["GestionnaireDeRevues"];
    SPPrincipal MembresPerm = WebAModifier.SiteGroups["MembrePermanent"];
    SPPrincipal Invités = WebAModifier.SiteGroups["Invité"];
    SPPrincipal UtilisIntern = WebAModifier.SiteGroups["UtilisateurInterneDGRS"];

    if (Objet["NivoDeConfi"].ToString() == "Niveau n°1")
    {
    NouvelleAssignation1 = new SPRoleAssignment(GestDeRevue);
    NouvelleAssignation1.RoleDefinitionBindings.Add(WebAModifier.RoleDefinitions["Hidden"]);
    Objet.RoleAssignments.Add(NouvelleAssignation1);

    NouvelleAssignation2 = new SPRoleAssignment(MembresPerm);
    NouvelleAssignation2.RoleDefinitionBindings.Add(WebAModifier.RoleDefinitions["Hidden"]);
    Objet.RoleAssignments.Add(NouvelleAssignation2);

    NouvelleAssignation3 = new SPRoleAssignment(Invités);
    NouvelleAssignation3.RoleDefinitionBindings.Add(WebAModifier.RoleDefinitions["Hidden"]);
    Objet.RoleAssignments.Add(NouvelleAssignation3);

    NouvelleAssignation4 = new SPRoleAssignment(UtilisIntern);
    NouvelleAssignation4.RoleDefinitionBindings.Add(WebAModifier.RoleDefinitions["Hidden"]);
    Objet.RoleAssignments.Add(NouvelleAssignation4);

    Objet.Update();
    }
    if (Objet["NivoDeConfi"].ToString() == "Niveau n°2")
    {
    NouvelleAssignation11 = new SPRoleAssignment(GestDeRevue);
    NouvelleAssignation11.RoleDefinitionBindings.Add(WebAModifier.RoleDefinitions["Read"]);
    Objet.RoleAssignments.Add(NouvelleAssignation11);

    NouvelleAssignation22 = new SPRoleAssignment(MembresPerm);
    NouvelleAssignation22.RoleDefinitionBindings.Add(WebAModifier.RoleDefinitions["Hidden"]);
    Objet.RoleAssignments.Add(NouvelleAssignation22);

    NouvelleAssignation33 = new SPRoleAssignment(Invités);
    NouvelleAssignation33.RoleDefinitionBindings.Add(WebAModifier.RoleDefinitions["Hidden"]);
    Objet.RoleAssignments.Add(NouvelleAssignation33);

    NouvelleAssignation44 = new SPRoleAssignment(UtilisIntern);
    NouvelleAssignation44.RoleDefinitionBindings.Add(WebAModifier.RoleDefinitions["Hidden"]);
    Objet.RoleAssignments.Add(NouvelleAssignation44);

    Objet.Update();
    }
    if (Objet["NivoDeConfi"].ToString() == "Niveau n°3")
    {
    NouvelleAssignation111 = new SPRoleAssignment(GestDeRevue);
    NouvelleAssignation111.RoleDefinitionBindings.Add(WebAModifier.RoleDefinitions["Read"]);
    Objet.RoleAssignments.Add(NouvelleAssignation111);

    NouvelleAssignation222 = new SPRoleAssignment(MembresPerm);
    NouvelleAssignation222.RoleDefinitionBindings.Add(WebAModifier.RoleDefinitions["Read"]);
    Objet.RoleAssignments.Add(NouvelleAssignation222);

    NouvelleAssignation333 = new SPRoleAssignment(Invités);
    NouvelleAssignation333.RoleDefinitionBindings.Add(WebAModifier.RoleDefinitions["Read"]);
    Objet.RoleAssignments.Add(NouvelleAssignation333);

    NouvelleAssignation444 = new SPRoleAssignment(UtilisIntern);
    NouvelleAssignation444.RoleDefinitionBindings.Add(WebAModifier.RoleDefinitions["Read"]);
    Objet.RoleAssignments.Add(NouvelleAssignation444);

    Objet.Update();
    }
    }
    }

    }
    }
    }


    - Apres j'ai déployer la feature voila mon elements.xml:

    <Elements xmlns="http://schemas.microsoft.com/sharepoint/">
    <Receivers ListTemplateId="101">
    <Receiver>
    <Name>GestionSecu</Name>
    <Type>ItemAdding</Type>
    <SequenceNumber>10000</SequenceNumber>
    <Assembly>GestionSecu, Version=1.0.0.0, Culture=neutral, PublicKeyToken=2fe0ffa3c76cc19f</Assembly>
    <Class>NiveauDeConfidentialite.GestionSecu</Class>
    <Data></Data>
    <Filter></Filter>
    </Receiver>
    </Receivers>
    </Elements>


    - J'ai activé la feature et fait des tests en créeant plusieurs utilisateurs appartenant à des groupes différents et uploader plusieurs fichiers mais ça marche toujours po ><
    En fait c'est comme si lors de l'ajout les droits ne sont jamais modifiés comme si y avait po de eventhandler en fait

    Voila merci beaucoup si quelqu'un pouvait m'aider un peu je bloque la
    Bonne journée à tous

    PS: Oui mon code est moche et pourri et lourd mais je commence à coder à peine donc ne soyez po trop mechant ec moa s'il vous plait mici

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 21
    Points : 16
    Points
    16
    Par défaut
    Bonjour ^^
    Finalement je vais répondre à mon propre post ><

    Deja je m'etais trompé, je dois override itemadded et non itemadding.

    Puis j'ai cru comprendre que je dois prendre la place de administrateur sharepoint si je veux pouvoir le faire! Pouvez m'aider un peu s'il vous plait j'ai aucune idée de comment faire

    Apres j'ai compris que dans le xml elements, le listtemplateid point sur le type de liste sur laquelle fonctionne la feature et chaque List template créée dans sharepoint recoit un ID ><

    Je voudrais aussi savoir s'il est possible de donner un SPRole "hidden" au meme titre que "Read" et "full control" par exemple Si non puis je le creé ? et ou est ce que je dois jouer avec les filtres de vue

    J'aimerais aussi savoir s'il vous plait s'il est possible de redeployer une feature plus rapidement. A chaque fois je supprime la ddll, recompile, charge la dll dans le gac, et je .bat ?

    Voila ben j'espere que vous pourrez m'aider
    Merci d'avance bonne fin de journée a tous
    MOSS Powa

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 760
    Points : 2 050
    Points
    2 050
    Par défaut
    Deja je m'etais trompé, je dois override itemadded et non itemadding.
    Les evenements en -ing sont exécutés avant ton code, tandis que les evenement en -ed le sont après.
    Pour en savoir plus, regarde ca > http://stephaneey.developpez.com/tut.../eventhandler/

    Puis j'ai cru comprendre que je dois prendre la place de administrateur sharepoint si je veux pouvoir le faire! Pouvez m'aider un peu s'il vous plait j'ai aucune idée de comment faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public void TaMethode(){
      SPSecurity.RunWithElevatedPrivileges(        
        delegate() {
           //Ton Code à exécuter en admin   
        })
    }
    Apres j'ai compris que dans le xml elements, le listtemplateid point sur le type de liste sur laquelle fonctionne la feature et chaque List template créée dans sharepoint recoit un ID ><
    Oui

    Je voudrais aussi savoir s'il est possible de donner un SPRole "hidden" au meme titre que "Read" et "full control" par exemple Si non puis je le creé ? et ou est ce que je dois jouer avec les filtres de vue
    Que souhaite tu faire? ca n'a pas de sens de voiloir "masquer" un role.

    J'aimerais aussi savoir s'il vous plait s'il est possible de redeployer une feature plus rapidement. A chaque fois je supprime la ddll, recompile, charge la dll dans le gac, et je .bat ?
    Euh...oui.
    Dans cet article > http://dnt91.developpez.com/tutoriel...oint/features/ je montre comment "automatiser le processus avec visual studio (2008 avec 2005, tu peux passer par les VSeWSS)
    Voila ben j'espere que vous pourrez m'aider
    Merci d'avance bonne fin de journée a tous
    MOSS Powa
    J'espère t'avoir aidé

  5. #5
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 21
    Points : 16
    Points
    16
    Par défaut
    Re Merci beaucoup c'est genial ca m'aide beaucoup

    namespace InfiniteScale
    { public class STest : SPItemEventReceiver
    { public override void ItemAdded(SPItemEventProperties properties)
    { // est ce utile de laisser se lancer le itemadded de base ??
    //base.ItemAdded(properties);

    SPSecurity.RunWithElevatedPrivileges(delegate() {
    // Est ce aussi simple pour prendre la place de l'administrateur ? c'est kool mici
    try { using (SPSite TargetSite = new SPSite("http://portable-pcr/"))
    { using (SPWeb TargetWeb = TargetSite.OpenWeb())
    { SPRoleAssignment NewAssignment = null;
    SPListItem Item = properties.ListItem;
    Item.BreakRoleInheritance(false);
    //Mon tableau possede une colonne "NivoDeConfi" a trois choix :"Niveau n°1",...
    if (Item["NivoDeConfi"].ToString() == "Niveau n°2")
    { SPPrincipal Group = TargetWeb.SiteGroups["Invité"];
    NewAssignment = new SPRoleAssignment(Group);
    NewAssignment.RoleDefinitionBindings.Add(TargetWeb.RoleDefinitions["Hidden"]);
    //Je souhaiterai rendre mon fichier que je rajoute invisible pour certains groupes
    Item.RoleAssignments.Add(NewAssignment);
    item.SystemUpdate();
    //ou Item.Update(); ? ><
    } } } } catch (Exception Ex)
    {properties.Cancel = true;
    properties.ErrorMessage = "Erreur dans l'Event ItemAdding : " + Ex.Message; } } ) } }
    }

  6. #6
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 21
    Points : 16
    Points
    16
    Par défaut EventHandler Associé à une ListTemplate
    Bonjour

    J'ai créé un modèle de liste de documents sous sharepoint TemplateListDoc et j'ai créé un event handler itemadded mais j'arrive po à associer mon eventhandler a cette nouvelle liste.

    Dans mon Elements.xml, j 'ai mis <Receivers ListTemplateId="1"> en supposant que le id de ma TemplateListDoc est 1 mais je suis pas sur je sais po trop comment le trouver .

    Quand je met <Receivers ListTemplateId="101"> , ca marche tres bien

    Voila Merci d'avance
    Bonne Journée à tous

    PS: pour ecrire dans les logs de sharepoint j ai fait Microsoft.Office.Server.Diagnostics.PortalLog.LogString("Mon Message"); en important microsoft.office.server, j ai po d'erreur mais ca marche po non plus ?? help please thank you

  7. #7
    Membre chevronné

    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 760
    Points : 2 050
    Points
    2 050
    Par défaut
    Citation Envoyé par Liham Voir le message
    Bonjour
    Dans mon Elements.xml, j 'ai mis <Receivers ListTemplateId="1"> en supposant que le id de ma TemplateListDoc est 1 mais je suis pas sur je sais po trop comment le trouver .

    Quand je met <Receivers ListTemplateId="101"> , ca marche tres bien
    Le ListTemplateId correspond à ton modèle de liste sharepoint et le 101 correspond à la bibliothèque de document; ceci explique cela

  8. #8
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 21
    Points : 16
    Points
    16
    Par défaut
    Merci de ta reponse mais en fait mon probleme est que quand je met mon id=1 (de mon modele de liste) ca ne marche po sur une liste qui suit mon modele ><

    Mais que je met 101 ca marche sur une liste classique de documents

    J'ai créé une colonne NivoDeConfi (avec trois choix)
    Mais Quand je fais:

    SPListItem Item = properties.ListItem;
    If (Item["NivoDeConfi"].ToString == "NiveauDeux"){
    //moncode }

    Mon If ne se lance po

    Merci beaucoup Bonne chance Bonne journee

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 13/03/2012, 10h23
  2. Content-type pour une pièce jointe dans un mail
    Par rcjcrcjc dans le forum Langage
    Réponses: 2
    Dernier message: 14/10/2009, 18h51
  3. header Content-Type text/html VS charset dans le code
    Par Moustico dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 30/08/2009, 21h08
  4. choix du content-type dans fichier attaché d'un mail
    Par serge0934 dans le forum Modules
    Réponses: 2
    Dernier message: 06/06/2007, 13h51
  5. [Servlet] Récupération du Content-type en Java
    Par hdd dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 08/02/2006, 16h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo