"Power Automate" にカテゴリー登録されている5 投稿

Power Automate を使って SharePoint リスト管理する (非表示設定)

今回は SharePoint 開発経験者向けのお話。

Power Automate では SharePoint の REST APIが呼び出せます。

本題に入る前に少し状況の補足をしておきましょう。

クラシックサイトでは気軽に JavaScript を埋め込めていましたが、これにより管理者が把握できないスクリプトも溢れることになりました。さらには、何かするにも JavaScript を書く必要があるというのはエンドユーザーにとってはハードルが高い。サイロ化したスクリプトを管理下におけるよう、モダンサイトでは SharePoint Framework を使ってサイト管理者の管理下にあるスクリプトのみが実行できるように振る舞いが変わっています。またエンドユーザーでも手軽にアプリが作れるように Power Platform と SharePoint は連携できるようになっているわけです。

こうした背景から、今まで JSOM (JavaScript Object Model)ゃREST APIを JavaScript からアプローチを一部は Power Automate や Power Apps などに置き換えていく方向も考えていく必要があります。

そこで冒頭の話に戻ります。Power Automate では SharePoint REST API を呼び出せるので、これまで JSOM や REST API で培ってきた開発ノウハウを生かせる部分も多く存在します。

今回、ブログの題材は SharePoint Designer 2013 の持っていた機能の一部置き換えをしようという試みです。その一つがリストの表示・非表示。

補足説明

リストには Hidden 属性があり、SharePoint Designer では簡単にTrueもしくはFalseを切り替えられました。Hidden 属性が True となると「サイトコンテンツ」ページからリストは非表示になります(こういうリストを隠しリストと呼びます)。もちろん、URLは利用可能であるため、ユーザーが直接 URL をアクセスすれば従来通りリストにはアクセスできます。

さて、Power Automate などで処理している際にも、ユーザーには直接目につかないように隠しリストを作りたいというケースも少なくない。こうした処理を Power Apps と Power Automate で処理してやろうという話です。次のビデオでは実際の動作が確認できます。まだアプリは改善の余地はありますが、それは追々機能を拡充していく予定です。

このフローでのポイントは SharePoint コネクターの「SharePoint に HTTP要求を送信します」アクションを使うことです。今回は更新処理であるため POST します。また、リストのアップデートを行う必要があるわけですが、従来のようなページ上で JavaScript を実行するときとは異なり、X-REQUESTDIGEST の値を指定する必要はありません。

2020-04-23_12-20-11

さて利用したフローの全体画面を掲載しておきます。REST API に慣れている方は、このあたりは問題なく利用できるでしょう。

リストの表示非表示

 

AdobeStock_194043476対象者は SharePoint サイトの基本的な操作や用語が理解できている方で、Power Automate や Power Apps を使った業務改善などを検討している方です。

 


Microsoft Teams 上で動作するフローボットを Power Automate で開発する際の注意点

前回の投稿の補足としてフローボットを作成してみるときの注意点を共有しておきます。

Flow ボットは手動で開始できるようになっていますが、Run flow コマンドで開始するには次のお約束があります。

  • 既定の環境にフローを作る
  • 入力がないフロー、またはスケジュールに基づいて実行されるフローであること

このあたりのことは Flow ボットに "Learn more" コマンドを送信すれば教えてくれます。

Flow bot 1

それでは! ということで早速上記のルールにのっとって作成するわけですが、手っ取り早いのはモバイルのFlow ボタンにある「手動でフローをトリガーする」トリガーを使ったフローです。

これを利用するのですが、Flow ボタンのトリガーを使って作成しても、List flows にフローが出てこないケースがあるのです。

順を追って説明します。

Flow のトリガーを追加し、コードのプレビューをしてみましょう。

Flow bot 2

これを見ると次のように入力が空なのが分かります。

Flow bot 3

このままフローを構築すればいいわけですが、途中のアクションでフローの作成者情報を取得しましょう。例えば次のようにトリガーしたユーザー名を変数に格納してみます。

Flow bot 4

この状態で再び「手動でフローをトリガーします」のコードビューを確認してみましょう。次のように変化しているはずです。

Flow bot 5

つまり、トリガーしたユーザーの情報を取得するために入力パラメータが生成されてしまっているのです。

このようになると Flow bot からは呼び出せなくなります。

検証していて、非常に嵌ったところです。

皆さんも試すときには、何もパラメータのないトリガーに気を付けてフローを構築してみるようにしてください!

 

【研修】SharePointユーザーのための Power Apps & Power Automate入門

AdobeStock_194043476対象者は SharePoint サイトの基本的な操作や用語が理解できている方で、Power Automate や Power Apps を使った業務改善などを検討している方です。


Microsoft Teams 内で Flow ボットを使って機密保持契約書を送付する

Microsoft Teams には Flow アプリを追加できるようになっています(テナントによっては不可になっていることもあります)。

Flow-Bot

このアプリ内ではフローの作成や管理はもちろん、自分と対話できるフローボットが利用できます。このフローボット自体 Power Automate を使って作成できます。

利用イメージがしやすいように、これを使って SharePoint に格納されている機密保持契約書を手軽に先方に送付するというシナリオをご紹介しましょう。このフローではTeamsのコネクターを使っていますが、いずれも現時点ではプレビューであり、フロー構築時にはいくつかの課題もあります。

構築方法については今回は深入りしませんが、まずはどんなことができるのかを知ってもらえれば、何か業務改善のヒントになることもあるのではないかと思っています。

詳しくはビデオを使って説明していますのでご覧ください。

基本的な flow bot の作り方はまた別の記事で紹介します。

【研修】SharePointユーザーのための Power Apps & Power Automate入門

AdobeStock_194043476対象者は SharePoint サイトの基本的な操作や用語が理解できている方で、Power Automate や Power Apps を使った業務改善などを検討している方です。


[Microsoft Teams & Power Automate] チーム内の "ファイル" タブ上で承認フローを開始するためのコツ

Microsoft Teams 内の各チームには[ファイル]タブが用意されています。このファイルタブの実体は SharePoint サイトです。

もっというと、チーム内の[ファイル]タブは SharePoint サイト上にある「ドキュメント」ライブラリ内のチャネルごとに生成されるフォルダーが紐づいています。しかし、Teams の[ファイル]タブは、SharePoint の標準的な機能の一部が実装されていません。もちろん、あくまで[ファイル]タブ経由で利用するとという限定的な話であり、[ファイル]タブのコマンドバーから "SharePoint で開く" をクリックすることで、Webブラウザーから直接 SharePoint のライブラリにアクセスすれば、標準機能がフルに利用できます。

Teams 内から SharePoint サイトにアクセスする

※補足 : Teams がリリースされて間もないころはSharePoint が持つファイル管理機能のごく基本的な機能のみしか提供されていなかったのですが、数か月前からだいぶ SharePoint のオリジナルの持つ機能に近づいては来ています。

そのため、今回のブログのタイトルにあるような Power Automate を使った承認フローを実装するには、少し工夫が必要です。

Webブラウザーから直接SharePointサイトを利用するときには、格納しているファイルに対して承認フローを開始する方法としてはファイルのプロパティを確認し、例えば "下書き" から "公開" といった値に変更したときに承認フローを自動的に開始できるようにすることも少なくありません。しかし、[ファイル]タブでは現時点(2020/4/18)ではプロパティを編集できません。さらに、手動でワークフローを開始するにもフローを手動開始するコマンドメニューがありません。SharePoint 標準では本来はできることです。

そこで、[ファイル]タブを使ってフローを開始するのであれば、手動開始とプロパティの値をトリガーにすることはあきらめる必要があります。「ファイルを新規に作成したら」という自動的にフローが開始されるトリガーを使うのが妥当でしょう。

例えば、[ファイル] タブ内の特定のフォルダーにファイルを移動したらフローが開始されるというような実装を考えます。ただここで問題なのが、SharePoint コネクターのトリガーによってはサブフォルダーからはフローが開始されないものがあるということ。[ファイル]タブはサブフォルダーに紐づいているので、ここが重要なのです。

以上のことから、トリガーには次のいずれかを使うようにします。このトリガーはサブフォルダーでも動作します。

  • ファイルが作成されたとき(プロパティのみ)
  • ファイルが作成または変更されたとき(プロパティのみ)

自動開始を前提とするので、フローを起動したときに承認者を選択させることができないので、最初から承認者を固定で指定しておくか、上司の自動取得をするなど何かしら工夫をしておく必要があります。

ところで、トリガーを設定するときですが、SharePoint サイトとの関係が把握できていないとどのフォルダーをトリガ―指定すればよいのか迷うところです。チャネルとフォルダーの関係を図解しておくと次のようになります。トリガーを構成するときには、この図を念頭に置いたうえで、チーム名と同じ名前の SharePoint サイトのURLとフォルダーを指定するようにしましょう。

Teams 内のチャネルとSharePointフォルダーの関係

なお、チャネルを最初に作ったときに(もっと正確にいうと、チャネルを作成後に[ファイル]タブに初回アクセスしたときに生成) SharePoint側にフォルダーが作成されるのですが、フォルダー生成後はチャネル名を変更しても既存のフォルダ名は変更されません。そのため、現在 Teams 内のファイルタブには関連づいているフォルダー名が表示されるようになっているので、これを手掛かりにするとよいでしょう。

Teamsファイルタブにひもづくフォルダー名

以上を踏まえ、最もシンプルな承認フローを構築すると次のようになります。ここでは細かい設定については触れませんが、詳細は例えば、既存の承認用のテンプレートを使いトリガー部分を差し替えるなどしてみてください。

承認フロー

 

【研修】SharePointユーザーのための Power Apps & Power Automate入門

AdobeStock_194043476対象者は SharePoint サイトの基本的な操作や用語が理解できている方で、Power Automate や Power Apps を使った業務改善などを検討している方です。


[Power Automate] SharePoint リストアイテムの一括コピー

Power Automate を使ってリスト内のアイテムを一気に他のリストに移動させたいということもあります。しかし、残念なことに、SharePoint Designer で開発するワークフローには存在していた「アイテムのコピー」というアクションは SharePoint コネクターにはありません。

一つ断っておくとすると、SharePoint Designer での開発はサイトを越えた処理は基本的にはできず、SharePoint REST API を使うなどしていましたので、もともとそう高機能だったというわけでもありません。

話を戻しましょう。

Power Automate の場合は元のアイテムのデータをもとに新しいリストにアイテムを新規に作成するという、コピー作成を行うことになります。「移動」にしたければ最後にアイテムを削除すればよい。

まずは機能検証するためにコピーまでとし、元のリストアイテムの削除はしません。これを実現する最も手軽な方法は、次の SharePoint コネクターのアクションを使うことです。

  • 複数の項目の取得 (Get items)
  • 項目の作成 (Create an item)

さて、複数のアイテムがあるのでこれを一気にコピーしたいのですが、とりあえず手動でフローをトリガーしてやることにします。処理が終わったらMicrosoft Teams にチャットメッセージを投稿するようにします。以上を踏まえると以下のようなフローの組み立てがシンプルです。

Bulk List Item Copy 1

さて、フローをテスト実行し、手動開始してみます。今回、元のリストには1,000件以上のアイテムがあります。が、試すと Apply to each では 100件までしか処理していないことが分かります。

Bulk List Item Copy 2

さて、なぜこうなっているのか? 

昔から SharePoint の一括操作(バルク処理)は100がしきい値というのはおなじみのところであり、SharePoint の API もクエリを使って取得するデータの上限は既定値が 100 というのもよくある話。さて、これはどこの設定が関わっているのか確認してみましょう。

先ほどの「複数の項目の取得」の詳細オプションを確認すると「上から順に取得」という項目あります。英語だと Top Count という項目です(英語の方が分かりやすい...)。SharePoint の開発をしたことのある方なら、ここでピンとくるかもしれません。これが要はREST API の引数の $top に当たるわけです。これが既定値のままだと、100アイテムを取得するという既定の動作となるのです。

Bulk List Item Copy 3

この値を2000ほどに変更しておくと、今度は1,000件以上のアイテムが取得できました。

Bulk List Item Copy 6

なお、「上から順に取得」で指定できる上限は SharePoint は一度の呼び出しで最大  5,000までしか取得できません。

そして このアクションのあとに Apply to each を使用しますが、 Office 365 およびフリーのライセンスでは5,000までしか対応していません。これ以上の値を指定したい場合は Power Automate per flow または per user (もしくは Plan2 か Plan1)が必要になります。有料プランであれば上限は100,000 になります。

このことについては詳しくは下記に記載されているので一度目を通しておきましょう。

さて、5,000以上指定したい場合は、上記のライセンスを持っているのであれば、「複数の項目の取得」アクションの設定から、改ページ (Pagination) のしきい値をたとえば20,000などに指定します。

Bulk List Item Copy 4

Bulk List Item Copy 5

改ページをオンにすることで、しきい値の指定がなければすべてのアイテムを、もしくはしきい値があればその値に達するまで呼び出しを続けるようになります。「改ページ(Pagination)」に関しては次のブログに記載されています。

Do Until の利用

ところで Power Automate per user や per flow などの有料プランを持っていない場合に対処方法はあるのか?

Do Until を使う方法であれば、これをクリアできそうです。たとえば、上限である5,000アイテムずつ繰り返し取得して行くというアプローチが取れるようになります。ただし、フローは若干、複雑になります。

まず変数の準備。次のように変数を用意します。

Bulk List Item Copy 7

次に Do Until を挿入します。条件は ItemEmpty が true になるまで。

あとはこのコンテナの中に「複数の項目の取得」アクションと「項目の作成」アクションを挿入します。

Bulk List Item Copy 8

「複数の項目の取得」アクションの設定で改ページをオンにします。しきい値は5,000にしておきます。

Bulk List Item Copy 9

また「複数の項目の取得」アクションのフィルター条件に TargetItemID の値以上を指定します。

Bulk List Item Copy 10

Do Until コンテナ内の処理の続きとして条件を指定します。

Bulk List Item Copy 11

条件は「empty(body('複数の項目の取得')?['value'])」が true です。

「はい」のときは ItemEmpty を true に設定し、「いいえ」のときは TargetItemIDの値に「複数の項目の取得」アクションで取得した最後のIDを格納します。式は次の通り。

last(body('複数の項目の取得')?['value']).id

このIDを使ってスライディングウィンドウを作るイメージです。

全体像は次の通りです。

Bulk List Item Copy 12

謝辞および参考資料

Power Automate を使って SharePoint のアイテムを一括で処理するところで悩んでいたところ、それを Twitter でつぶやいたら Yellow11(@br_Yellow11) さんが助け舟を出してくださいました! 

Do Until の利用か! なるほど、と思い、いろいろと調べていたところ、細かいところが分かったので、忘れないうちに記事にしようと思い立ったわけです。

また、海外の方が書かれている下記の記事も見つけることもでき、これを含めて今回の日本語の記事にまとめました。

How to get more than 5000 items from SharePoint Online in Flow

皆さんのおかげです😀

Pay it forward !!