2012-01-06 17 views
2

SPSiteDataQueryを使用して、異なるリストのドキュメントを表示しています。私はGridviewを使用してドキュメントを表示します。 Gridviewの列の1つはハイパーリンクフィールドです。どのドキュメントがそれぞれ異なるドキュメントライブラリから来るので、どのように各ドキュメントのURLを設定できますか?あなたの情報については、Caml Queryを使用してドキュメントをフィルタリングしています。Camlクエリを使用して共有ポイントのリストのURLを取得

私を助けてください。ここ

はコードです:

using System; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using Microsoft.SharePoint; 
using System.Data; 
using Microsoft.SharePoint.Utilities; 

namespace Uniway.FOD.Intranet.ControlTemplates 
{ 
    public partial class Documents : UserControl 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      GridView1.DataSource = GetAllDocuments(); 
      // Set up the field bindings. 
      BoundField boundField = new BoundField(); 
      boundField.HeaderText = "File name"; 
      boundField.DataField = "Title";//"LinkFilename"; 
      GridView1.Columns.Add(boundField); 

      HyperLinkField hyperlinkField = new HyperLinkField(); 
      hyperlinkField.HeaderText = "Link name"; 
      hyperlinkField.DataTextField = "LinkFileName"; 
      hyperlinkField.DataNavigateUrlFields = new[] { "LinkFileName" }; 
      hyperlinkField.DataNavigateUrlFormatString = "{0}"; 
      GridView1.Columns.Add(hyperlinkField); 

      BoundField boundField2 = new BoundField(); 
      boundField2.HeaderText = "Link File Name"; 
      boundField2.DataField = "LinkFilename"; 
      GridView1.Columns.Add(boundField2); 

      GridView1.DataBind(); 
     } 

     public DataTable GetAllDocuments() 
     { 
      SPSiteDataQuery objSPSiteDataQuery = null; 
      SPWeb objSPWeb = null; 
      DataTable objDataTable = null; 

      objSPWeb = SPContext.Current.Web; 
      objSPSiteDataQuery = new SPSiteDataQuery(); 

      //Specify the fields to be fetched in the results.Similar to select clause of an SQL query 

      objSPSiteDataQuery.ViewFields = "<FieldRef Name=\"LinkFilename\"/>" + 
              "<FieldRef Name=\"Title\" />" + 
              "<FieldRef Name=\"Created\" />" + 
              "<FieldRef Name=\"Modified\"/>" + 
              "<FieldRef Name=\"Editor\"/>"; 

      //specifying list server template=101 so that it will query only document libraries 

      objSPSiteDataQuery.Lists = "<Lists ServerTemplate=\"101\" BaseType=\"1\" Hidden=\"FALSE\" MaxListsLimit=\"0\"/>"; 

      objSPSiteDataQuery.RowLimit = 1000; 
      objSPSiteDataQuery.Webs = "<Webs Scope=\"Recursive\"/>"; 

      //querying all documents of the content type 'CT23December1' having version=1.0 

      objSPSiteDataQuery.Query = @"<Where> 
              <Eq> 
              <FieldRef Name='File_x0020_Type' /> 
              <Value Type='Text'>doc</Value> 
              </Eq> 
             </Where><OrderBy><FieldRef Name='Modified' Ascending='False' /></OrderBy>"; 

      objDataTable = objSPWeb.GetSiteData(objSPSiteDataQuery); 
      return objDataTable; 
     } 
    } 
} 

答えて

4

あなたは、ドキュメントへのリンクを構築するためにいくつかの内部のフィールドを使用することができます。 1;#sites/SiteCollection/Kit/Kits Site Documents/Excel Report.xls

  • FileLeafRef - - 1;#Excel Report.xls
  • FileDirRef - 1;#sites/SiteCollection/Kit/Kits Site Documents
  • SERVERURL - /sites/SiteCollection/Kit/Kits Site Documents/Excel Report.xls
  • EncodedAbsUrl - http://server/sites/SiteCollection/Kit/Kits%20Site%20Documents/Excel%20Report.xls
    • FileRef:ここでは、各フィールドのデータの例でいくつかの有用なものがあります

    あなたはちょうどt彼はobjSPSiteDataQuery.ViewFieldsに別の視野として、上記のフィールド:

    objSPSiteDataQuery.ViewFields = "<FieldRef Name=\"ServerUrl\"/>" + 
               "<FieldRef Name=\"LinkFilename\"/>" + 
               "<FieldRef Name=\"Title\" />" + 
               "<FieldRef Name=\"Created\" />" + 
               "<FieldRef Name=\"Modified\"/>" + 
               "<FieldRef Name=\"Editor\"/>"; 
    
    +0

    こんにちはキット、お返事ありがとうございました。私はEncodeAbsUrlを使用していますが、あなたの例に示すように完全なURLは得られません。これは私が得るものです: EncodedAbsUrlます。http:// sp2010/ SERVERURL:/ LinkFilename:どのように to.docx私はクレイジーうわー –

    +1

    間違って何をやっている...明らかに[その他](のhttp://のstackoverflow。 com/questions/1530335/why-getsitedataquery-returns-wrong-values)[people](http://social.msdn.microsoft.com/Forums/en/sharepointdevelopment/thread/5ab362cf-edfd-4450-a254-3f2607022647) [この問題がある](https://platinumdogs.wordpress.com/2010/01/13/spsitedataquery-and-the-encodedabsurl-hidden-field/) 'FileRef'はどうですか? –

    +0

    私はそれを試しましたが、私が望むものは表示されません。 –

    1

    私はこのようにそれをやった:

    row["AbsolutePath"] = String.Format("{0}{1}", row["EncodedAbsUrl"], row["FileRef"].ToString().Substring(row["FileRef"].ToString().IndexOf("#") + 1)); 
    
    関連する問題