SharePoint 2010に取り組んでいます。そのライブラリにドキュメントライブラリIDとドキュメントIDがあります。ドキュメントライブラリが存在するWebサイトもありません。したがって、ドキュメントの完全なURLを取得する必要があります。実行時。どうすれば入手できますか。私は以下を試しました。
string filepath = currentList.DefaultViewUrl + "/" + sListItem.Url;
これに答えてください。
SharePoint 2010に取り組んでいます。そのライブラリにドキュメントライブラリIDとドキュメントIDがあります。ドキュメントライブラリが存在するWebサイトもありません。したがって、ドキュメントの完全なURLを取得する必要があります。実行時。どうすれば入手できますか。私は以下を試しました。
string filepath = currentList.DefaultViewUrl + "/" + sListItem.Url;
これに答えてください。
でフィールド「EncodedAbsUrl」を使用しますSPListItem
。同様にSPFile
機能します:
SPListItem item = ...;
string absUrl = (string) item[SPBuiltInFieldId.EncodedAbsUrl];
またはSPFile
SPFile file = ...;
string absUrl = (string) file.Item[SPBuiltInFieldId.EncodedAbsUrl];
組み込みのフィールド ID は確かに最善の方法ですが、エンコードされた URL を返しますが、これは必要な場合とそうでない場合があります。
最善の方法は、どこかのユーティリティ クラスに小さな拡張メソッドを追加することだと思います。
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;
}
そして、次のように呼び出します
Item.File.AbsoluteUrl();
デコードされた URL が必要な場合、または
Item.File.AbsoluteUrl(false);
URL をエンコードしたままにしたい場合。
Decode のデフォルト パラメータ値は .Net4+ でのみ使用できるため、SP2013 でのみ使用できますが、SP2010 のオーバーロード メソッドは簡単に作成できます。SPEncode クラスにアクセスするには、Microsoft.SharePoint.Utilities 名前空間への参照も必要です。
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;
}
それは私のために働いています。お役に立てば幸いです (リスト アイテムの URL)
これを試して 、
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;
}
}
}
これでうまくいくことを願っています。
これがドキュメント ライブラリ用である場合は、これを試してください。
item.Web.Url+"/"+item.File.Url
以下のコードを使用して、ファイルの絶対 URL を取得します。
SPFile file;
string url = file.Item[SPBuiltInFieldId.EncodedAbsUrl] as string;
価値があるのは、プロパティにアクセスitem.Web
することは、実際にSPWeb
オブジェクトをインスタンス化していることを意味します。これは、これを破棄する必要があることを意味します。そうしないと、メモリリークが発生します。
すでに言及されているより良い方法とより速い方法がある場合、それは多くのオーバーヘッドです。
BuiltInFieldId.EncodedAbsUrl
これにより、必要なものに最も簡単にアクセスできるため、前述のアプローチを使用します。
答えは文字列url=currentweb.url + "/" + Listitem.url;