Извличане на елементи от списък от различна колекция от сайтове в SharePoint 2010

Имам проблеми с извличането на елементи от списък от различна колекция от сайтове. Нямам проблеми, когато се опитвам да получа елементи от списъка от текущата ми колекция от сайтове. Например http://myintranet.com/Departments/IT работи. Но http://myintranet.com/sites/Departments/IT връща грешка.

if (!String.IsNullOrEmpty(SiteName) && !String.IsNullOrEmpty(SPContext.Current.Web.Url))
    {
      SPSecurity.RunWithElevatedPrivileges(delegate()
      {
        using (SPSite intranetSite = new SPSite(SPContext.Current.Web.Url))
        {
          using (SPWeb currentWeb = intranetSite.AllWebs["/sites/projects/Physics"])
          {
            SPList postList = currentWeb.Lists.TryGetList("Issues");                

            if (postList != null)
            {
              IssueList.DataSource = postList.Items.GetDataTable();

              IssueList.DataBind();
            }
          }
        } 

      });
    }

Не съм използвал различен код от това, което правя обикновено, когато се опитвам да получа елементи от списъка. Единствената разлика е, че този път получавам елементи от списък от друга колекция от сайтове.

Благодаря за всяка помощ!


person R100    schedule 17.02.2011    source източник


Отговори (1)


Проблемът е intranetSite.AllWebs. Това ще получи само SPWeb обекти под текущата ви колекция от сайтове.

Не можете да изведете друга колекция от сайтове директно от една колекция от сайтове.

Въпреки че /sites/projects ИЗГЛЕЖДА като колекция от детски сайтове от /, това не е. /sites е просто управляван път. / и /sites/projects са на едно и също ниво на йерархията на колекцията от сайтове.

Това, което трябва да направите, е следното:

if (!String.IsNullOrEmpty(SiteName) && !String.IsNullOrEmpty(SPContext.Current.Web.Url))
    {
      SPSecurity.RunWithElevatedPrivileges(delegate()
      {

          using (SPWeb currentWeb = new SPSite("http://server/sites/projects/Physics").OpenWeb())
          {
            SPList postList = currentWeb.Lists.TryGetList("Issues");                

            if (postList != null)
            {
              IssueList.DataSource = postList.Items.GetDataTable();

              IssueList.DataBind();
            }
          }

      });
    }
person James Love    schedule 17.02.2011
comment
Сега най-накрая започвам да разбирам този бизнес с управлявани пътища. Цял ден ми създаваше проблеми. Благодаря за вашата помощ. Ще се опитам да приложа това утре. - person R100; 17.02.2011
comment
Без притеснения - да, те са объркващи в началото, защото прецакват това, което изглежда като нормална йерархия. Управляваните пътеки са просто логичен начин за групиране на колекции от сайтове, но според обектния модел всички колекции от сайтове са равни в очите на уеб приложение, без значение под какъв управляван път се намира. - person James Love; 18.02.2011