XsltListViewWebPart
Для вывода списков SharePoint 2010 использует XsltListViewWebPart.
Можно открыть стандартное представление любого списка с помощью SharePoint Designer 2010 и кастомизировать внешний вид списка под свои нужды с помощью своих XSLT преобразований. Как это работает описано в Overview of XSLT List View Rendering System. Подробнее о том, как это делать написано в статье Use SharePoint Designer 2010 to Create XSLT List View Web Parts и Using the XSLT List View Web Part to style your data – SP 2010.
XSL в Style Library
Считается правилом хорошего тона хранить все свои «*.xsl» файлы в одном месте. Для этого в SharePoint 2010 на уровне коллекции узлов предусмотрена специальная библиотека «Style Library» (естественно название зависит от используемой локализации).
При разработке своих возможностей узла (фич) «*.xsl» файлы помещаю на уровень коллекции узлов в папку «Style Library\XSL Style Sheets» с помощью примерно такого кода:
static private SPFile UploadXsl(SPSite site, String fileName, String fileText, Boolean overwrite)
{
using (SPWeb rootWeb = site.OpenWeb())
{
// styleLibrary
SPList styleLibrary = rootWeb.Lists[@"Style Library"];
// xslStyleSheetsName
const String xslStyleSheetsName = @"XSL Style Sheets";
// xslStyleSheetsUrl
String xslStyleSheetsUrl = String.Format(CultureInfo.InvariantCulture,
@"{0}/{1}/{2}", rootWeb.ServerRelativeUrl,
styleLibrary.RootFolder.Url,
xslStyleSheetsName);
// xslStyleSheets
SPListItem xslStyleSheets = rootWeb.GetFolder(xslStyleSheetsUrl).Item;
// exists
if (null == xslStyleSheets)
{
// xslStyleSheets
xslStyleSheets = styleLibrary.Folders.Add(String.Empty,
SPFileSystemObjectType.Folder, xslStyleSheetsName);
xslStyleSheets.Update();
}
return xslStyleSheets.Folder.Files.Add(fileName,
Encoding.UTF8.GetBytes(fileText), overwrite);
}
}
Для изменения ссылки на страницах представления списка использую следующий код (в XsltListViewWebPart меняется только одно поле XslLink, которая указывает на «*.xsl» файл из «Style Library\XSL Style Sheets», необходимо использовать относительные ссылки):
static private void UpdateXsl(SPWeb web, String viewUrl, PersonalizationScope scope, String xslLink)
{
using(SPLimitedWebPartManager manager = web.GetLimitedWebPartManager(viewUrl, scope))
{
foreach(System.Web.UI.WebControls.WebParts.WebPart webPart in manager.WebParts)
{
if(typeof(XsltListViewWebPart) == webPart.GetType())
{
XsltListViewWebPart xsltWebPart = (XsltListViewWebPart) webPart;
xsltWebPart.XslLink = xslLink;
manager.SaveChanges(xsltWebPart);
}
}
}
}
В Sandboxed Solutions Вы НЕ МОЖЕТЕ работать с SPLimitedWebPartManager (ограничения этого типа пакетов), поэтому этот код не будет работать для этого типа пакетов.
Поддержка в Visual Studio 2010
Имеется возможность производить отладку своих XSLT преобразований в Visual Studio 2010. Как это делать детально описано в статье Sharepoint 2007 XSLT Debug.
Комментариев нет:
Отправить комментарий