SharePoint Online でアイテムの更新状況を取得する(ChangeQuery)
経緯
SharePoint Online のあるリストから、定期的に更新情報を取得して別のストレージに保存するというのをやったので、その時使った ChangeQuery についてメモ。
環境
クライアント環境
- Windows 10 Pro
- PowerShell 5.1.17134.165
SharePoint Online 環境
- Site URL: https://<tenant>.sharepoint.com/sites/example
-
リスト名: SyncBase
列名 内部列名 列のタイプ タイトル Title 1行テキスト コメント Comment 1行テキスト
コード
まずは、いつもの SharePoint Online へログインまでです。
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client")
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client.Runtime")
# SharePoint Online の URL
$siteUrl = 'https://<tenant>.sharepoint.com/sites/example'
# ユーザー名
$user = '[email protected]';
# パスワード
$secure = Read-Host -Prompt "Enter the password for ${user}(Office365)" -AsSecureString;
# SharePoint Online 認証情報
$credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($user, $secure);
# SharePoint Client Context インスタンスを生成
$ctx = New-Object Microsoft.SharePoint.Client.ClientContext($siteURL)
$ctx.Credentials = $credentials
次に ChangeQuery のインスタンスを生成、設定します
# ChangeQueryの定義
$cq = [Microsoft.SharePoint.Client.ChangeQuery]::new($false, $false)
$cq.Item = $true # アイテムの更新が対象
$cq.Add = $true # 追加したアイテム情報が対象
$cq.Update = $true # 修正したアイテム情報が対象
$cq.DeleteObject = $true # 削除したアイテム情報が対象
ChangeQeury インスタンスを生成する時の引数は以下の通り
new(allChangeObjectTypes:boolean, allChangeTypes:boolean)
ALL とか使うより、個人的にはコードで設定したほうが分かりやすいと思う
あとはリストからアイテムを取得するだけ
# 対象リスト
$list = $ctx.Web.Lists.GetByTitle('SyncBase')
# 対象リストから更新のあったアイテムを取得
$changeItems = $list.GetChanges($cq)
$ctx.Load($changeItems)
$ctx.ExecuteQuery()
取得した件数を確認
PS > $changeItems.Count
0
とりあえず 0 件
リスト SyncBase アイテムを追加する
その後、もう一度データの取得処理をしてみる
$changeItems = $list.GetChanges($cq)
$ctx.Load($changeItems)
$ctx.ExecuteQuery()
PS > $changeItems.Count
1
取得されたアイテム情報
PS > $changeItems
ActivityType :
ContentTypeId :
Editor :
EditorEmailHint :
EditorLoginName :
FileSystemObjectType :
FileType :
Hashtag :
Hidden :
ItemId : 1
ListId : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
ListTemplate :
ListTitle :
ServerRelativeUrl :
SharedByUser :
SharedWithUsers :
Title :
WebId : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
ChangeToken : Microsoft.SharePoint.Client.ChangeToken
ChangeType : Add
RelativeTime :
SiteId : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Time : 2018/07/21 11:24:50
Context : Microsoft.SharePoint.Client.ClientContext
Tag :
Path :
ObjectVersion :
ServerObjectIsNull : False
TypedObject : Microsoft.SharePoint.Client.ChangeItem
ItemId と ChangeType が Add で取得できているのがわかる
次に編集して、ItemId, ChageType, Time に絞って取り直してみる。
PS > $changeItems | Select-Object ItemId, ChangeType, Time
ItemId ChangeType Time
------ ---------- ----
1 Add 2018/07/21 11:24:50
1 Update 2018/07/21 12:15:46
最後に削除して、ItemId, ChageType, Time に絞って取り直してみる。
PS > $changeItems | Select-Object ItemId, ChangeType, Time
ItemId ChangeType Time
------ ---------- ----
1 Add 2018/07/21 11:24:50
1 Update 2018/07/21 12:15:46
1 DeleteObject 2018/07/21 12:26:23
今回はこれでおしまい!
ディスカッション
ピンバック & トラックバック一覧
[…] 前回「SharePoint Online でアイテムの更新状況を取得する(ChangeQuery)」の続き […]