Je travaille sur SharePoint 2010.J'ai un ID de bibliothèque de documents et un ID de document dans cette bibliothèque avec moi.Je n'ai pas non plus de site Web, site dans lequel la bibliothèque de documents est présente.Je dois maintenant obtenir l'URL complète du document à l'exécution. Comment puis-je l'obtenir. J'ai essayé ce qui suit.
string filepath = currentList.DefaultViewUrl + "/" + sListItem.Url;
Veuillez répondre à cela.
Utilisez le champ "EncodedAbsUrl" sur le SPListItem
. Fonctionne également pour SPFile
:
SPListItem item = ...;
string absUrl = (string) item[SPBuiltInFieldId.EncodedAbsUrl];
ou pour un SPFile
SPFile file = ...;
string absUrl = (string) file.Item[SPBuiltInFieldId.EncodedAbsUrl];
L'ID de champ intégré est à coup sûr la meilleure façon de procéder, mais il renvoie l'URL sous forme codée, qui peut ou non être ce que vous voulez.
Je pense que la meilleure façon est d'ajouter quelque part une petite méthode d'extension à une classe d'utilitaires:
public static string AbsoluteUrl(this SPFile File, bool Decode = true)
{
string EncodedUrl = File.Item[SPBuiltInFieldId.EncodedAbsUrl].ToString();
if (Decode)
return SPEncode.UrlDecodeAsUrl(EncodedUrl);
else
return EncodedUrl;
}
Et puis appelez comme suit
Item.File.AbsoluteUrl();
si vous voulez une URL décodée ou
Item.File.AbsoluteUrl(false);
si vous souhaitez que l'URL reste encodée.
Notez que la valeur de paramètre par défaut pour Decode sera uniquement disponible dans .Net4 + et donc SP2013 uniquement, mais vous pouvez facilement créer une méthode de surcharge pour SP2010. Vous aurez également besoin d'une référence à l'espace de noms Microsoft.SharePoint.Utilities pour accéder à la classe SPEncode.
Essaye ça ,
using (SPSite ospSite = new SPSite("http://abcd:24931"))
{
using (SPWeb web = ospSite.OpenWeb("/subsite")
{
// Get document library collection here and fetch all the document urls
SPDocumentLibrary docLib = (SPDocumentLibrary)web.Lists["docu"];
//where docu is my document library
SPListItemCollection items = docLib.Items;
foreach (SPListItem item in items)
{
string url = item.Url;
}
}
}
J'espère que cela vous permettra de continuer.
S'il s'agit de la bibliothèque de documents, essayez celle-ci.
item.Web.Url+"/"+item.File.Url
public string GetItemURL(SPListItem item)
{
string web = item.Web.Url;
string listID = item.ParentList.ID.ToString();
string contentType = item.ContentTypeId.ToString();
string itemID = item.ID.ToString();
string url = web+"/_layouts/listform.aspx?PageType=4&ListID={"+listID+"}&ID="+itemID+"&ContentTypeID="+contentType;
return url;
}
Ça marche pour moi. J'espère que j'aide (URL de l'élément de liste)
Utilisez le code ci-dessous pour obtenir l'URL absolue du fichier:
SPFile file;
string url = file.Item[SPBuiltInFieldId.EncodedAbsUrl] as string;
Pour ce que ça vaut, accéder à la propriété item.Web
Signifie que vous instanciez réellement l'objet SPWeb
, ce qui signifie que cela devrait être supprimé sinon vous causerez une fuite de mémoire.
C'est beaucoup de frais généraux quand il existe déjà des moyens meilleurs et plus rapides.
J'utiliserais l'approche BuiltInFieldId.EncodedAbsUrl
Mentionnée car cela vous donne l'accès le plus facile à ce que vous voulez.