SharePoint Online: ¿Cómo utilizar la consulta CAML en PowerShell?
Requisito: Usar consulta CAML con PowerShell en SharePoint Online.
CAML es un lenguaje de consulta basado en XML, que significa Collaborative Application Markup Language, y se utiliza para realizar consultas en elementos de listas y bibliotecas de SharePoint. Esta publicación le enseñará los conceptos básicos del uso de la consulta CAML en PowerShell. Le mostraremos cómo usar una consulta CAML para filtrar y ordenar datos de SharePoint y también le brindaremos algunos ejemplos para ayudarlo a comenzar.
Elementos y operadores de consulta CAML:
Estos son los elementos y operadores más utilizados en las consultas CAML:
- Eq
Igual a
- Neq
No igual a
- Gt
-
Mas grande que
- Geq
Mayor qué o igual a
- Lt
Menos que
- Leq
Menos que o igual a
- Contains
Contiene
- IsNull
Nulo
- IsNotNull
No nulo
- BeginsWith
Comienza con texto
- In
Valor en cualquiera de los valores dados.
- NotIn
Valor que no está en ninguno de los valores dados.
- Includes
-
Igual que Eq: en las columnas de búsqueda de selección múltiple, verifica si los valores dados están presentes.
- NotIncludes
Simplemente hace lo contrario a “Incluye” - Igual que No Eq en múltiples valores
- OrderBy
Especifica el orden de clasificación
- Where
Aplica filtro a los datos.
- ViewFields
Campos para recuperar
- RowLimit
Número de filas para recuperar
La consulta CAML utiliza el nombre interno de los campos. Por lo tanto, se decodificarán todos los caracteres en los nombres de los campos (por ejemplo, "Espacio" se reemplazará con "_x0020_", por lo que el nombre del campo "Nombre del proyecto" se reemplazará con "Proyecto_x0020_Name"). Puede leer más en Nombre para mostrar versus nombre interno en nombres de columnas de SharePoint
SharePoint Online: ejemplo de consulta CAML usando PowerShell
Aquí está la consulta CAML para recuperar elementos de la lista de SharePoint. Obtengamos todos los elementos de la lista de la lista "Proyectos", donde el campo "Nombre del proyecto" es igual a "Métricas de innovación".
#Load SharePoint CSOM Assemblies
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll"
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"
#Set parameter values
$SiteURL="https://crescent.sharepoint.com/"
$ListName="Projects"
#Get Credentials to connect
$Cred= Get-Credential
#Setup the context
$Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
$Ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.Username, $Cred.Password)
#Get the List
$List = $Ctx.Web.lists.GetByTitle($ListName)
#Define the CAML Query
$Query = New-Object Microsoft.SharePoint.Client.CamlQuery
$Query.ViewXml = "@
<View>
<Query>
<Where>
<Eq>
<FieldRef Name='ProjectName' /><Value Type='Text'>Innovation Metrics</Value>
</Eq>
</Where>
</Query>
</View>"
#Get All List Items matching the query
$ListItems = $List.GetItems($Query)
$Ctx.Load($ListItems)
$Ctx.ExecuteQuery()
Write-host "Total Number of Items:"$ListItems.count
#Loop through each List Item
ForEach($Item in $ListItems)
{
Write-host $Item.id
}
SharePoint Online: PnP PowerShell para obtener elementos de lista mediante CAML
Utilice el parámetro "Consulta" para aplicar la consulta CAML en el cmdlet PnP PowerShell Get-PnPListItem
#Config Variables
$SiteURL = "https://Crescent.sharepoint.com"
$ListName = "Project Tasks"
#Connect to PnP Online
Connect-PnPOnline -Url $SiteURL -Credentials (Get-Credential)
#CAML Query to Filter List Items
$Query = "<View><Query><Where><Eq><FieldRef Name='ProjectStatus' /><Value Type='Choice'>Completed</Value></Eq></Where></Query></View>"
#Get All List Items matching given query
$ListItems = Get-PnPListItem -List $ListName -Query $Query
#Loop through each Item
Write-host -f Green "Number of List Items Found:"$ListItems.Count
ForEach($ListItem in $ListItems)
{
Write-Host "Id :" $ListItem["ID"]
Write-Host "Title :" $ListItem["Title"]
}
Consulta CAML en SharePoint Online para ordenar en orden ascendente o descendente
Aquí está el CSOM CAML Query PowerShell para ordenar los resultados.
#Set parameter values
$SiteURL="https://crescent.sharepoint.com/"
$ListName="Projects"
#Get Credentials to connect
$Cred= Get-Credential
#Setup the context
$Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
$Ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.Username, $Cred.Password)
#Get the List
$List = $Ctx.Web.lists.GetByTitle($ListName)
#Define the CAML Query
$Query = New-Object Microsoft.SharePoint.Client.CamlQuery
$Query.ViewXml = "@
<View>
<Query>
<OrderBy><FieldRef Name='Title' /></OrderBy>
</Query>
</View>"
#Get All List Items matching the query
$ListItems = $List.GetItems($Query)
$Ctx.Load($ListItems)
$Ctx.ExecuteQuery()
Write-host "Total Number of Items:"$ListItems.count
#Loop through each List Item
ForEach($Item in $ListItems)
{
#Do Something
Write-host $Item.id
Write-host $Item["Title"]
}
Para ordenar en orden descendente:
<OrderBy><FieldRef Name='Title' Ascending='FALSE' /></OrderBy>
Operadores mayores que, mayores o iguales que, menores que, menores o iguales que en el campo Moneda:
Obtengamos todos los elementos donde el valor de “Inversión total” sea mayor o igual a 5000
<View>
<Query>
<Where>
<Geq>
<FieldRef Name='TotalInvestment' /><Value Type='Currency'>5000</Value>
</Geq>
</Where>
</Query>
</View>
Combinación de múltiples operadores AND y OR en la consulta CAML de PowerShell:
Combinemos múltiples operadores AND y OR para obtener todos los proyectos con un valor de "Inversión total" entre 5000 y 10000, y el departamento de proyectos es ya sea “Ventas” o “Marketing”.
<View>
<Query>
<Where>
<And>
<And>
<Geq>
<FieldRef Name='TotalInvestment' /><Value Type='Currency'>5000</Value>
</Geq>
<Leq>
<FieldRef Name='TotalInvestment' /><Value Type='Currency'>10000</Value>
</Leq>
</And>
<Or>
<Eq>
<FieldRef Name='ProjectDepartment' /><Value Type='Choice'>Sales</Value>
</Eq>
<Eq>
<FieldRef Name='ProjectDepartment' /><Value Type='Choice'>Marketing</Value>
</Eq>
</Or>
</And>
</Where>
</Query>
</View>"
La validación comienza de arriba a abajo cuando tiene varios operadores "Y" en la consulta CAML.
Consulta CAML de SharePoint Online en PowerShell: el operador "IN"
El operador "In" reemplaza varias condiciones "OR". Valida si los elementos están en alguno de los valores dados (igual que el operador "in" de SQL Server). Aquí hay un ejemplo para el operador "IN" en la consulta CAML: esto obtiene todos los elementos de la lista donde el valor de la columna "Nombre del proyecto" está en cualquiera de las opciones enumeradas en el operador In:
<View>
<Query>
<Where>
<In>
<FieldRef Name='ProjectName' />
<Values>
<Value Type='Text'>Address Book</Value>
<Value Type='Text'>Announcements</Value>
<Value Type='Text'>Birthday</Value>
<Value Type='Text'>Invitation</Value>
</Values>
</In>
</Where>
</Query>
</View>
Obtener elementos de la lista donde un archivo de texto contiene un valor particular:
Obtengamos todos los elementos de la lista donde el nombre del proyecto contiene texto "Inv", como "Factura", "Factura anual", " Inv Mensual”, etc.
<View>
<Query>
<Where>
<Contains>
<FieldRef Name='ProjectName' /><Value Type='Text'>Inv</Value>
</Contains>
</Where>
</Query>
</View>
Ejemplo de consulta CAML para obtener todos los elementos de la lista donde un campo particular no es nulo:
Obtengamos todos los proyectos donde la descripción del proyecto tiene algún valor (no nulo)
<View>
<Query>
<Where>
<IsNotNull><FieldRef Name='ProjectDescription' /></IsNotNull>
</Where>
</Query>
</View>
CAML Consulta ViewFields en PowerShell
El nodo "ViewFields" en CAML define qué campos se recuperarán de la lista. Por ejemplo, desea obtener solo los campos "Nombre del proyecto", "Departamento" y "Ciudad" de la lista.
<View>
<ViewFields>
<FieldRef Name='ProjectName'/>
<FieldRef Name='Department' />
<FieldRef Name='City' />
</ViewFields>
</View>"
Ver alcance en la consulta CAML de SharePoint Online
De forma predeterminada (si no especifica nada para el parámetro de alcance), todos los archivos y carpetas en la carpeta raíz de la lista o biblioteca se consideran alcance.
Obtenga todos los archivos y carpetas en todos los niveles en profundidad
<View Scope='RecursiveAll'>
</View>
Obtener todos los archivos de la carpeta raíz:
<View>
<Query>
<Where>
<Eq>
<FieldRef Name='FSObjType' /><Value Type='Integer'>0</Value>
</Eq>
</Where>
</Query>
</View>
Obtener todas las carpetas de la carpeta raíz de la lista:
<FieldRef Name='FSObjType' /><Value Type='Integer'>1</Value>
Obtener todos los archivos de todas las carpetas de la lista:
<View Scope='RecursiveAll'>
<Query>
<Where>
<Eq>
<FieldRef Name='FSObjType' /><Value Type='Integer'>0</Value>
</Eq>
</Where>
</Query>
</View>
Consulta CAML de SharePoint Online para obtener todas las carpetas de todas las carpetas de la lista:
<View Scope='RecursiveAll'>
<Query>
<Where>
<Eq>
<FieldRef Name='FSObjType' /><Value Type='Integer'>1</Value>
</Eq>
</Where>
</Query>
</View>
Obtener todos los elementos de una subcarpeta específica de la lista:
Consulte: SharePoint Online: obtenga todos los elementos de la lista de una subcarpeta usando PowerShell
Herramienta de creación de consultas CAML de SharePoint
Hay herramientas disponibles para generar consultas CAML. Mis creadores de consultas CAML favoritos para SharePoint Online son U2U CAML Query Builder y CAML Designer, que funcionan con SharePoint local y SharePoint Online.
Errores y soluciones comunes:
Error: “Uno o más tipos de campos no están instalados correctamente. Vaya a la página de configuración de la lista para eliminar estos campos”.
Solución: ¡Los campos se refieren en la consulta CAML por su nombre interno! Asegúrese de que los nombres de los campos referidos sean válidos.
Error: no se puede completar esta acción
Solución: ¡La consulta CAML no está bien formada! Por ejemplo, es posible que tenga una etiqueta

