#はじめに
SharePointLists(以下リスト)を使ってチーム内のタスク管理をしようとしたときに、リストの変更履歴を別のリストで管理できたら便利だよなぁ。という意見がチーム内で出たので、実装してみました。
そもそもリストは以下のように各項目がバージョン管理されており、すぐに更新前のバージョンに戻すことができます。
今回は、このVersion historyのデータをAPIを使って引っ張ってきて、変更履歴用のリストに記録するというフローをPowerAutomateで作ってみます。
#変更履歴リスト
変更履歴保存用のリストは以下のように作りました。
いつ、だれが、なにを、どのように変更したのかわかるようにデータを格納できるように作りました。
こちらのリストにPowerAutomateでデータを格納していきます。
#PowerAutomateでフローを作っていく
###新規に空白のフローを作成
トリガーは「アイテムが作成または変更されたとき」を使用する
###「リスト変更ステータス取得」アクションで、必要な情報を取得
IDは、「アイテムが作成または変更されたとき」トリガーで取得した「ID」
以降は、「アイテムが作成または変更されたとき」トリガーで取得した「ウィンドウ開始のトークンのトリガー」
###変数を初期化
バージョンの変数は、「リスト変更ステータス取得」アクションで取得した「開始バージョン」「終了バージョン」をそれぞれ変更前、変更後の変数に格納する。
ただし、そのままバージョンだけを変数に取得しても、後述のHTTP要求の際にエラーとなるため、「リスト変更ステータス取得」で取得したバージョンを整数に直し、512を掛け算する式を変数として入れる必要がある。
変数に入れる式
mul(int(リスト変更ステータス取得の開始or終了バージョン番号),512)
###リストのVersion historyデータを取得
Version historyのデータは「SharePointにHTTP要求を送信します」コネクタを使用して取得します。
上記のような方法で、リスト変更前と、変更後をそれぞれ取得して比較するといったやり方です。
URIには以下のように設定
_api/web/lists/getbytitle('リスト名')/Items(変更したアイテムのID)/versions(バージョン)
###JSON解析
「JSONの解析」アクションで「SharePointにHTTP要求を送信します」で取得したものをJSONで解析する。
###リスト変更前後のデータを変数へ格納
「JSONの解析」アクションの解析結果を、リストの項目別に変数に入れていく。
(変更前、変更後それぞれ変数に入れる)
!!注意!!
日時データをUTCからJSTに変換したものを変数に入れようとした際に気づいたこと。
日時データをConvertFromUtc関数でJSTに変換した値を変数に格納しようとしたところ、データがnullの場合エラーが発生したため、if関数を使用し、nullの場合は変数にnullを格納するように設定。
タイムゾーン変換null判定式
if(equals(empty([JSON解析_日時データ]),True),'',convertFromUtc([JSON解析_日時データ],'Tokyo Standard Time','yyyy/MM/dd HH:mm'))
###各項目の変更判定とリストへデータ記録
####新規作成された項目の判定
変更ではなく、新規作成されたものも変更履歴に記録したい場合は、条件で、開始バージョンの値と終了バージョンの値が等しい時に変更履歴リストに記録するようにする。
####変更された項目の判定
変更の場合は、「リスト変更ステータス取得」アクションで取得した、各項目の「列が変更されています。[項目名]」がtrueの時に変更履歴リストに記録するようにする。
変更前の値と、変更後の値は、JSON解析結果を格納した変数を指定
#PowerAutomateフロー全体図
※フロー全体は縦に長いので折りたたみしています
フロー全体図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/301050/b4b1edcf-9ad8-78e2-af0a-9b034fc82e3a.png)#参考
https://mofumofupower.hatenablog.com/entry/2020/07/28/114037