SharePoint Online: consulta CAML para el campo de búsqueda en PowerShell
Requisito: Consulta CAML para el campo de búsqueda en SharePoint Online mediante PowerShell.
CAML para valor del campo de búsqueda de SharePoint:
Los campos de búsqueda en SharePoint permiten a los usuarios seleccionar un valor de otra lista, que luego se vincula al elemento de la lista actual. Los campos de búsqueda se utilizan para crear una relación entre dos listas. CAML (Lenguaje de marcado de aplicaciones colaborativas) es un lenguaje de consulta basado en XML que se utiliza en SharePoint para consultar datos de listas y bibliotecas. En este artículo, veremos cómo crear una consulta CAML para un campo de búsqueda en PowerShell.
Filtremos proyectos por el valor del campo de búsqueda del proyecto principal "Libreta de direcciones". Aquí está el CAML de SharePoint para un campo de búsqueda.
#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"
$LookupValue="Address Book"
#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 Object
$List = $Ctx.Web.lists.GetByTitle($ListName)
#Define the CAML Query
$Query = New-Object Microsoft.SharePoint.Client.CamlQuery
$Query.ViewXml = "@
<View Scope='RecursiveAll'>
<Query>
<Where>
<Eq>
<FieldRef Name='ParentProject'/><Value Type='Lookup'>$LookupValue</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)
{
#Do something
Write-host $Item.id
Write-host $Item["Title"]
}
Consulta CAML de SharePoint para filtrar el campo de búsqueda por ID:
Dado que el texto de búsqueda definido en la lista principal puede cambiar en cualquier momento, usemos el ID del campo de búsqueda en lugar de texto. Aquí está la consulta CAML de PowerShell para la columna de búsqueda.
#Set parameter values
$SiteURL="https://crescent.sharepoint.com/"
$ListName="Projects"
$LookupID="25" #ID of the Parent Lookup Item
#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 Object
$List = $Ctx.Web.lists.GetByTitle($ListName)
#Define the CAML Query
$Query = New-Object Microsoft.SharePoint.Client.CamlQuery
$Query.ViewXml = "@
<View Scope='RecursiveAll'>
<Query>
<Where>
<Eq>
<FieldRef Name='ParentProject' LookupId='TRUE'/><Value Type='Lookup'>$LookupID</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)
{
#Do something
Write-host $Item["Title"]
}
CAML de SharePoint Online para campos de búsqueda múltiple:
Aquí está la consulta CAML de SharePoint para una columna de búsqueda múltiple, que filtra dónde el valor del campo de búsqueda "Proyecto principal" contiene tanto "Libreta de direcciones" como "Anuncios".
#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 Object
$List = $Ctx.Web.lists.GetByTitle($ListName)
#Define the CAML Query
$Query = New-Object Microsoft.SharePoint.Client.CamlQuery
$Query.ViewXml = "@
<View Scope='RecursiveAll'>
<Query>
<Where>
<And>
<Includes>
<FieldRef Name='ParentProject'/>
<Value Type='LookupMulti'>Address Book</Value>
</Includes>
<Includes>
<FieldRef Name='ParentProject'/>
<Value Type='LookupMulti'>Announcements</Value>
</Includes>
</And>
</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)
{
#Do something
Write-host $Item["Title"]
}