Office365(Microsoft365)で、ユーザーオペやスケジュールをトリガーに自動起動する連携処理を実装するのに便利なPowerAutomateですが、実際に業務の中で使おうとするといろいろな制約があります。
そのような制約を克服するため思いついたり調べたりした内容をご紹介していこうと考えています。
Background
SPOサイトのページは内部的にSPOリストの項目として管理されているようです。
これは特に調べたわけでもなく、作業中の手違いで気が付きました。調べてもそのようなことを説明してくれている記事は見つかりませんでした。
それはそれとして。
私の職場ではSPOサイトの1つであるTeamsチームサイトをポータルサイトとして活用しています。
そのサイトで公開しているページやニュースたちも、SPOリストの項目としてPowerAutomateからいろいろ操作できれば、サイト管理業務の改善ができそうです。
Problem
しかしPower AutomateでSPOリストを参照更新するアクション(ステップ)を使う時、アクセス可能なリストの一覧を示すプルダウンに、サイトのページを管理するリストは登場しません。
さあ、早くも雲行きが怪しくなってきました。。
Solution
あれこれ調べた結果はこうです。
まず項目を取得する場合、「複数の項目の取得」アクションの「リスト名」で「カスタム値の入力」を選び「サイトのページ」と記載します。ちょっと違和感がありますが、ちゃんと動きます:
取得した項目を更新するには、RESTfulAPIを利用しましょう。予め準備された「項目の更新」よりもシンプルに、更新が必要な項目だけ指定できます:
「URL」欄には以下の要領で入力をします。リスト項目ID以外は固定です:
_api/web/lists/GetByTitle('サイトのページ')/items(<リスト項目ID>)
「ヘッダー」欄の内容は固定です:
キー | 値 |
---|---|
Content-Type | application/json;odata=verbose |
X-HTTP-Method | MERGE |
IF-MATCH | * |
「ボディ」欄には以下の要領でJSON文字列を指定します:
{
"__metadata": {
"type": "SP.Data.SitePagesItem"
},
// ここに更新したいプロパティと値のペアを列挙
}
SPOでページやニュースを作成された方ならご存知かと思いますが、サイトのページは更新して保存(下書き保存)しただけでは、他のユーザーも見るページの見栄えに変更が反映されません。
そこで「公開」(Publish)します:
「URL」欄には以下の要領で入力をします。リスト項目ID以外は固定です:
_api/sitepages/pages(<リスト項目ID>)/publish
「ヘッダー」欄の内容は固定です。X-HTTP-Methodの値が「POST」であることに注意をしてください:
キー | 値 |
---|---|
Content-Type | application/json;odata=verbose |
X-HTTP-Method | POST |
IF-MATCH | * |
「ボディ」欄には以下の要領でJSON文字列を指定します。ここでもJSONの内容、とくに"__metadata" の値が変化していることに注意をしてください:
{"__metadata":{"type":"SP.Publishing.SitePage"}}
以上でサイトのページを更新し、公開することができます。
おめでとうございます。
これでSPOサイトのページをいろいろなトリガーでもって自動更新できるようになりますね。