SharePoint Online: PowerShell'deki Tarih Saat Alanları için CAML Sorgusu


Gereksinim: Tarih Saat Alanı Değerlerine Göre Filtrelemek için SharePoint Çevrimiçi CAML Sorgusu.

SharePoint CAML: Oluşturulma Tarihine Göre Sırala

İşbirliği Uygulaması İşaretleme Dili (CAML), SharePoint verilerini tanımlamak ve sorgulamak için kullanılan XML tabanlı bir dildir. Bu makalede, SharePoint'teki Tarih ve Saat alanlarını sorgulamak için CAML'nin nasıl kullanılacağını inceleyeceğiz.

Burada “Oluşturulma tarihi” alanını kullanarak Sıralanacak SharePoint Online CAML Sorgusu yer almaktadır.


#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 Object
$List = $Ctx.Web.lists.GetByTitle($ListName)

#Define the CAML Query
$Query = New-Object Microsoft.SharePoint.Client.CamlQuery
$Query.ViewXml = "@
<View Scope='RecursiveAll'>
    <Query>
               <OrderBy><FieldRef Name='Created' Ascending='FALSE' /></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: $($Item["Title"]) Created On: $($Item["Created"])"
}

Tarih Alanına Göre Filtrelemek için CAML Sorgusu:

CAML, “Proje Başlangıç Tarihi”nin şuna eşit olduğu tarihe göre filtrelemek, Say, Proje Listesi öğelerini almak için: 20 Haziran 2017


<View>
    <Query>
        <Where>
            <Eq>
                <FieldRef Name='ProjectStartDate' /><Value Type='DateTime'>2017-06-20T12:00:00Z</Value>
            </Eq>
        </Where>
    </Query>
</View>

SharePoint Online: "Bugün" örnekleriyle CAML Sorgusu:

Proje başlangıç tarihinin bugün olduğu tüm projeleri alın.


<View>
    <Query>
        <Where>
            <Gt>
                <FieldRef Name='ProjectStartDate' /><Value Type='DateTime'><Today /></Value>
            </Gt>
        </Where>
    </Query>
</View>

İşte başka bir örnek: Proje başlangıç tarihinin Bugünün tarihinden sonraki 10 gün içinde olduğu Tüm Projeleri Al.


<View Scope='RecursiveAll'>
    <Query>        
        <Where>
                <Geq>
                    <FieldRef Name='ProjectStartDate' />
                         <Value Type='DateTime'><Today OffsetDays='10' /></Value>
                </Geq>
        </Where>
    </Query>
</View>"

Başlangıç tarihi son 10 gün içinde olan projeleri almak için OffsetDays'i “-10” olarak da kullanabilirsiniz.

Tarihten Büyük için CAML Sorgusu
Veya şunları yapabilirsiniz: belirli bir tarih belirtin: Diyelim ki 1 Ocak 2017'den sonraki tüm tarihler.


<Gt><FieldRef Name='ProjectStartDate' /><Value Type='DateTime'>2017-01-01T12:00:00Z</Value></Gt>

Tarihler Arasını Filtrelemek için SharePoint CAML Sorgusu
Diyelim ki, proje başlangıç tarihi 1 Ocak 2017 ile 31 Aralık 2017 arasında olan tüm projeleri almak istiyoruz. İşte tarih aralığı için SharePoint CAML sorgusu .


<View Scope='RecursiveAll'>
    <Query>        
        <Where>
            <And>
                <Geq>
                    <FieldRef Name='ProjectStartDate' />
                        <Value Type='DateTime'>2017-01-01T12:00:00Z</Value>
                </Geq>
                <Leq><FieldRef Name='ProjectStartDate' />
                    <Value Type='DateTime'>2017-12-31T12:00:00Z</Value>
                </Leq>
            </And>
        </Where>
    </Query>
</View>

Saati İçerecek SharePoint CAML Tarih Saati
Burada, saat ve filtreleri içeren SharePoint CAML Tarih Saati için PowerShell alanı bulunmaktadır - Aralık:


<View Scope='RecursiveAll'>
    <Query>        
        <Where>
            <And>
                <Geq>
                    <FieldRef Name='ProjectStartDate' />
                    <Value Type='DateTime' IncludeTimeValue='TRUE'>2017-01-05T09:00:00Z</Value>
                </Geq>
                <Leq>
                    <FieldRef Name='ProjectStartDate' />
                    <Value Type='DateTime' IncludeTimeValue='TRUE'>2017-01-05T17:00:00Z</Value>
                </Leq>
            </And>
        </Where>
    </Query>
</View>

Tarih saat alanı değerlerini CAML biçimine dönüştürmek için aşağıdakileri kullanın:


[System.DateTime]::Now.ToString("yyyy-MM-ddTHH:mm:ssZ")

Son fakat bir o kadar önemli: SharePoint Online için CAML Sorgusu oluşturmak için CAML Sorgu Oluşturucu Araçlarını kullanın.

İlgili makaleler