SharePointのゴミ箱のアイテムをPower Automateを利用して削除する方法を紹介します。
目次 閉じる
Power Automateで削除したいと思った背景
SharePointリストをPower Appsのデータソースとして利用しているアプリがありました。そのアプリで扱うデータは一時的にしか利用しないデータのため、毎週定期的にPower Automateでリストを削除しています。その結果、ゴミ箱にリストの数百件単位の削除データが溜まってしまいました。
SharePointの参加者は数百人だったため、常に圧迫され気味なゴミ箱がさらに圧迫されてしまい、ゴミ箱から探すことが難しくなってきました。
SharePointリストで管理していたデータは一時的にしか利用しないデータのため、復旧も不要。完全にゴミ箱からも削除しておくことで、ゴミ箱をキレイに保ちたいと言ったことがありました。
ゴミ箱をキレイに保つとは?
というのは置いておいて、何らかの理由で復旧したいとき、検索などができないゴミ箱で大量のリストを避けて目的のファイルを探すのは苦痛。発生頻度は低そうですが、対応できそうなため対応することに。
実はゴミ箱に入れずにSharePointリストの項目を削除する方法が見つかりました。今は下の記事の方法を採用しています。
【Power Automate】SharePointのゴミ箱の特定のアイテムを削除する方法全体の流れ
ざっくり全体の流れを解説します。
SharePointのゴミ箱の全データを取得取得します。
「SharePoint に HTTP 要求を送信します」で取得した値を使う為、解析をします。
削除したい項目だけに絞るためにフィルターをかけます。
アレイのフィルター処理の結果を分析。
「アレイのフィルター処理」で取得した削除する項目を削除します。
実際の画面はこちら
解説
細かくそれぞれを解説していきます。
削除したいサイトのアドレスを指定し、方法は「GET」でURIには下記を指定します。
_api/web/RecycleBin
「RecycleBin」はゴミ箱を指定するURIです。
ヘッダーには下記を指定します。(※テキストモードで下記をそのまま貼り付けて使えます)
{
"Accept": "application/json;odata=verbose",
"Content-Type": "application/json;odata=verbose",
"": ""
}
コンテンツには①のBody(本文)(@{body(‘SharePoint_にHTTP要求を送信します’)})を入れます。
{
"type": "array",
"items": {
"type": "object",
"properties": {
"__metadata": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"uri": {
"type": "string"
},
"type": {
"type": "string"
}
}
},
"Author": {
"type": "object",
"properties": {
"__deferred": {
"type": "object",
"properties": {
"uri": {
"type": "string"
}
}
}
}
},
"DeletedBy": {
"type": "object",
"properties": {
"__deferred": {
"type": "object",
"properties": {
"uri": {
"type": "string"
}
}
}
}
},
"AuthorEmail": {
"type": "string"
},
"AuthorName": {
"type": "string"
},
"DeletedByEmail": {
"type": "string"
},
"DeletedByName": {
"type": "string"
},
"DeletedDate": {
"type": "string"
},
"DeletedDateLocalFormatted": {
"type": "string"
},
"DirName": {
"type": "string"
},
"DirNamePath": {
"type": "object",
"properties": {
"__metadata": {
"type": "object",
"properties": {
"type": {
"type": "string"
}
}
},
"DecodedUrl": {
"type": "string"
}
}
},
"Id": {
"type": "string"
},
"ItemState": {
"type": "integer"
},
"ItemType": {
"type": "integer"
},
"LeafName": {
"type": "string"
},
"LeafNamePath": {
"type": "object",
"properties": {
"__metadata": {
"type": "object",
"properties": {
"type": {
"type": "string"
}
}
},
"DecodedUrl": {
"type": "string"
}
}
},
"Size": {
"type": "string"
},
"Title": {
"type": "string"
}
},
"required": [
"__metadata",
"Author",
"DeletedBy",
"AuthorEmail",
"AuthorName",
"DeletedByEmail",
"DeletedByName",
"DeletedDate",
"DeletedDateLocalFormatted",
"DirName",
"DirNamePath",
"Id",
"ItemState",
"ItemType",
"LeafName",
"LeafNamePath",
"Size",
"Title"
]
}
}
削除したい項目を絞るため、フィルター処理をします。
よく使いそうな項目を書いておきます。
プロパティ | 内容 |
---|---|
AuthorEmail | 作成者のメールアドレス |
AuthorName | 作成者名(フルネーム) |
DeletedByEmail | 削除者のメールアドレス |
DeletedByName | 削除者名(フルネーム) |
DeletedDate | 削除日時 |
DirName | 元の場所のパス (例:sites/testshp/Lists/Listname) |
ここでは”DeletedDate”を使って、◯日以降に削除されたデータを指定しています。
日付の表示形式は”yyyy-MM-ddTHH:mm:ssZ”の形式で指定します。
日付の表示形式が分からない方はこちらの記事を読んで下さい。
それ以外にもSharePointリスト内の項目の値も取得できるので、「タイトル列が◯◯だけ」というフィルターも可能です。
アレイのフィルター処理の結果に対してJSONの解析を行います。
コンテンツにはアレイのフィルター処理の結果「本文(body)(@{body(‘アレイのフィルター処理’)})」を入れます。
{
"type": "array",
"items": {
"type": "object",
"properties": {
"__metadata": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"uri": {
"type": "string"
},
"type": {
"type": "string"
}
}
},
"Author": {
"type": "object",
"properties": {
"__deferred": {
"type": "object",
"properties": {
"uri": {
"type": "string"
}
}
}
}
},
"DeletedBy": {
"type": "object",
"properties": {
"__deferred": {
"type": "object",
"properties": {
"uri": {
"type": "string"
}
}
}
}
},
"AuthorEmail": {
"type": "string"
},
"AuthorName": {
"type": "string"
},
"DeletedByEmail": {
"type": "string"
},
"DeletedByName": {
"type": "string"
},
"DeletedDate": {
"type": "string"
},
"DeletedDateLocalFormatted": {
"type": "string"
},
"DirName": {
"type": "string"
},
"DirNamePath": {
"type": "object",
"properties": {
"__metadata": {
"type": "object",
"properties": {
"type": {
"type": "string"
}
}
},
"DecodedUrl": {
"type": "string"
}
}
},
"Id": {
"type": "string"
},
"ItemState": {
"type": "integer"
},
"ItemType": {
"type": "integer"
},
"LeafName": {
"type": "string"
},
"LeafNamePath": {
"type": "object",
"properties": {
"__metadata": {
"type": "object",
"properties": {
"type": {
"type": "string"
}
}
},
"DecodedUrl": {
"type": "string"
}
}
},
"Size": {
"type": "string"
},
"Title": {
"type": "string"
}
},
"required": [
"__metadata",
"Author",
"DeletedBy",
"AuthorEmail",
"AuthorName",
"DeletedByEmail",
"DeletedByName",
"DeletedDate",
"DeletedDateLocalFormatted",
"DirName",
"DirNamePath",
"Id",
"ItemState",
"ItemType",
"LeafName",
"LeafNamePath",
"Size",
"Title"
]
}
}
サイトのアドレスを指定し、方法は「DELETE」を指定します。
URIには、下記のような形式で指定します。
.
_api/web/RecycleBin('【アイテムID】')
【アイテムID】には関数モード(Expression)で下記の値を入れます。
@{items('Apply_to_each')['Id']}
注意点
Power automateから削除できるデータは自分が削除したデータのみです。元々のデータ作成者が自分であっても、削除した人が自分以外の場合は削除できません。
通常、ゴミ箱から削除をすると第二のゴミ箱に入りますが、このHTTPアクションで削除すると第二のゴミ箱に入らず、完全に削除されます。
復旧は不可能になりますので、本当に消したいデータだけに対して実行してください。