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

Développement Sharepoint .NET Discussion :

Accès métadonnées fichier


Sujet :

Développement Sharepoint .NET

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 46
    Points : 39
    Points
    39
    Par défaut Accès métadonnées fichier
    Bonjour à tous !

    Je cherche actuellement à accéder aux métadonnées d'un fichier présent dans une bibliothèque à partir d'un objet SPFile (donc le tout en C#).

    J'ai fais quelque recherches sur le net mais c'est un peu la jungle, j'aimerai une méthode propre et efficace.

    L'idée c'est de pouvoir accéder aux métadonnées que l'on voit en faisant "afficher les propriétés", seulement là il se peut que des utilisateurs aient créés des colonnes personnelles, j'aimerai aussi récupérer leur contenu mais je ne connais pas à l'avance le nom que pourront avoir ces colonnes ...

    J'avais pensé à faire une genre de boucle qui pour chaque itération me donne la possibilité d'accéder au titre et à la valeur de la colonne. Ce serait vraiment l'idéal (à moins qu'il existe encore mieux )

    Merci à ceux qui pourront m'aider, je vais continuer mes recherches

  2. #2
    Expert confirmé Avatar de Lapinpanda
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2009
    Messages
    3 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 230
    Points : 4 913
    Points
    4 913
    Par défaut
    Bonjour,

    c'est très simple

    un objet SPFile, contient un SPListItem (container de vos métadonnées), un SPListItem contient une propriété Fields (SPFieldCollection).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SPFile file = monFile;
    SPListItem monItemDeMonFichier = file.Item;
     
    for each (var field in monItemDeMonFichier.Fields){
     
    console.write(item[Fields.StaticName] as string);
    }
    Merci d'utiliser en cas de résolution de votre problème

    N'oubliez pas non plus le petit pouce vert pour récompenser celui que vous a aidé

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 46
    Points : 39
    Points
    39
    Par défaut
    Bonjour Lapinpanda,

    Merci de ta réponse et désolé de ne te répondre que maintenant j'ai du switcher de travail entre temps et je n'avais plus du tout ça en tête !

    Néammoins je replonge dedans actuellement. Donc pour en revenir au vif du sujet :

    J'ai bien essayé d'énumérer les champs avec un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach (SPField field in fileItem.Fields)
      {
      }
    Seulement là deux choses m'embête :
    • Il y a beaucoup de champs, alors que seul quelques uns m'intéressent. C'est quand même bête d'en énumérer des dizaines pour rien.
    • Quelque chose qui peut paraître bête mais je n'arrive pas à trouver comment accéder à la valeur d'un champ (via le SPField) ...

    Une solution serait de supprimer les champs qui ne m'intéresse pas avec un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if ("champ qui ne m'intéresse pas")
      continue;
    Mais c'est quand même trés sale ...

    Les seuls champs qui m'intéressent sont le titre du document, sa date de création, l'auteur et les colonnes créés par les utilisateurs qui sont liées à ce document.

    La seule difficulté est, je pense, pour les colonnes créés par les utilisateurs, car je ne connais pas les noms de ces colonnes à l'avance, ni ce qu'elles sont suceptible de contenir.

    Je vais continuer mes recherches, si tu as des suggestions ou des solutions je suis preneur, merci

  4. #4
    Expert confirmé Avatar de Lapinpanda
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2009
    Messages
    3 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 230
    Points : 4 913
    Points
    4 913
    Par défaut
    Bonjour,


    Les seuls champs qui m'intéressent sont le titre du document, sa date de création, l'auteur et les colonnes créés par les utilisateurs qui sont liées à ce document.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var field = monItemDeMonFichier.Fields[SPBuildInField.Title] //ou Fields["Title"]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var field = monItemDeMonFichier.Fields[SPBuildInField.Created] //ou Fields["Created"]
    Note : pas sur du nom je fais de tête la.


    La seule difficulté est, je pense, pour les colonnes créés par les utilisateurs, car je ne connais pas les noms de ces colonnes à l'avance, ni ce qu'elles sont suceptible de contenir.
    Tu va pas pouvoir le savoir ca...


    Il y a beaucoup de champs, alors que seul quelques uns m'intéressent. C'est quand même bête d'en énumérer des dizaines pour rien.
    Tu les à l'avance connais au moins? car sinon je vois pas comment faire
    Merci d'utiliser en cas de résolution de votre problème

    N'oubliez pas non plus le petit pouce vert pour récompenser celui que vous a aidé

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 46
    Points : 39
    Points
    39
    Par défaut
    Bonjour,

    J'avais déjà connaissance des techniques que tu cites pour récupérer le titre etc ...

    La syntaxe exact est .Fields[SPBuiltInFieldID.Title] (au passage ) et retourne un SPField.

    Imaginons que j'utilise donc cette technique comment récupérer la valeur de chaque champ ? GetFieldValueAsText() ? Je ne comprends pas bien cette méthode...
    Enfin dans ce cas là il ne me resterait plus qu'a obtenir mes colonnes personnalisées, là j'ai vu avec le débogueur de visual studio que la boucle foreach prend 76 énumérations dans les dents (sans compter les colonnes qui m'intéresse), pas génial pour récupérer, allez au maximum 10 colonnes perso.

    Mais j'ai peut être trouvé une alternative, en utilisant SPFile.Properties je me retrouve avec une Hashtable de 30 éléments c'est déjà peut être plus gérable, cette Hashtable contient bien mes colonnes perso, il ne me resterait alors plus qu'a bidouiller le tout pour obtenir mes colonnes, est ce possible ? Si oui est ce une bonne méthode ?

    C'est quand même bizarre qu'il n'y ait pas de méthode simple et clair pour cette opération

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 46
    Points : 39
    Points
    39
    Par défaut
    Bon j'ai réussis à m'en sortir

    Voilà comment j'ai procédé si ça peut aider certains :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SPList list = SPContext.Current.List;
    SPFieldCollection fieldCollection = list.Fields;
    A ce moment, fieldCollection contient tout les champs de la liste courante. Il suffit de supprimer le nom de nos colonnes personnelles et ainsi ont se fait un tableau qui contiendra tout les champs de la liste courante, hormis nos champs personnels.

    De cette manière on peut récupérer ce qui nous intéresse, le nom des colonnes personnelles et ceci sans connaître leurs noms à l'avance.

    Pour accéder à la valeur d'un champ rien de plus simple :

    Imaginons que le nom de notre colonne est "plante"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SPFile file;
    SPListItem fileItem = file.Item;
    string value = fileItem["plante"].ToString()
    Attention cepentant, avant de faire le ToString(), il faut vérifier que ce que nous renvoi fileItem["plante"] n'est pas NULL.

    Merci encore à Lapinpanda de m'avoir aidé

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

Discussions similaires

  1. Accès à un fichier xml via hibernate
    Par boisdin dans le forum Hibernate
    Réponses: 12
    Dernier message: 20/01/2005, 14h54
  2. Chemin d'accès des fichiers dans des sous rep
    Par Le Veilleur dans le forum C++Builder
    Réponses: 4
    Dernier message: 17/11/2004, 14h37
  3. Restreindre l'accès des fichiers..
    Par Neilos dans le forum Windows
    Réponses: 6
    Dernier message: 25/08/2004, 00h22
  4. [Tomcat]Droit d'accès aux fichiers créés par une servlet
    Par loulouleboss dans le forum Tomcat et TomEE
    Réponses: 7
    Dernier message: 15/07/2004, 14h32
  5. [Réseau] Autorisations d'accès aux fichiers
    Par Pedro dans le forum API, COM et SDKs
    Réponses: 7
    Dernier message: 19/05/2004, 13h43

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