Как определить правильный (с учетом регистра) URL-адрес для сайта SharePoint - PullRequest
4 голосов
/ 17 марта 2010

Проблема: Создание столбца сайта с использованием API-интерфейса SharePoint (объектная модель) с неверным регистром в URL-адресе для объекта SPSite или SPWeb приведет к тому, что новый столбец вызовет исключение, если попытается изменить его производится через галерею колонок сайта.

SharePoint, как правило, очень терпимо относится к принятию URL-адреса без учета регистра, однако в некоторых случаях он полностью выходит из строя. Например, при создании столбца сайта он каким-то образом сохраняет и использует URL-адрес при его создании, а при попытке изменить определение поля через Галерею столбцов сайта (страница fldedit.aspx в LAYOUTS) вы в итоге выкидываете ошибку ниже.

Value does not fall within the expected range.
at Microsoft.SharePoint.SPFieldCollection.GetFieldByInternalName(String strName, Boolean bThrowException)
at Microsoft.SharePoint.SPFieldCollection.GetFieldByInternalName(String strName) 
at Microsoft.SharePoint.ApplicationPages.BasicFieldEditPage.OnLoad(EventArgs e) 
at System.Web.UI.Control.LoadRecursive() 
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 

Как я могу надежно получить правильный URL для сайта / сети? Свойства SPSite.Url и SPWeb.Url, похоже, возвращают обратно в любом случае, в котором они созданы.

Другими словами, семейство сайтов подготовлено с использованием следующего URL: http://server/Path/Site

Затем, если я создаю новый столбец сайта с использованием объектной модели SharePoint и использую http://server/path/site при создании экземпляров объектов SPSite и SPWeb, столбец сайта будет доступен, но при попытке доступа к нему через галерея ошибка выше генерируется. Если я исправлю URL-адрес в адресной строке, я все равно смогу просмотреть / изменить определение для рассматриваемого SPField, но сгенерированный URL-адрес по умолчанию является поддельным.

Ясно, как грязь?

Пример кода: (это плохой пример из-за проблемы чувствительности к регистру)

// note: site should be partially caps: http://server/Path/Site
using (SPSite site = new SPSite("http://server/path/site")) {
  using (SPWeb web = site.OpenWeb()) {
    web.Fields.AddFieldAsXml("..."); // correct XML really here
  }
}

1 Ответ

1 голос
/ 13 мая 2010

Не уверен, влияет ли это на вас, но есть известная ошибка в отношении чувствительности к регистру в URL-адресах SharePoint.

http://blogs.msdn.com/enterprisesearch/archive/2008/01/25/crawling-case-sensitive-web-content-in-sharepoint-server-2007-and-search-server-2008.aspx

Поскольку вы публикуете это в марте, возможно, у вас установлен пакет обновления с установленным исправлением. Возможно, вам не хватает параметра реестра.

...