Rapide & Facile: Renommez le fichier téléchargé à l'aide du modèle objet de SharePoint Via un récepteur d'événements

MISE À JOUR: Cela fonctionne mais il y a des limites importantes qui sont décrites dans les commentaires. Cela peut toujours être utile dans certaines circonstances.

MISE À JOUR 2: Dans mon projet actuel, les utilisateurs toujours téléchargement les documents. Comme un résultat, Je ne cours pas dans un problème où MS Word est en cours d'exécution et pense que le fichier a été renommé à ce sujet. J'ai couru dans un problème, « le fichier a été modifié par quelqu'un d'autre" et résolu ce problème par un indicateur de type simple sémaphore. Besoin de l'utilisateur de modifier un champ de données méta de sa valeur par défaut à autre chose. L'itemupdated() récepteur examine une valeur valide il avant d'effectuer réellement la renommer et depuis, Je n'ai eu aucun problème. Votre kilométrage peut varier.

J'ai une exigence client de changer le nom des fichiers téléchargés vers une bibliothèque de documents spécifique conforme à une convention de nommage particulière. L'API ne prévoit pas un changement de nom"()" méthode. Au lieu de cela, Nous utilisons "MoveTo(…)". Ici est un peu un minimum de code pour y parvenir:

 public Substituez VOID ItemAdded(SPItemEventProperties propriétés)
        {
            SPFile f = propriétés.ListItem.File;

            f.MoveTo(propriétés.ListItem.ParentList.RootFolder.Url + « /xyzzy.doc");
            f.Update();

        }

Le bit seulement délicat est les "Propriétés. ListItem.ParentList.RootFolder.Url". Le MoveTo() méthode requiert une URL. Que purée points chaîne me dans le dossier racine de ma bibliothèque de document actuel. Cela me permet d'éviter n'importe quel codage dur dans mon récepteur d'événements.

Il s'agit d'une version plus utile qui fait la même chose, mais affecte le nom du fichier à « Titre »:

 public Substituez VOID ItemAdded(SPItemEventProperties propriétés)
        {
            DisableEventFiring();

            // Attribuer le titre de ce point le nom du fichier lui-même.
 // NOTE: Cette cession doit avoir lieu avant que nous modifions le fichier lui-même.
 // Mise à jour de l'appel() sur le SPFile semble invalider les propriétés dans
 // certains sens.  Mises à jour au titre de »" échoué jusqu'à ce que cela change (mise à jour et() appel)
 // ont été déplacés de la modification du nom de fichier.
            propriétés.ListItem[« Titre"] = propriétés.ListItem.File.Name;

            propriétés.ListItem.Update();

            SPFile f = propriétés.ListItem.File;

            // Obtenir l'extension du fichier.  Nous avons besoin que plus tard.
 chaîne spfileExt = Nouveau FileInfo(d.nom).Extension;

            // Renommez le fichier d'ID de l'élément de liste et utilisent l'extension de fichier pour garder
 // Cette partie intacte.
            f.MoveTo(propriétés.ListItem.ParentList.RootFolder.Url +
                "/" + propriétés.ListItem[« CARTE D'IDENTITÉ"] + spfileExt);

            // Commettre le déménagement.
            f.Update();

            EnableEventFiring();
        }

4 réflexions sur "Rapide & Facile: Renommez le fichier téléchargé à l'aide du modèle objet de SharePoint Via un récepteur d'événements

  1. Pas de nom
    Aussi, Si vous faites cela de Word, Il renverra une erreur et dire que le fichier n'existe pas. Ce n'est pas parlé de la nouvelle URL. Je n'ai pas encore trouvé un moyen de contourner cette.
    Réponse
  2. Paul Galvin
    Merci pour cette remarque. Je ne sais pas non plus une réponse à cette … Il sera intéressant de voir comment le gérer.
    RE: Async & redirection
    Je me demande si le déplacer vers un ItemAdding permettra de la résoudre. C'est un grand trou.
    Merci!
    –Paul
    Réponse
  3. Nadeem Mitha
    Parce que le fichier obtient déplacé de façon asynchrone, Il y a une possibilité d'être redirigé vers EditForm.aspx avant le déménagement s'est engagé (et c'est mauvais). Vous verrez que cela se passe si vous faites le code dormir avant la ligne MoveTo. Je n'ai pas encore compris ce qui peut être fait sur ce problème à part en utilisant un formulaire d'édition personnalisés.
    Réponse

Laisser une réponse

Votre adresse email ne sera pas publiée. les champs requis sont indiqués *