Filtrowanie widoków cz. 2

Przykład 2. Wymagania: filtrowanie dokumentów na podstawie innych warunków niż warunki równości. Pozostałe wymagania tak jak w przykładzie pierwszym dotyczą zapewnienia możliwości stronnicowania, sortowania i formatowania widoków. W tym przykładzie filtrowane będą dokumenty na podstawie zadanego okresu, w którym dokumenty były modyfikowane.

Zrealizowanie takiego scenariusza z wykorzystaniem XsltListViewWebParta wymaga dokonania w nim pewnych modyfikacji. Po pierwsze konieczne jest zapewnienie parametrów przechowujących wartości filtrów daty początkowej i końcowej okresu modyfikacji dokumentów. Dodawanie parametrów jest proste w programie SharePoint Designer (2010). Poniższy obrazek pokazuje opcję zarządzania paramtetramie webparta.

filtrowanie5

Filtrowanie widoków (cz. 2)

Przykład 2. Wymagania: filtrowanie dokumentów na podstawie innych warunków niż warunki równości. Pozostałe wymagania tak jak w przykładzie pierwszym dotyczą zapewnienia możliwości stronnicowania, sortowania i formatowania widoków. W tym przykładzie filtrowane będą dokumenty na podstawie zadanego okresu, w którym dokumenty były modyfikowane.

Zrealizowanie takiego scenariusza z wykorzystaniem XsltListViewWebParta wymaga dokonania w nim pewnych modyfikacji. Po pierwsze konieczne jest zapewnienie parametrów przechowujących wartości filtrów daty początkowej i końcowej okresu modyfikacji dokumentów. Dodawanie parametrów jest proste w programie SharePoint Designer (2010). Poniższy obrazek pokazuje opcję zarządzania paramtetramie webparta.
Parametry widoczne są w konfiguracji webparta przykładowo tak:

<ParameterBinding Name="startDate" Location="None" DefaultValue="1900-01-01T00:00:00Z"/>

<ParameterBinding Name="endDate" Location="None" DefaultValue="2100-12-31T00:00:00Z"/>

W parametrach określono wartości domyślne na zasadzie 100 lat wstecz i 100 lat w przyszłość przyjmując założenie, że taki zakres obejmie wszystkie dokumenty. Parametry są sformatowane tekstowo w sposób gwarantujący poprawne rozpoznanie w zapytaniu webparta (CAML).

Kolejną modyfikacją jest skonfigurowanie zapytania tak, aby wykorzystywało parametry z wartościami filtrów. Modyfikacja zapytania sprowadza się do odnalezienia w konfiguracji webparta elementu XmlDefinition/View/Query i określenia jego wartości zgodnie z poniższym przykładem:

<Query>

<Where>

<And>

<Geq>

<FieldRef Name=”Modified”/>

<Value Type=”DateTime”>{startDate}</Value>

</Geq>

<Leq>

<FieldRef Name=”Modified”/>

<Value Type=”DateTime”>{endDate}</Value>

</Leq>

</And>

</Where>

</Query>

Takie zapytanie filtruje dokumenty w ten sposób, że data modyfikacji dokumentu musi być większa lub równa od zadanej daty początkowej oraz musi być mniejsza lub równa od daty końcowej.

Dwie powyższe zmiany stanowią całość modyfikacji w XsltListViewWebParcie. Pozostała konfiguracja wiąże się z zapewnieniem wartości parametrów filtrowania.

Jeżeli mamy do dyspozycji SharePoint w wersji Server najłatwiej jest skorzystać z webpartów filtra daty. Po dodaniu dwóch takich webpartów reprezentujących datę początkową i datę końcową należy skonfigurować połączenie pomiędzy webpartami. Takie połączenie będzie miało za zadanie ustawić wartość parametrów w XsltListViewWebParcie na podstawie dat określonych w webpartach filtra daty. Poniższy obrazek prezentuje konfigurację połączenia obsługującego wartość filtra daty początkowej.

filtrowanie6

Wykonanie powyższych kroków pozwala filtrować dokumenty na podstawie okresu, w którym zostały zmodyfikowane.

filtrowanie7

Takie podejście spełnia zadane w tym przykładzie wymagania. Niestety nie jest wolne od wad. W samym widoku listy nie ma informacji o fakcie filtrowania, ponieważ filtrowanie w nagłówkach kolumn nie pozwala na inne warunki filtrowania niż warunek równości, co jest zrozumiałe. Gorszą informacją jest jednak ta, że filtrowanie w kolumnach (warunek równości) przestaje być możliwe, dostępna jest tylko opcja sortowania.

filtrowanie8

Jeżeli nie mamy do dyspozycji webpartów filtra, ponieważ korzystamy tylko z SharePoint Foundation można zrealizować wymagania zadane w tym przykładzie inaczej. Propozycją rozwiązania jest oparta o zamieszczenie informacji o wartościach filtrów w query stringu. W takim wariancie XsltListViewWebPart musi być przygotowany tak samo jak w pierwszym wariancie z jedną różnicą: źródłem wartości parametrów będzie parametr query string. Wówczas definicja parametrów wygląda tak:

<ParameterBinding Name="startDate" Location="QueryString(startDate)" DefaultValue="1900-01-01T00:00:00Z"/>

<ParameterBinding Name="endDate" Location="QueryString(endDate)" DefaultValue="2100-12-31T00:00:00Z"/>

Źródłem wartości filtrów będą standardowe kontrolki daty. Po określeniu dat użytkownik będzie zatwierdzał filtr poprzez kliknięcie w przycisk. Kontrolki można dodać do strony w programie SharePoint Designer, rezultat takiego działania będzie widoczny w kodzie strony.

<table>

<tr>

<td>Date from &nbsp;</td>

<td><SharePoint:DateTimeControl runat=”server” ID=”calendar1″ DateOnly=”true” /></td>

</tr>

<tr>

<td>Date to &nbsp;</td>

<td><SharePoint:DateTimeControl runat=”server” ID=”calendar2″ DateOnly=”true” /></td>

</tr>

</table>

<asp:Button runat=”server” Text=”Search” id=”Button1″ OnClientClick=”addParametersToUrl(); return false;” />

Kliknięcie w przycisk będzie skutkowało wykonaniem funkcji JavaScript. Zadaniem funkcji jest odczytanie wartości dat, sformatowanie ich do postaci zrozumiałej przez zapytanie CAML i przekierowanie na bieżącą stronę z dodanymi w adresie parametrami. W takim scenariuszu konieczne jest również opracowanie funkcji wyoływanej w trakcie ładowania strony, której zadaniem będzie odczytanie ewentualnych parametrów z query stringa i wpisanie ich do kontrolek z datami.

Poniżej przykład filtrowania z widocznym aktualnym adresem strony.
filtrowanie9

Takie podejście pozwala spełnić zadane wymagania. Wymaga jednak trochę więcej pracy i podstawowej znajomości JavaScript. Tak jak przy pierwszym rozwiązaniu filtrowanie w kolumnach z wykorzystaniem warunku równości nie jest możliwe.

Realizacja podejścia zakładającego parametry dat przekazywane do zapytania jest możliwa również w DataFormWebParcie. W zasadzie realizacja różni się tylko jednym punktem. XsltListViewWebPart definiuje swoje źródło danych w elemencie XmlDefinition. DataFormWebPart posiada właściwość SPDataSource, która w atrybucie SelectCommand zawiera definicję zapytania. Analogicznie jak w omówionych powyżej przykładach można zmodyfikować zapytanie dodając do niego odwołania do parametrów webparta. Same parametry definiuje się i zasila identycznie jak w przypadku XsltListViewWebParta.

Migracja aplikacji SharePoint
Przykład 2. Wymagania: filtrowanie dokumentów na podstawie innych warunków niż warunki równości. Pozostałe wymagania tak […]