LoginSignup
2
3

More than 5 years have passed since last update.

SharePoint Online でアイテムの更新状況を取得する(ChangeQuery)

Last updated at Posted at 2018-07-23

ブログからの転載

経緯

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 = 'miyamiya@example.com';
# パスワード
$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

今回はこれでおしまい!

参考

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3