Получить URL-адрес списка в sharepoint с помощью Caml Query - PullRequest
2 голосов
/ 06 января 2012

Я использую SPSiteDataQuery для отображения документов из разных списков. Я отображаю документы, используя Gridview. Одним из столбцов Gridview является поле гиперссылки. Как я могу установить URL каждого документа, так как каждый из них происходит из разных библиотек документов? Для вашей информации я использую Caml Query для фильтрации документов.

Пожалуйста, помогите мне.

вот код:

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

Ответы [ 2 ]

4 голосов
/ 06 января 2012

Вы можете использовать некоторые внутренние поля для создания ссылки на документ. Вот несколько полезных примеров с данными в каждом поле:

  • FileRef - 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

Вы просто добавите одно из полей выше в качестве другого поля просмотра к objSPSiteDataQuery.ViewFields:

objSPSiteDataQuery.ViewFields = "<FieldRef Name=\"ServerUrl\"/>" +
                                "<FieldRef Name=\"LinkFilename\"/>" +
                                "<FieldRef Name=\"Title\" />" +
                                "<FieldRef Name=\"Created\" />" +
                                "<FieldRef Name=\"Modified\"/>" +
                                "<FieldRef Name=\"Editor\"/>";
1 голос
/ 09 января 2012

Я сделал это так:

 row["AbsolutePath"] = String.Format("{0}{1}", row["EncodedAbsUrl"], row["FileRef"].ToString().Substring(row["FileRef"].ToString().IndexOf("#") + 1));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...