Question

Je suis à bout de nerfs sur celui-ci.J'ai une interface utilisateur qui crée et modifie des documents stockés dans une bibliothèque de documents SharePoint.La partie astuce est que je dois permettre à l'utilisateur de mettre à jour le document sans problème, utilisez simplement SPFile.SaveBinary(), n'est-ce pas?

Cela met définitivement à jour le contenu du fichier, mais d'une manière ou d'une autre, l'ancien nom de fichier et l'ancienne extension persistent, c'est un problème.La suppression et la réajout de l'élément de liste n'est pas non plus une solution car l'ID de l'élément est référencé dans l'url.

Ma question est de savoir comment puis-je mettre à jour les métadonnées d'extension et de nom de fichier de l'élément SPFile?

Jusqu'à présent, toutes mes tentatives d'utilisation de la bibliothèque d'objets ont échoué, j'ai essayé de mettre à jour les champs ci-dessous aucun n'a réussi.Il semble qu'il doit y avoir un moyen plus simple de le faire.

SPFile file = item.File;
file.Item[SPBuiltInFieldId.FileLeafRef] = resolvedFileName;
file.Item[SPBuiltInFieldId.FileRef] = "/File/" + resolvedFileName;
file.Item[SPBuiltInFieldId.BaseName] = System.IO.Path.GetFileNameWithoutExtension(resolvedFileName);
file.Item["Name"] = System.IO.Path.GetFileNameWithoutExtension(resolvedFileName);
file.SaveBinary(conduitFile);
file.Update();

[EDIT] - Voici ma solution de travail.

SPFile file = item.File;
string resolvedFileName = item.ID.ToString() + "-" + conduitFileName;
item["Title"] = resolvedFileName;
file.SaveBinary(conduitFile);
file.MoveTo(item.ParentList.RootFolder.Url + "/" + resolvedFileName, true);
file.Item["Name"] = resolvedFileName;
file.Update();
Était-ce utile?

La solution

Une fois le fichier enregistré dans la bibliothèque, utilisez la méthode MoveTo et transmettez le nom de fichier modifié dans le paramètre newUrl.

Méthode SPFile.MoveTo (chaîne)
Rapide et facile: renommer le fichier téléchargé à l'aide du modèle d'objet SharePoint via un récepteur d'événements

Autres conseils

Une autre manière plus simple que d'utiliser MoveTo consiste à utiliser la propriété BaseName de SPListItem.Vous définiriez ceci en exécutant

item["BaseName"] = resolvedFileName; //Whatever you want the new file name to be 
item.Update();

C'est plus facile que MoveTo car vous n'avez pas à vous soucier de la hiérarchie des dossiers et vous n'avez pas à vous soucier de l'extension du fichier.

Pour une raison quelconque, la propriété n'est pas répertoriée dans la documentation MSDN, mais il semble bien fonctionner sans problème.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top