Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What are the problem?

posted at

updated at

Organization

PowerAutomateを使ってSharePointListsの変更履歴を記録する

はじめに

SharePointLists(以下リスト)を使ってチーム内のタスク管理をしようとしたときに、リストの変更履歴を別のリストで管理できたら便利だよなぁ。という意見がチーム内で出たので、実装してみました。

そもそもリストは以下のように各項目がバージョン管理されており、すぐに更新前のバージョンに戻すことができます。
image.png

今回は、このVersion historyのデータをAPIを使って引っ張ってきて、変更履歴用のリストに記録するというフローをPowerAutomateで作ってみます。

変更履歴リスト

変更履歴保存用のリストは以下のように作りました。
いつ、だれが、なにを、どのように変更したのかわかるようにデータを格納できるように作りました。
image.png

こちらのリストにPowerAutomateでデータを格納していきます。

PowerAutomateでフローを作っていく

新規に空白のフローを作成

トリガーは「アイテムが作成または変更されたとき」を使用する
image.png

「リスト変更ステータス取得」アクションで、必要な情報を取得

IDは、「アイテムが作成または変更されたとき」トリガーで取得した「ID」
以降は、「アイテムが作成または変更されたとき」トリガーで取得した「ウィンドウ開始のトークンのトリガー」
image.png

変数を初期化

バージョンの変数は、「リスト変更ステータス取得」アクションで取得した「開始バージョン」「終了バージョン」をそれぞれ変更前、変更後の変数に格納する。
ただし、そのままバージョンだけを変数に取得しても、後述のHTTP要求の際にエラーとなるため、「リスト変更ステータス取得」で取得したバージョンを整数に直し、512を掛け算する式を変数として入れる必要がある。
変数に入れる式
mul(int(リスト変更ステータス取得の開始or終了バージョン番号),512)
image.png

リストのVersion historyデータを取得

Version historyのデータは「SharePointにHTTP要求を送信します」コネクタを使用して取得します。
image.png
上記のような方法で、リスト変更前と、変更後をそれぞれ取得して比較するといったやり方です。
URIには以下のように設定
_api/web/lists/getbytitle('リスト名')/Items(変更したアイテムのID)/versions(バージョン)

JSON解析

「JSONの解析」アクションで「SharePointにHTTP要求を送信します」で取得したものをJSONで解析する。
image.png

リスト変更前後のデータを変数へ格納

「JSONの解析」アクションの解析結果を、リストの項目別に変数に入れていく。
(変更前、変更後それぞれ変数に入れる)
image.png

!!注意!!
日時データをUTCからJSTに変換したものを変数に入れようとした際に気づいたこと。
日時データをConvertFromUtc関数でJSTに変換した値を変数に格納しようとしたところ、データがnullの場合エラーが発生したため、if関数を使用し、nullの場合は変数にnullを格納するように設定。
タイムゾーン変換null判定式
if(equals(empty([JSON解析_日時データ]),True),'',convertFromUtc([JSON解析_日時データ],'Tokyo Standard Time','yyyy/MM/dd HH:mm'))

各項目の変更判定とリストへデータ記録

新規作成された項目の判定

変更ではなく、新規作成されたものも変更履歴に記録したい場合は、条件で、開始バージョンの値と終了バージョンの値が等しい時に変更履歴リストに記録するようにする。
image.png

変更された項目の判定

変更の場合は、「リスト変更ステータス取得」アクションで取得した、各項目の「列が変更されています。[項目名]」がtrueの時に変更履歴リストに記録するようにする。
変更前の値と、変更後の値は、JSON解析結果を格納した変数を指定
image.png

赤枠部分を条件にする
image.png

PowerAutomateフロー全体図

※フロー全体は縦に長いので折りたたみしています

フロー全体図
image.png

最後に

変数が多くなり、ずいぶんと縦長のフローとなってしまいました。
もしかしたらもっとスマートにできるやり方があるかもしれませんが、変更履歴を格納する為のやり方・考え方はあまり変わらないと思うので、参考にしていただけたら幸いです。

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
0
Help us understand the problem. What are the problem?