カテゴリ「Power Automate」の35件の投稿 Feed

2022年12月22日 (木)

この記事は Microsoft Power Automate Advent Calendar 2022 に参加しています。2022/12/22 の分です。

🎄❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️🎅

今回は開発者寄りの記事です。難易度は高めですが、年末年始の時間のある時に是非チャレンジしてみてくださいね。

これまでも Microsoft Graph API には SharePoint ページを操作するための API (beta バージョンのみ) がありましたが、 2022年11月末に新しいペーター版がリリースされました。これによりこれまでできなかった、SharePoint モダンページおよびニュース投稿の取得、作成、管理ができます。既存の pages beta API は新しい API に置き換わることになります。

私にとっては待望の API で、これが正式にリリースされて充実してくると色々とできることが増えます。

2023年4月末までにGAが予定されています。公式情報は下記を参照してください。

🔗Announcing the new SharePoint Pages API in Microsoft Graph - Microsoft 365 Developer Blog

さて、今回はこの Graph API (Pages API) を使って、以前から試してみたかった Power Apps から SharePoint ページを作成して発行してみることにします。

ただし、細かいパラメータオプションや JSON などは1つのブログに収まりきる量ではないので、今回は「読者の方が頑張って自分でちょっと試してみることができる」よう情報を簡素化にしています。ヒントとなる情報はちりばめておきますので、詳細はご自身で頑張って学習を進めてみてください。

あとは弊社のオフィスアイ ラーニング ポータル(有料サービス) には、情報を整理して公開しています。ご興味があればこちらもどうぞ。

これができると定型的なページ作成が Power Apps や Power Automate で対応できるなぁという話です。

今回のベータ版リリースの範囲

このリリースでは次の機能が提供されます。

  • ページおよびニュースコンテンツの取得
  • ページおよびニュース投稿の作成
  • ページおよびニュース投稿の削除
  • ページの一覧の取得
  • ページおよびニュースの投稿の発行

今回のスコープ外は次の通りとなっているので注意しましょう。

  • 既存ページの編集
  • ニュースリンクの生成

上記ビデオでは想定されるシナリオ例としては次のような内容を取り上げていました。

想定される利用シナリオ

シナリオ1

組織の CDN や Microsoft ストック画像、パブリックリソースにある画像とともにUX 内でページを作成して(要はどこからでも参照できる画像を使うこと)、ページの JSON を取得して、それをもとに異なるサイト間やテナント間で同じページを作成する

シナリオ2

すべてのページの一覧を取得し、特定のプロパティでフィルターしたあとでそれらのページを一括削除する

Graph エクスプローラーを使ってサイトIDを取得する

Graph API を使うにはページを作成する先のサイトのIDを取得する必要があります。Graph エクスプローラーの基本的な使い方は下記のリンク先を参照してください。

🔗 Graph エクスプローラーを使用して Microsoft Graph API を試す - Microsoft Graph | Microsoft Learn

まず Graphエクスプローラーにアクセスします。

🔗 Graph Explorer | Try Microsoft Graph APIs - Microsoft Graph

右側の顔写真のところをクリックして、Microsoft 365 アカウントでサインインします。 

20221222_165906

始めてアクセスするときには Permissins requested のウィンドウが表示されますが、Accept ボタンをクリックします。

20221222_170127

クエリを実行するために、次の操作をします。

  1. GET アクセスになっていることを確認する
  2. beta を指定する
  3. エンドポイントを指定する
  4. Run query ボタンをクリックする

3 のエンドポイントですが、サイトのIDを取得するには次のように指定します。

[ルートのサイトコレクションの場合]

https://graph.microsoft.com/beta/sites/root

[ルートのサイトコレクション以外]

https://graph.microsoft.com/beta/sites/root:<サイトの相対パス>

サイトの相対パスは /sites や /teams から始まるパスです。私の使っているサイトは相対パスが /sites/Labo-GraphAPI であるため、これを指定します。

20221222_170406

クエリを実行した結果取得できる id をメモしておきます。後で Power Automate のフローから利用します。私のサイトの ID だと「

officeilearning.sharepoint.com,5de63e83-091f-42b2-90a2-2aeefe4ab9d7,342f6370-e776-4677-bf1e-dcc2d94985ed

」だということがわかります。

Power Apps のアプリを用意する

記事を投稿するためのアプリを用意します。この例ではキャンバスアプリでタブレットレイアウトで作成しています。

20221222_171539

類似したアプリを作ってみてください。必要な項目は次の通りです。

  • ページのタイトル
  • ページのファイル名

あとは、ページ内に書き込みたい内容をこの例では次の項目をリッチテキストのコントロールで用意しています。

  • 本文
  • 備考

作りたいページのイメージを確認しよう

作りたいページのイメージは次の通りです。今回はタイトル領域の設定やクイックリンク Webパーツ、画像Webパーツは固定で、そのほかを適宜差し替えてページを新規に作り発行します。利用する画像はストック画像であるため、どのテナントでも共通して利用できます。

20221222_171949

Power Automate フローを作る 

では Power Apps 側からフローを作成しましょう。この記事ではある程度 フローも作れることを想定しているので、手順はさほど丁寧には説明しませんのであしからず。。。(ちなみに、弊社でも Power Automate のフローの研修もやってますので、もしよければそういったものもご利用ください)。

ということで、[フローを新規作成する]をクリックします。

20221222_172208

トリガーを PowerApps (V2) に差し替え、次のように指定します。フロー名も任意に指定しておきましょう。

20221222_172706

次のステップでは変数を用意します。この変数には後ほど作成したページのIDを格納します。

20221222_172846

次のアクションに Office 365 Group コネクターの HTTP要求の送信アクションを追加します。これで Graph API を呼び出します。

URI には先ほど取得したサイトのIDを使って次のように指定します。

https://graph.microsoft.com/beta/sites/<サイトのID>/pages

メソッドは POST を指定しましょう。

20221222_173005

さて、問題が本文です。ここに指定するJSONがページ情報を決めることになります。詳しい話は色々と盛りだくさんにあるのですが、今回は、私が用意したソースを写経してみてください。下記の通りです。


     {
        "name": ".aspx",
        "title": "",
        "pageLayout": "article",
        "thumbnailWebUrl": "https://cdn.hubblecontent.osi.office.net/m365content/publish/4785e3b9-c5d0-4fac-813b-8cbc5e744eb4/thumbnails/large.jpg?file=dv735012.jpg",
        "promotionKind": "page",
        "showComments": true,
        "showRecommendedPages": true,
        "titleArea": {
            "enableGradientEffect": true,
            "imageWebUrl": "https://cdn.hubblecontent.osi.office.net/m365content/publish/4785e3b9-c5d0-4fac-813b-8cbc5e744eb4/dv735012.jpg",
            "layout": "colorBlock",
            "showAuthor": false,
            "showPublishedDate": true,
            "showTextBlockAboveTitle": true,
            "textAboveTitle": "Advent Calendar 2022",
            "textAlignment": "left",
            "imageSourceType": 2,
            "title": "Colone Page - 1",
            "imgHeight": 1360,
            "imgWidth": 2048,
            "translateX": 49.26108374384236,
            "translateY": 37.77777777777778,
            "hasTitleBeenCommitted": true,
            "serverProcessedContent": {
                "htmlStrings": [],
                "searchablePlainTexts": [],
                "links": [],
                "imageSources": [
                    {
                        "key": "imageSource",
                        "value": "https://cdn.hubblecontent.osi.office.net/m365content/publish/4785e3b9-c5d0-4fac-813b-8cbc5e744eb4/dv735012.jpg"
                    }
                ],
                "customMetadata": [
                    {
                        "key": "imageSource",
                        "value": {
                            "width": 2048,
                            "height": 1360
                        }
                    }
                ]
            }
        },
        "canvasLayout": {
            "horizontalSections": [
                {
                    "layout": "oneThirdRightColumn",
                    "id": "1",
                    "emphasis": "none",
                    "columns": [
                        {
                            "id": "1",
                            "width": 8,
                            "webparts": [
                                {
                                    "@odata.type": "#microsoft.graph.textWebPart",
                                    "innerHtml": "Body"
                                }
                            ]
                        },
                        {
                            "id": "2",
                            "width": 4,
                            "webparts": [
                                {
                                    "@odata.type": "#microsoft.graph.standardWebPart",
                                    "webPartType": "c70391ea-0b10-4ee9-b2b4-006d3fcad0cd",
                                    "data": {
                                        "audiences": [],
                                        "dataVersion": "2.2",
                                        "description": "アイコン、画像、対象ユーザーのターゲット設定のオプションを使用して、ドキュメント、画像、ビデオなどのコンテンツへのリンクのコレクションをさまざまなレイアウトで表示します。",
                                        "title": "クイック リンク",
                                        "properties": {
                                            "isMigrated": true,
                                            "layoutId": "CompactCard",
                                            "shouldShowThumbnail": true,
                                            "imageWidth": 100,
                                            "hideWebPartWhenEmpty": true,
                                            "dataProviderId": "QuickLinks",                                         
                                            "items@odata.type": "#Collection(graph.Json)",
                                            "items": [
                                                {
                                                    "thumbnailType": 3,
                                                    "id": 1,
                                                    "description": "",
                                                    "altText": "",
                                                    "rawPreviewImageMinCanvasWidth": 32767,
                                                    "sourceItem": {
                                                        "@odata.type": "#graph.Json",
                                                        "itemType": 2,
                                                        "fileExtension": "",
                                                        "progId": ""
                                                    }
                                                }
                                            ],
                                            "listLayoutOptions": {
                                                "@odata.type": "#graph.Json",
                                                "showDescription": false,
                                                "showIcon": true
                                            },
                                            "buttonLayoutOptions": {
                                                "@odata.type": "#graph.Json",
                                                "showDescription": false,
                                                "buttonTreatment": 2,
                                                "iconPositionType": 2,
                                                "textAlignmentVertical": 2,
                                                "textAlignmentHorizontal": 2,
                                                "linesOfText": 2
                                            },
                                            "waffleLayoutOptions": {
                                                "@odata.type": "#graph.Json",
                                                "iconSize": 1,
                                                "onlyShowThumbnail": false
                                            }
                                        },
                                        "serverProcessedContent": {
                                            "htmlStrings": [],
                                            "searchablePlainTexts": [
                                                {
                                                    "key": "title",
                                                    "value": "参考"
                                                },
                                                {
                                                    "key": "items[0].title",
                                                    "value": "ペンギン - Wikipedia"
                                                }
                                            ],
                                            "links": [
                                                {
                                                    "key": "baseUrl",
                                                    "value": "/sites/Labo-GraphAPI"
                                                },
                                                {
                                                    "key": "items[0].sourceItem.url",
                                                    "value": "https://ja.wikipedia.org/wiki/%e3%83%9a%e3%83%b3%e3%82%ae%e3%83%b3"
                                                }
                                            ],
                                            "imageSources": [
                                                {
                                                    "key": "items[0].rawPreviewImageUrl",
                                                    "value": "https://upload.wikimedia.org/wikipedia/commons/thumb/b/b1/African_Penguin_at_Boulders_Beach_1.jpg/1200px-African_Penguin_at_Boulders_Beach_1.jpg"
                                                }
                                            ],
                                            "componentDependencies": [
                                                {
                                                    "key": "layoutComponentId",
                                                    "value": "706e33c8-af37-4e7b-9d22-6e5694d92a6f"
                                                }
                                            ],
                                            "customMetadata": [
                                                {
                                                    "key": "items[0].rawPreviewImageUrl",
                                                    "value": {
                                                        "fixedwidth": "100",
                                                        "mincanvaswidth": "32767"
                                                    }
                                                }
                                            ]
                                        }
                                    }
                                },
                                {
                                    "@odata.type": "#microsoft.graph.standardWebPart",
                                    "webPartType": "d1d91016-032f-456d-98a4-721247c305e8",
                                    "data": {
                                        "audiences": [],
                                        "dataVersion": "1.11",
                                        "description": "画像、ピクチャ、または写真をテキストを重ねたページに追加し、画像のトリミングやサイズ変更を行うことができます。",
                                        "title": "画像",
                                        "properties": {
                                            "imageSourceType": 2,
                                            "captionText": "",
                                            "altText": "",
                                            "linkUrl": "",
                                            "overlayText": "",
                                            "fileName": "崩落する氷山.jpg",
                                            "imgWidth": 3015,
                                            "imgHeight": 2410,
                                            "alignment": "Center",
                                            "fixAspectRatio": false,
                                            "overlayTextStyles": {
                                                "@odata.type": "#graph.Json",
                                                "textColor": "light",
                                                "isBold": false,
                                                "isItalic": false,
                                                "textBoxColor": "dark",
                                                "textBoxOpacity": 0.54,
                                                "overlayColor": "light",
                                                "overlayTransparency": 0
                                            }
                                        },
                                        "serverProcessedContent": {
                                            "htmlStrings": [],
                                            "searchablePlainTexts": [],
                                            "links": [],
                                            "imageSources": [
                                                {
                                                    "key": "imageSource",
                                                    "value": "https://cdn.hubblecontent.osi.office.net/m365content/publish/e452fe45-b705-4a5a-aebd-e92f74c2553f/1152450154.jpg"
                                                }
                                            ],
                                            "customMetadata": [
                                                {
                                                    "key": "imageSource",
                                                    "value": {
                                                        "width": "3015",
                                                        "height": "2410"
                                                    }
                                                }
                                            ]
                                        }
                                    }
                                }
                            ]
                        }
                    ]
                },
                {
                    "layout": "oneColumn",
                    "id": "2",
                    "emphasis": "neutral",
                    "columns": [
                        {
                            "id": "1",
                            "width": 12, 
                            "webparts":[
                                {
                                    "@odata.type": "#microsoft.graph.textWebPart",
                                    "innerHtml": "Notes"
                                }
                            ]
                        }
                    ]
                }
            ]
        }
    }

name と title プロパティに動的なコンテンツを指定します。

20221222_180124

次の図に示す"innerHtml"の値を Body から動的コンテンツ置き換えます。

20221222_174733_3

クイックリンク Webパーツの部分のサイトの相対パスを自身のサイトのものに書き換えます。

20221222_174554_3

下の方にある "innerHtml" のプロパティの値を Notes から動的コンテンツに書き換えます。

20221222_174923_2

次のステップとして JSON の解析アクションを追加します。コンテンツに指定する「本文」はひとつ前のステップの出力結果です。20221222_175035

スキーマは下記の内容をコピーして貼り付けましょう。


{
    "type": "object",
    "properties": {
        "@@odata.context": {
            "type": "string"
        },
        "@@odata.etag": {
            "type": "string"
        },
        "eTag": {
            "type": "string"
        },
        "id": {
            "type": "string"
        },
        "lastModifiedDateTime": {
            "type": "string"
        },
        "name": {
            "type": "string"
        },
        "webUrl": {
            "type": "string"
        },
        "title": {
            "type": "string"
        },
        "pageLayout": {
            "type": "string"
        },
        "thumbnailWebUrl": {
            "type": "string"
        },
        "promotionKind": {
            "type": "string"
        },
        "showComments": {
            "type": "boolean"
        },
        "showRecommendedPages": {
            "type": "boolean"
        },
        "createdBy": {
            "type": "object",
            "properties": {
                "user": {
                    "type": "object",
                    "properties": {
                        "displayName": {
                            "type": "string"
                        },
                        "email": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "lastModifiedBy": {
            "type": "object",
            "properties": {
                "user": {
                    "type": "object",
                    "properties": {
                        "displayName": {
                            "type": "string"
                        },
                        "email": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "parentReference": {
            "type": "object",
            "properties": {
                "siteId": {
                    "type": "string"
                }
            }
        },
        "contentType": {
            "type": "object",
            "properties": {
                "id": {
                    "type": "string"
                },
                "name": {
                    "type": "string"
                }
            }
        },
        "publishingState": {
            "type": "object",
            "properties": {
                "level": {
                    "type": "string"
                },
                "versionId": {
                    "type": "string"
                }
            }
        },
        "reactions": {
            "type": "object",
            "properties": {}
        },
        "titleArea": {
            "type": "object",
            "properties": {
                "enableGradientEffect": {
                    "type": "boolean"
                },
                "imageWebUrl": {
                    "type": "string"
                },
                "layout": {
                    "type": "string"
                },
                "showAuthor": {
                    "type": "boolean"
                },
                "showPublishedDate": {
                    "type": "boolean"
                },
                "showTextBlockAboveTitle": {
                    "type": "boolean"
                },
                "textAboveTitle": {
                    "type": "string"
                },
                "textAlignment": {
                    "type": "string"
                },
                "title": {
                    "type": "string"
                },
                "authors@odata.type": {
                    "type": "string"
                },
                "authors": {
                    "type": "array"
                },
                "authorByline@odata.type": {
                    "type": "string"
                },
                "authorByline": {
                    "type": "array"
                },
                "imageSourceType": {
                    "type": "integer"
                },
                "imgHeight": {
                    "type": "integer"
                },
                "imgWidth": {
                    "type": "integer"
                },
                "translateX": {
                    "type": "number"
                },
                "translateY": {
                    "type": "number"
                },
                "hasTitleBeenCommitted": {
                    "type": "boolean"
                },
                "serverProcessedContent": {
                    "type": "object",
                    "properties": {
                        "htmlStrings": {
                            "type": "array"
                        },
                        "searchablePlainTexts": {
                            "type": "array"
                        },
                        "links": {
                            "type": "array"
                        },
                        "imageSources": {
                            "type": "array",
                            "items": {
                                "type": "object",
                                "properties": {
                                    "key": {
                                        "type": "string"
                                    },
                                    "value": {
                                        "type": "string"
                                    }
                                },
                                "required": [
                                    "key",
                                    "value"
                                ]
                            }
                        },
                        "customMetadata": {
                            "type": "array",
                            "items": {
                                "type": "object",
                                "properties": {
                                    "key": {
                                        "type": "string"
                                    },
                                    "value": {
                                        "type": "object",
                                        "properties": {
                                            "width": {
                                                "type": "integer"
                                            },
                                            "height": {
                                                "type": "integer"
                                            }
                                        }
                                    }
                                },
                                "required": [
                                    "key",
                                    "value"
                                ]
                            }
                        }
                    }
                }
            }
        }
    }
}

次のステップで pageId 変数に JSON解析の出力から id を設定します。20221222_175224_2

次のステップで再び Office 365 Group コネクターの HTTP要求アクションを追加します。これでページを発行します。URIは次の通りです。

https://graph.microsoft.com/beta/sites/<サイトのID>/pages/<ページのID>/publish

20221222_175329_2

最後に Power Apps コネクターの応答アクションを追加しておきます。20221222_175555_2

Power Apps からフローを呼び出す

Power Apps アプリ内に用意しておいたボタンコントロールからフローを呼び出します。OnSelect プロパティには例えば次のように指定します。

UpdateContext({Result:'ページ作成(PagesAPIprev)'.Run(TextInput_Page_Title.Text,TextInput_Page_Name.Text,
RichTextEditor_Body.HtmlText,RichTextEditor_Notes.HtmlText).response});
Notify(Result,NotificationType.Success)

20221222_182032

動作を確認する

アプリをプレビュー実行して動作を確認しましょう。

それでは、Happy Holidays !!

2022年11月12日 (土)

2022年10月18日~20日まで開催されたコミュニティイベントである「Japan Power Platform Conference 2022」で登壇したときの動画が公開されましたので資料とともに共有します。

SharePoint リスト (=Microsoft Lists) の管理を行うためのアプリを40分強で Power Apps + Power Automate を使って作成しています。機能は次の通り。

  • 任意のサイトのリスト一覧の取得
  • リスト名の変更
  • リストの説明の変更
  • リストのURLの変更
  • リストの列一覧 (内部列名の確認)

同じアプリを作ってみたい方は、まずはセッションの内容をビデオで確認していただき、そのうえですでに公開している PowerPoint の資料で補足してみてください。

ビデオは下記の通りです。

補足資料は下記に公開しています。

一通り同じものが作れるようになったら、リストだけでなくライブラリも含めて列一覧を取得したり、特定の列をフィルターできるようにしたりするなど、いろいろとアレンジしてみてくださいね。

2022-11-12_23-09-09

イベントでのその他のビデオや資料は下記の通りです。

録画一覧

Japan Power Platform Conference 2022 - 資料一覧 - connpass

2022年8月 3日 (水)

Microsoft Teams にメッセージを投稿するフローを作っている人も多いと思います。この中で書式指定できる項目とそうでないものがある。

特に書式指定するメニューが用意されていない場合はマークダウン記法が利用できるようになっています。ちなみに、Microsoft Teams で利用できるマークダウンは下記の通り。

[マークダウン] の書式設定を使用Teams (microsoft.com)

2022-08-03_18-57-17

そう思って Microsoft Teams で使えるマークダウン記法と同じものを使おうとするとうまくいかない。そこでもう少し調べてみる必要があります。

すると次の情報が見つかります。クライアントによるサポート状況が異なるのです。

Markdown を使用して Power Automate の承認の書式設定を行う - Power Automate | Microsoft Docs

2022-08-03_17-52-42

例えば、Teams の「アダプティブカードを投稿して応答を待機する」アクションの「更新メッセージ」などでマークダウンが使えるのですが、サポートされないものも多い。Microsoft Teams で使えても Power Automate と組み合わせると使えるものが少なくなるのです。

ということで簡単な実験結果が次の通りで、おおよそ上記の表と合致します。
ちなみに強制改行は半角スペースを2つ分追加しておくことで対応できます。

★元のフロー

2022-08-03_19-02-05

★実行結果

2022-08-03_19-01-36

結論として次の Power Automate の Teams コネクター内でマークダウンが使えるということ。

  • 斜体
  • 段落番号 (入れ子も含む)
  • ハイパーリンク

実験したい人用に上記のマークダウンもおいておきます。


■太字 : *太字*  
■斜体: _斜体_  
■取り消し線: ~取り消し線~  
■段落番号:   
1. いちご  
1. バナナ  
  
■順序無しリスト:  
* いちご  
* バナナ  
- いちご  
- バナナ  
  
■入れ子(ネスト)  
1. フルーツ.
   - 
   - 
1. 野菜
   - ブロッコリー
   - ピーマン
   - 人参
  
■ハイパーリンク型: [オフィスアイ](https://www.office-i-corp.jp/)  
■複数行コードブロック:   
```let temparature:number=39.4  
■インラインコードブロック :   
`[let temparature:number=39.4]`  
■ヘッダー:  
##ヘッダーテキスト
2022年7月 8日 (金)

CreateM365Group

秘密度ラベルを適用したMicrosoft 365 グループを作成することで、最初から秘密度ラベルで保護されたチームサイトを作成できます。

こうしたグループ作成は SharePoint REST API または Microsoft Graph APIを用いて作成できますが、PowerShellを使う場合には委任の設定が別途必要になります。詳しくは下記の情報が詳しいです。

Create M365 Group with Sensitivity Label programmatically

Creating the M365 group with Sensitivity Label starts the modern Team site with desired protection. This can be done with SPO Rest API or Microsoft Graph API, both require delegated permissions. The following sample scripts use AAD App ROPC authentication flow (Resource Owner Password Credentials)...

そこで、そういえば Power Automate を使う方法もあるなぁと思いせっかくなので SharePoint コネクターを使った場合のスクリーンショットを共有しておきます。利用するURLは " _api/GroupSiteManager/CrateGroupEx " 。もちろん、これを実行できるのは Microsoft 365 グループが作成できる権限を持っているユーザーに限られます。

2022-07-08_14-17-01

以上で追加設定は特に不要です。

ちなみに、SPSiteLanguage はサイトの既定の言語を指定する LCID (ロケールID) で、日本語だと 1041、英語だと1033です。秘密度ラベルは、CreationOptions 内でラベルIDを指定します。このように作成すればチームサイトは最初から秘密度ラベル適用済みになります。

チームサイト-秘密度ラベル

この方法がわかっていれば、SensitiveLabelは必須ではないので単純な Microsoft 365 グループを作ることもできますよ。

*********************************

秘密度ラベルを使った Microsoft 365 のデータ保護については弊社でオリジナル研修を行っていますので、こちらも併せてどうぞ。

【オフィスアイ株式会社】Microsoft Purview コンプライアンス入門~Microsoft 365ファイルおよびメール・チャットに対する機密情報保護と情報ガバナンス~ (office-i-corp.jp)

 

2022年3月28日 (月)

SharePoint サイト(※モダンサイトです) でサイトページまたはニュースを作成していて、ついうっかり目的のサイトではないところに作成してしまうことがあります。しかし、サイトのページライブラリで操作メニューを確認してもページのコピー先は同一サイトに限られます。残念ながら既定ではサイト間でのページのコピー機能は用意されていません。ですが、どうしても別サイトに一から作成しなおすのは大変だということもあるでしょう。

そんな時には、Power Automate を使ってサイト間でページをコピーするのが最も手っ取り早い方法です。ただし、この場合も注意しなくてはいけないことがあります。まず、コピーしたときには元のサイト内のコンテンツのリンクを持っているとそのままコピーされることになるので、アクセス権限の設定状況によってはユーザーが画像やファイルなどのコンテンツを参照できないかもしれません。また、リストWebパーツやドキュメント ライブラリWebパーツを追加している場合も、もともと同一サイト内にリストやライブラリがある前提となっています。そのため、同一の名前のリストやライブラリがコピー先のサイトにあればそれを取得することになりますが、当該するものがなければWebパーツは空になります。

このように、いつかの懸念事項があるため技術的にはコピーできるものの、運用上のユーザーが混乱することを懸念して、既定では別サイトに安易にコピーができないようになっているのではないかと推測しています。ですから、Power Automate が使えるからと言って安易に利用せず、注意深く利用するようにしてください。

事前準備

今回はSharePoint コネクターの「ファイルのコピー」アクションを使いますが、このアクションでは、コピー元のサイトの「サイトのページ」ライブラリのGUIDが必要です。これを手軽に取得するには、まずサイトのページライブラリの「設定」ページにアクセスすることです。このページを表示しているときのURLを確認しましょう。

2022-03-25_12-52-59

例えば、URLは次のようになっています。

https://<サイトのURL>/_layouts/15/listedit.aspx?List=%7B39a28bb9-3567-475b-a289-f54555841fc8%7D

この末尾の List=の部分がサイトのページライブラリのGUIDです。%7B は "{" のことで %7D は "}" のことです。そのためこのライブラリの GUID は 39a28bb9-3567-475b-a289-f54555841fc8 ということになります。サイトのページライブラリの GUIDは Power Automate から取得することもできますが、フローを実行することなくWebブラウザーだけでさっと確認できるためこの方法も覚えておくとよいでしょう。

フローの構築

今回のフローでは SharePoint コネクターの「選択したファイルの場合」トリガーを利用します。これにより、いつでもコピーしたいページから直接フローを開始できるようになります。ただし、この「選択したファイルの場合」トリガーを使う場合はフローは必ず既定の環境に作成するようにしてください。

なお、ライブラリ名はドロップダウンからは選択できないためカスタム値として先ほどの GUID を指定しましょう。

2022-03-25_11-56-15

次に「ファイルのプロパティの取得」アクションを追加します。ここではトリガーと同じサイトのアドレスとライブラリ名を指定します。IDは「選択したファイルの場合」トリガーで取得したIDを指定します。

2022-03-28_17-33-44

最後に「ファイルのコピー」アクションを追加します。

現在のサイトのアドレスはコピー元のサイトを選択します。コピーするファイルは「ファイルのプロパティの取得」アクションで取得した識別子を選択します。

2022-03-28_17-35-55

送信先サイトのアドレスはコピー先のサイトのアドレスを指定します。インストール先フォルダーはフォルダーアイコンをクリックして SitePages を選びます。

2022-03-28_17-36-15

別のファイルのがすでに存在する場合の指定は、今回は Copy with a new name を選択します。

2022-03-28_17-38-13

あとはフローを保存して、コピー元のサイトの「サイトのページ」ライブラリから任意のページを選択して、フローを実行するだけです。

2022-03-28_17-38-56