web-dev-qa-db-ja.com

SharePointライブラリ内のファイルの絶対URLを取得する方法

私はSharePoint 2010に取り組んでいます。そのライブラリにドキュメントライブラリIDとドキュメントIDを持っています。ドキュメントライブラリが存在するWebサイトがないので、ドキュメントの完全なURLを取得する必要があります。実行時。どうすれば入手できますか。以下を試しました。

string filepath = currentList.DefaultViewUrl + "/" + sListItem.Url;

これに答えてください。

15
Tortoise

SPListItemの「EncodedAbsUrl」フィールドを使用します。 SPFileでも機能します。

SPListItem item = ...;
string absUrl = (string) item[SPBuiltInFieldId.EncodedAbsUrl];

またはSPFile

 SPFile file = ...;
 string absUrl = (string) file.Item[SPBuiltInFieldId.EncodedAbsUrl];
48
Stefan

組み込みのフィールド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名前空間への参照も必要です。

3
Colin Gardner

これを試して 、

          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;
                    }
               }
          }

これでうまくいくといいのですが。

2
Furqan Hameedi

これがドキュメントライブラリの場合は、これを試してください。

item.Web.Url+"/"+item.File.Url
1
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)

1
Andrey

以下のコードを使用して、ファイルの絶対URLを取得します。

SPFile file;    
string url = file.Item[SPBuiltInFieldId.EncodedAbsUrl] as string;
0
Nirikshita

価値があるのは、item.Webプロパティは、実際にSPWebオブジェクトをインスタンス化していることを意味します。つまり、これを破棄する必要があります。そうしないと、メモリリークが発生します。
すでに述べたより優れた、より速い方法がある場合、それは多くのオーバーヘッドです。

BuiltInFieldId.EncodedAbsUrlこれはあなたが望むものへの最も簡単なアクセスを提供するので、言及されたアプローチ。

0
Steve