суббота, 7 мая 2011 г.

XSL файлы для XsltListViewWebPart в Style Library

XsltListViewWebPart

Для вывода списков SharePoint 2010 использует XsltListViewWebPart.

clip_image001

Можно открыть стандартное представление любого списка с помощью 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.

Комментариев нет:

Отправить комментарий