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

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

2022年2月19日 (土)

長期間の承認フロー

Power Automate にはフローの実行継続期間があり、フロー開始されてから30日となっています。

Duration and retention limits

2022-02-19_22-39-26

承認フローのようなフロー完了までに長期間にかかるようなものは、この制限に引っかかってしまうことがあります。そこでマイクロソフトは承認の情報を Microsoft Dataverse に格納することを勧めています。下記の記事は2019年のもので現在ステータスがアーカイブになっていますが参考にはなります。

Long-lived approvals and flows on Common Data Service

かいつまむと 承認 コネクターの 「承認の作成」アクションを使うことで、フローを作成した環境に既定で用意されている Microsoft Dataverse に承認が格納されるとのこと。これをうまく使えば長期実行できるよ、という話です。

そこでたどり着くのが Power Automate Community の「Build long-running Approval Flows」というブログ記事です。これを一通り試せば、おおよそどんなことをすべきかわかるかなと思ったのですが、如何せん、記事が書かれたのが2019年で Dataverse にもなっていない頃です。今のフローで作成してようとすると結構躓きどころが多い。

ということで、2022年2月現在でフローを作り直すとどうなるかをここに書き記しておきます。フローは2つを組み合わせていきます。大まかなイメージは次の通り。

2段階フロー

1つ目のフロー

こは次のように作成します。ポイントは「承認」コネクターの「承認を作成」を使うことですね。

2022-02-19_22-11-15

2つ目のフロー

これには Dataverse のコネクターを使っています。これはプレミアム コネクターであるため有料プランなどが必要ですね。そのためインターネット上にはこのコネクターを使わずにうまくタイムアウトを処理するロジックを構築している例が複数見つかるので、気になる方は探してみてください。

2022-02-19_22-16-50

最初に追加しているのが Dataverse の「行が追加、変更または削除された場合」トリガーです。「種類の変更」は "更新" を指定し、テーブルは Approvals を指定します。

2022-02-19_23-32-37

次に「IDで行を取得する」アクションを追加します。これは承認を依頼したユーザーを特定するために使用しています。

2022-02-19_23-33-59

条件分岐は「行が追加、変更、または削除された場合」トリガーの「Result」を使って、承認されたかどうかを判定します。

2022-02-19_23-35-41

最後は承認または却下された時にメールを送信しています。送信先は「IDで行を取得する」で取得した申請者の「既定電子メール」を指定しています。「Title」は「行が追加、変更、または削除された場合」トリガーからの取得したものです。

2022-02-19_23-37-35

以上の2つのフローを保存したら動作検証しましょう。

検証結果

1つめのフローをテスト実行することで、Microsoft Teams の承認アプリに承認依頼が送られます。これで1つめのフローが実行されたことがわかります。

2022-02-19_10-27-14

これを承認することで無事にメールに結果が届きます。これで2つめのフローも実行されたことがわかります。

おまけ

このフローを構築することでわかったのが、承認コネクターで「承認を作成」することで Approvals という Dataverse のテーブルに承認が追加されることです。実際にビルトインのソリューションである「Microsoft Flow Approvals Core Solution」を見てみると Approval (複数形は Approvals, スキーマ名は msdyn_flow_approval ) テーブルにデータが追加されていることがわかります。

2022-02-19_20-22-02

2022-02-19_20-24-09

2021年7月16日 (金)

AvePoint 社の中村太一さんの企画により開催された

「【Microsoft MVP の祭典 2021】 Microsoft 365 + Power Platform 利活用デモ祭り」

ですが、AvePoint社に全面スポンサーになっていただき、おかげさまで関係者ともども無事に終了することができました!参加いただいた皆様ありがとうございました。

AvePoint Japan さんとの共同企画の無料セミナー - 【Microsoft MVP の祭典 2021】 (weblogs.jp)

ウィークデーの日中にも関わらず、数百名が参加いただいたようで、アンケート結果を見ると皆さん満足していただいたようでホッと安心しました。

今回、ラジオ番組感覚でのメンバーによるテーブルトークをランチタイムに行ったのですが、こちらも思いのほか、楽しんでいただけたようで何よりです

なんだかんだと、業務の合間に準備するのは大変ではあるので、実施した甲斐があったというものです。

IT系のコミュニティ

ITの技術コミュニティに参加する方が増えるといいなというところが、今回の目標の一つでもあったのですが、今までコミュニティからは縁遠かった方々からも興味をもったというフィードバックも少なくなく、目標は達成できたのではないかなと思います。

私自身、「教えることを生業にしている」という職業柄、さほど頻繁に特定のコミュニティにどっぷりとかかわっているわけではありませんが、それでも研修に参加される方々には継続的な学習を続けるにあたり、適宜、ご案内するようにしています。コミュニティという場があれば、情報の収集やアウトプットをしていくことでより知識も深まっていくと思うからです。組織の垣根を越えて、同じようなことで悩んだり、喜んだりする仲間がいるというのも大きいと思いますしね。

コミュニティの全体像については、冒頭で Microsoft 社の森口さんのセッションが非常に参考になるので、まだ視聴していない方はぜひ、ご視聴ください。

資料のご案内

今回登壇した資料は下記の通りです。なお、録画に関しては AvePoint社の登録サイトから事前登録した方に録画へのリンクが後日公開される予定となっています。

[スライド]

他の方の分は AvePoint Japan 公式 Twitter で公開されているのでこちらからどうぞ~。

 

2021年6月16日 (水)

  昨年末に次の記事を公開しました。

[Office Scripts] Excel 内のデータを使って SharePoint ライブラリのプロパティを自動設定しよう (weblogs.jp)

この記事で使っていたのは GA 前の Office Scripts でパブリック プレビューでした。しかし、2021年5月27日に General Availability (GA) に達したことが発表されました。

Office Scripts is now generally available in Excel for the web - Microsoft Tech Community

さて、この記事で説明したフローですが、久しぶりにファイルをアップロードして動作させてみると SharePoint コネクターを使ったファイルのプロパティ更新のアクションが実行できない。で、原因を探るためエラーを確認するとファイルがロックされてしまっているようです。

2021-06-16_13-03-28

エラーのメッセージの要点は「ファイル <ファイルパス> は、<フローの所有者> が排他的に使用するためにロックしています。」というところです。Office Scripts 実行時にファイルの内容を読み取っているので、File Open の状態となっているのでしょう。比較のために単純に、SharePoint コネクターだけを使って「ファイルが作成されたとき(プロパティのみ)」のトリガーを使い、次のステップで「ファイルのプロパティの更新」を実行してみますが、特にファイルがロックされることはありません。

さて、これをどう対処しよう。が、結局のところファイルが排他ロックされるとSharePoint 上でファイルが解放されるまで待つしかありません。ですが、どのタイミングで解放されるのかはよくわからない。そこで、Power Automate を使って SharePoint 上のファイルのプロパティを更新するときに何らかの理由でファイルロックに遭遇した人はいるだろうと、なにかよさそうなアプローチがないかネット上で探してみます。予想通り、複数の記事を見つけましたが、結局、みな共通しているのはファイルのロック状態が解除されるまで Do Until で繰り返しトライするしかなさそうです。

まず結果から言うと、5分ほど待機すればロックが解除されるようです(現時点)。

ですが、念のため30秒ごとにロック解除を繰り返し確認するようにロジックを変更してみましょう。まず、ロック状態を判定するために IsFileLockedという名前でブール値の変数を用意します。既定値は true。

2021-06-16_13-36-30

Office Script 実行後すぐにファイルのプロパティを変更していましたが、直後にDo until を追加しこの中に「ファイルのプロパティ更新」アクションを 移動させます。Do until の条件は 「IsFileLocked の値が false に等しい」です。

2021-06-16_13-37-59

次に変数の設定アクションを追加し、IsFileLocked にファイルが引き続きロックされていれば true、そうでなければ false を格納するように式を書きます。

2021-06-16_13-48-18

if
(
  and
  (
    equals(outputs('ファイルのプロパティの更新')?['body']?['status'],400), 
    contains(outputs('ファイルのプロパティの更新')?['body']?['message'], 'ロックされています')
  )
  ,true
  ,false
)
 
ただし、このままでは前のステップが失敗すると次に進まないため、実行条件の構成を行い、成功だけでなく失敗時にもこのステップに進むように変更します。
2021-06-16_13-50-39
あとは、IsFileLocked の値を条件判定して、true なら 30秒待機するように構成します。
2021-06-16_13-51-41
 
以上でファイルアップロード後に5分程度待てば、Excel の内容を読み取り SharePoint ドキュメントライブラリ上の列を自動的に更新してくれるようになるはずです。
 
2021-06-16_14-05-54

なお参考にしたサイトは下記の通りです。

 

2021年2月16日 (火)

Power Virtual Agents for Teams を使って手軽にチャットボットが作れることは下記で説明しました。

Microsoft Teams 用 Power Virtual Agents を使ったチャットボット作成を試そう - SharePoint Technical Notes (weblogs.jp)

このチャットボット開発ですが、基本的には質問に対する回答をフローロジック内に用意していかなくてはいけません。しかし、すでに FAQ などの情報を持っているとすると、これをロジック内に書き写していき、条件分岐をしていく作業は途方もないものです。

そんな時に組み合わせて利用したいのが QnA Maker です。Azure Cognitive Services が提供するサービスの一つであり、ボット作成を支援するものです。

QnA Maker

QnA Maker についてはネット上に多くの情報が見つかるので、ご存じなければ検索してみましょう。この QnA Maker ではあらかじめ質問と回答のペアを複数用意しておきます。これは手動で作成してもいいし、Excel や PDF, Word, Tsv 形式のファイルなどから読み込ませることができます。

下記の図は SharePoint に関する質問を書き溜めている QnA Maker 上に構築しているナレッジベースです。左側が質問、右が回答です。

QAMaker - KB

ボットはこの内容を一問一答で返すわけではなく、話し言葉で問いかけられると、AIによりその内容を推測し適切な回答を見つけ出してくれます。Power Virtual Agents はこのナレッジベースと組み合わせて、ユーザーからの質問に回答することもできるようになっています。

実際に実験した結果が次のビデオです。音声はありません。右が QnA Maker の KB (ナレッジベース) であり、左がチャットボットです。一問一答ではなく、自然に会話しながら内容を推測し、回答を提示していくれていることがわかると思います。

Power Virtual Agents から QnA Maker を呼び出して利用する手順は次の資料が参考になります。

チュートリアル:Power Virtual Agents との統合 - QnA Maker - Azure Cognitive Services | Microsoft Docs

だだし、この内容が Power Virtual Agents 用であり for Teams にはなっていないので少し読み替える部分があります。たとえば、QnA Maker の呼び出しはシステム フォールバックで設定するのですが、これは次のように設定します。

2021-02-16_1-17-42

また作成する Power Automate のフローは「Power Virtual Agents Flow Template」で作成すればよいです。このあたりの説明も少し違っています。

2021-02-16_1-27-25

以上のポイントに注意して、手順に従って QnA Maker と連携させてみてください!