Mit PnP ist es einfach eine ganze SharePoint Liste abzufragen und mit den Daten aus der Liste über PowerShell weiterzuarbeiten. Komplizierter wird es Ergebnisse aus einer PnP-Abfrage zu sortieren.
Werden über PnP Daten aus einer SharePoint Liste abgefragt gibt PnP die Daten als unsortierte Hash Table zurück. Leider lässt sich die Tabelle nicht so einfach sortieren, zum Beispiel falls jemand eine sortierte Reihenfolge nach Datum möchte.
Warum die Daten nicht vor dem Abruf sortieren, quasi für PnP vorsortiert? Hier helfen CAML Queries. Nicht unbedingt bequem diese vorzubereiten, mit ein wenig Hilfe und Übung geht es. PnP kann CAML Queries verwenden um Daten abzurufen. Dadurch lässt sich in der Query die Sortierung vordefinieren, ähnlich zu einer Listenansicht.
Tricks wie es mit einer CAML-Query einfacher wird:
- Eine sortierte oder gefilterte Listenansicht hat im Hintergrund den Teil einer CAML-Query. Es ist also möglich temporär eine neue Listenansicht anzulegen, die Sortierung und Filterung anzugeben und über Get-PnPView die Ansicht abzurufen. Im Ergebnis ist ein Teil der CAML-Query im Property ViewQuery. Bedenke, damit du die Listenansicht mit PnP abrufen kannst muss die Ansicht öffentlich sein. Eine private Ansicht kann PnP nicht abrufen.
$View = Get-PnPView -Identity [ViewGuid] -List [ListName] -Includes ViewQuery
$View | select Title,ViewQuery | fl
- So lässt sich ein erster Teil der Query kopieren. Eine CAML-Query benötigt aber mehr. Im aktuellen Beispiel musst du das Ergebnis von ViewQuery mit <View><Query>[ViewQueryResult]</Query></View> ergänzen. Achte auf Gross- und Kleinschreibung. Für eine CAML-Query ist das wichtig.
$CAMLQuery = ("<View><Query>" + $View.ViewQuery + "</Query></View>")
$CAMLQuery
<View><Query><OrderBy><FieldRef Name="Date" /></OrderBy></Query></View>
- Einfacher ist es die Query mit dem CAML Query Builder von U2U zu erstellen. Über ein GUI lassen sich die gewünschten Sortierungen und Filterungen angeben, testen und die Query am Ende kopieren.
- Manuelles Anpassen der Query auf weitere Bedürfnisse.
Habt ihr die Query fertig könnt ihr mit Get-PnPListItem vorsortierte Daten abrufen.
Mit ein wenig Übung klappt es auch mit komplexeren CAML-Queries. 👍