Tips & Tricks 05: CAML Get User Items by User Id
Standardowo, CAML Queries, obsługują zapytania dot. pobrania elementów przypisanych/stworzonych/zmodyfikowanych przez użytkownika za pomocą jego Display Name. Dzieję się tak, gdyż tak właśnie te pola są domyślnie ustawione w MOSS/WSS.
Więc jeżeli chcemy wykonać zapytanie:
<Where>
<Eq>
<FieldRef Name='CreatedBy' />
<Value Type='User'>{0}</Value>
</Eq>
</Where>
To w {0} musimy wstawić Display Name użytkownika, którego elementów poszukujemy. Pewnie by to nie sprawiało problemu w firmie 5 osobowej gdzie każdy ma przynajmniej inne imię, jednak im więcej pracowników tym większa szansa wystąpienia Jana Kowalskiego więcej niż raz. Jeżeli tak się stanie, to nasze zapytanie zwróci nam nie tylko dane które nas interesują, ale także dane które nas kompletnie nie interesują (innego Jana Kowalskiego).
Na pomoc przychodzą nam dwa rozwiązania:
1) Modyfikacja typu pola w List Settings.
Jeżeli klikniecie na List Settings a następnie klikniecie na pole Created By, to będziecie mogli zmienić jako własność Show Field na na przykład ID lub Account.
Dzięki temu zabiegowi, teraz w naszym zapytaniu możemy podać albo ID użytkownika albo Account w zależności co zostało wybrane z pola listy wyboru.
Jednakże zmiana ta ma wpływ na sposób wyświetlenia pola. Dziwnie by wyglądał element Created By 3251, albo Created By ozon-dom-test\mrekas (no chyba, że lubimy łamigłówki).
2) Modyfikacja zapytania CAML
Ta opcja jest duuużo prostsza, i wymaga tylko jednej małej modyfikacji. Mianowicie do Tagu FieldRef należy dodać atrybut LookupId=’TRUE’:
<Where>
<Eq>
<FieldRef Name='CreatedBy' LookupId='TRUE' />
<Value Type='User'>{0}</Value>
</Eq>
</Where>
Teraz możemy wykonać to samo zapytanie podając ID użytkownika jako parametr.