none
Ajouter plusieurs versions à une biblipthèque documentaire RRS feed

  • Question

  • Bonjour, je souhaite savoir comment peut on créer des versions de fichiers dans une bibliothèque de documents.
    J'ai fait une page qui contient un contrôle pour ajouter un nouveau fichier à une liste mais je veux aussi créer des versions lors de l'insertion pour ne pas écraser les versions antérieures.

    Merci
    mardi 6 mai 2008 07:23

Réponses

  • Bonjour,

     

    Les nouvelles versions seront automatiquement gérées en fonction de ce qui a été défini dans les paramètres de la bibliothèque.

     

    Accédez à la page des paramètres de la bibliothèque puis cliquez sur "Versionning Settings". En fonction de votre paramétrage, les fichiers uploadés viendront enrichir les versions déjà existantes en version mineure (brouillon), majeure (publique) ou en remplacement simple.

     

    Ce comportement peut être reproduit via l'API en accédant aux propriétés de votre objet liste.

     

    Code Snippet

    public void ActiveVersionning(SPList list)

    {

    list.EnableVersionning = true;

    list.EnableMinorVersions = true;

    list.Update();

     

    Pour plus d'informations, je vous invite à consulter les membres de la classe SPList : http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.splist_members.aspx

     

    Il vous restera à activer le versionning pour les éventuelles nouvelles bibliothèques, créées par les utilisateurs. Vous pourrez peut être vous appuyer sur les EventReceivers de votre liste, de sorte à ce que ce paramétrage soit activé par défaut, ou sur le code de votre page pour que ce paramétrage soit modifié s'il n'est pas encore configuré.

     

    Bons développements.

    mardi 6 mai 2008 08:54
    Modérateur

Toutes les réponses

  • Bonjour,

     

    Les nouvelles versions seront automatiquement gérées en fonction de ce qui a été défini dans les paramètres de la bibliothèque.

     

    Accédez à la page des paramètres de la bibliothèque puis cliquez sur "Versionning Settings". En fonction de votre paramétrage, les fichiers uploadés viendront enrichir les versions déjà existantes en version mineure (brouillon), majeure (publique) ou en remplacement simple.

     

    Ce comportement peut être reproduit via l'API en accédant aux propriétés de votre objet liste.

     

    Code Snippet

    public void ActiveVersionning(SPList list)

    {

    list.EnableVersionning = true;

    list.EnableMinorVersions = true;

    list.Update();

     

    Pour plus d'informations, je vous invite à consulter les membres de la classe SPList : http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.splist_members.aspx

     

    Il vous restera à activer le versionning pour les éventuelles nouvelles bibliothèques, créées par les utilisateurs. Vous pourrez peut être vous appuyer sur les EventReceivers de votre liste, de sorte à ce que ce paramétrage soit activé par défaut, ou sur le code de votre page pour que ce paramétrage soit modifié s'il n'est pas encore configuré.

     

    Bons développements.

    mardi 6 mai 2008 08:54
    Modérateur
  • Bonjour, j'ai essayé votre code mais quand j'ajoute le même fichier à la bibliothèque documentaire un erreur se produit :


    A file with the name ListLivrable/Alerte.JPG already exists. It was last modified by SHAREPOINT\system on 08 mai 2008 17:28:45 +0200.


    Voilà mon code :


     #region Ajout d'un ListItem dans une liste documentaire

                if (FileUploadLivrable.PostedFile != null)
                {
                    #region Récupérer le fichier de composant FileUpload
                    System.IO.Stream strm = FileUploadLivrable.PostedFile.InputStream;
                    byte[] byt = new byte[Convert.ToInt32(FileUploadLivrable.PostedFile.ContentLength)];
                    strm.Read(byt, 0, Convert.ToInt32(FileUploadLivrable.PostedFile.ContentLength));
                    strm.Close();
                    #endregion

                    #region Ajouter le fichier à liste des livrables


                    #region Ajout d'un ListItem dans une liste Livrable
                  
                    SPFile file = objSPFolder.Files.Add(System.IO.Path.GetFileName(FileUploadLivrable.PostedFile.FileName), byt,false);
                    file.Item["NumerProjet"] = Convert.ToInt32(id_projet);
                    file.Item.Update();
                   
                   

                    #endregion

                   
                  
                    #endregion
                             
                   
                }
    jeudi 8 mai 2008 15:39
  • Bonjour,

     

    Il doit manquer le cas à traiter si le document existe déjà. Je n'ai pas le bout de code exact sous la main, mais ça devrait ressembler à ça :

     

    ...

    objSPFolder= web.GetFolder(fullPath); //

     

    file = web.GetFile(sDossierParent+"/"+sNomFichier);


    if (file.Exists)

    {

    objSPFolder.Files[sNomFichier].CheckOut();

    objSPFolder.Files[sNomFichier].SaveBinary(byt);

    objSPFolder.Files[sNomFichier].CheckIn(comments);

    }

    else

    {

    objSPFolder.Files.Add(sNomFichier, byt);

    }

     

     

    Hope this Helps

     

    Gilles

    vendredi 9 mai 2008 07:43
  • Bonjour, le problème ce n'est pas le test de l'existance, je veux ajouter le fichier malgrès son existance mais en crayant des versions.
    vendredi 9 mai 2008 07:46
  • Le problème de versionning est indépendant, il suffit que le versionning soit activé pour la bibliothèque comme expliqué dans la réponse de Sébastien.

     

    Le problème dans le code que vous utilisez, c'est qu'il  n'est fait que pour l'ajout d'un nouveau document, alors que là, vous devez faire une mise à jour si le document existe, ce qui créera une nouvelle version si le versionning est activé pour la bibliothèque.

     

    Gilles

     

     

     

     

     

    vendredi 9 mai 2008 08:03
  • Oui, j'ai activé le versionning et j'ai changé la valeur dans la méthode add à true mais toujours il ajoute la nouvelle version et écrase les autres.
    vendredi 9 mai 2008 08:27
  • Oui, en effet,

     

    Je ne sais pas si je suis très clair, mais evidemment que même en mettant le boolean à True dans la méthode add, cela ne change rien car il ne fait qu'ajouter et écraser s'il trouve un document de même nom.

     

    Ce que vous devez traiter, c'est le cas des MISE A JOUR des documents, comme je vous l'ai dit dans le bout de code que je vous ai donné en exemple (l'idée en tout cas).

     

    C'est seulement lorsqu'un document est mis à jour que Sharepoint va créer automatiquement une nouvelle version si le versionning est activé pour la liste.

     

    Avez vous testé avec ce bout de code en plus ??

     

    Gilles

     

    vendredi 9 mai 2008 09:11
  • Je suis navré de vous dire que je n'ai pas saisi votre code, qu'est ce qu'il fait exactement ?
    Je m'explique de plus :
    Je souhaite ajouter un fichier à une liste, si ce fichier existe alors il sera ajouté dans la liste mais sans écraser les anciennes fichers qui portent le même nom mais juste il ajoute une nouvelle version.

    Merci
    vendredi 9 mai 2008 09:21
  •  

    Ok, donc je reprends :

     

    1. Récupération d'un objet de type SPFile correspondant à l'URL du fichier. Vu votre code, vous avez déjà le nom du fichier,  il manque juste de spécifier l'url du dossier parent pour composer l'URL global du fichier (qui s'appelle dans mon cas sDossierParent)  : http://msdn.microsoft.com/en-us/library/ms476063.aspx

     

    file = web.GetFile(sDossierParent+"/"+sNomFichier);

     

     

    2. Tester l'existence ou non de ce fichier

     

    if (file.Exists)

     

     

    3. dans le cas ou le fichier existe, alors procéder à une mise à jour, là c'est un copier/coller dans votre code :

     

     

    objSPFolder.Files[sNomFichier].CheckOut(); // Extraction du doc

    objSPFolder.Files[sNomFichier].SaveBinary(byt); // mise à jour

    objSPFolder.Files[sNomFichier].CheckIn("mettre un commentaire si besoin"); //Remettre le doc modfié

     

    4. dans le cas ou le fichier n'existe pas, alors le créer, et vous reprenez ici le code que vous utilisez déja.

     

     

    Si le vesioning est activé sur la liste, alors dans le cas d'une mise à jour, en faisant click-droit sur le nom du doc , puis historique, vous devriez retrouver toutes les versions des documents.

     

    Tout ceci aux erreur de syntaxe pret, n'ayant sous la main aucun moyen de vérifier le code que je viens de vous donner.

     

    Gilles

    vendredi 9 mai 2008 09:45
  • Les bibliothèques SharePoint gèrent le mécanisme d'extraction / archivage. Ce mécanisme implique qu'un fichier doit être préalablement extrait pour être modifié. Pendant qu'il est extrait, aucun utilisateur autre que la personne qui l'a extrait ne peut enregistrer le fichier modifié (ou l'écraser par une version modifiée du fichier). C'est seulement lorsque le fichier sera archivé qu'il sera visible par les utilisateurs lambda.

     

    Lorsque vous voulez remplacer le fichier, il est donc nécessaire de l'extraire. Le CheckOut() du code de Gilles sert à celà. Nécessairement, si vous souhaitez l'archiver après les modifications, il vous faudra faire appel à la méthode CheckIn().

    mardi 13 mai 2008 12:30
    Modérateur