3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ARISE analyticsAdvent Calendar 2023

Day 18

Power Automateで業務効率化した話②

Posted at

概要

Power Automate(Microsoft提供の自動化ツール)を使って、SharePoint & slackを連動させて業務効率化をしたので、どういう自動化プロセスを組み込んだのか説明します。


【この記事を読むと分かること】

  • SharePointに新しいファイルがアップロードされたときにslackで通知を出す方法
  • 現在時刻から翌月の日付を計算する方法
    ※Outlookとslackの連携方法はこちら→Power Automateで業務効率化した話①

問題意識

お仕事でお客さんからデータをもらって、自社でこねこねして、こねた結果をお客さんにまた返すという仕事(以下こねこね連携と呼ぶ)の担当になりました。

全体のフローはこんな感じです↓

黄緑色の矢印が自分の担当作業

このフローのうち、月7回繰り返し作業が発生する下半分部分についてはこちらの記事の通りうまく半自動化したので、調子に乗って、月1回しか発生しない2番の作業もPower Automateを使って自動化します。

※Power Automateのフローの全体像を見たい方は記事末の まとめ 参照

対応策

特定の名前のファイルがSharePointに新規にアップロードされたらslackで通知を出す

お客さんから来月のスケジュール表をもらったあと、内部で整形してSharePointにアップロード→作業担当者に確認依頼を出すという作業が発生します。
今回はSharePointの特定のフォルダに対象のファイルがアップロードされたら、こんな感じ↓のメッセージがslackで出るようにしたいと思います。

「■」がファイル格納先フォルダへのハイパーリンクになっている


1. 「フォルダーにファイルが作成されたとき」というトリガーの作成

Power Automateで「フォルダー内にファイルが作成されたとき(非推奨)」というトリガーを設定します。

特定のsharepointフォルダへのファイルのアップロードを検知する
「フォルダー内にファイルが作成されたとき(非推奨)」を選択し、任意の「サイトのアドレス」と「フォルダー名」を指定します。

!

今回は「00_運用スケジュール」という名前のフォルダを指定


2. ファイル名を作成する

先ほど指定した「00_運用スケジュール」フォルダには、基本的には毎月一回、翌月のスケジュール表のみがアップロードされるのですが、万一ほかのファイルがアップロードされたときにいちいちslackの通知が出てしまうのは混乱を招きます。そこで、特定の名前のファイルがアップロードされたときのみ通知が出るという仕様にしたいと思います。

ということで、アップロードを検知したいファイル名をフロー上で保持できるようにしましょう。

翌月の月数の作成
スケジュール表ファイルは12月分【こねこね連携】受け渡しデータというような名前をしており、「12」月部分には翌月の月数が入ります。
そこでまず、翌月の月数を取得したいと思います。

①現在時刻(日本標準時)の取得
まずフローがトリガーされた時の日時を取得します。
日本時間を取得したいのでタイムゾーンの変換というアクションを追加します。

!

「基準時間」の欄は

utcnow()

という関数を指定することで、フローがトリガーされたときの協定世界時を取得します。
「変換元のタイムゾーン」に「(UTC)協定世界時」を、「変換先のタイムゾーン」に「(UTC+9:00)大阪、札幌、東京」を指定することで、トリガー時点での日本標準時を取得できます。
「書式設定文字列」にはいったん「短い形式の日付パターン」を指定して、後の作業で月数のみを取り出します。


②時間への追加
今回は翌月の月数を取得したいので、先ほど取得したトリガー時点の日時に一か月を追加します。
時間への追加というアクションを追加して、「基準時間」に先ほど①で取得した日時を、「間隔」に「1」を、「時間単位」に「ヶ月」を指定します。

!

例えば2023/11/27にトリガーされたとすると2023/12/27という値が出力される


③翌月の月数の抽出
続いて、日時から月数のみを抽出しましょう。
データ操作の「作成」アクションを追加し、入力欄に以下を記載します。

formatDateTime(body('時間への追加'),'%M')

これで②の出力から月数のみをうまく抽出できます。

以上で、例えば今月が11月であれば翌月の月数である「12」という数値を取得できました。
続いて、この数値を使用してファイル名を作成しましょう。

翌月の数字を入れたファイル名の作成
変数の「変数を初期化する」アクションを追加し、「名前」に適当な変数名を、「種類」に「文字列」を、そして「値」に以下を指定します。

concat(outputs('翌月'),'月分【こねこね連携】受け渡しデータ')

これで、アップロードを検知したいファイル名 「MM月分【こねこね連携】受け渡しデータ」 を作成できました。


3. slackメッセージの投稿

続いて、先ほど作成した翌月分のスケジュール表ファイルがアップロードされたときに、slackに通知を出すフローを作成しましょう。

条件の設定
①ファイルのメタデータの取得
まず、パスによるファイル メタデータの取得アクションを追加し、フローをトリガーしたファイルのメタデータを取得します。
これを設定することで、ファイルの名前やリンクを取得できるようになります。

!

「ファイルのパス」欄にフローをトリガーしたファイルの「ファイルパス」を指定する


②ファイル名の一致条件の設定
①で取得したファイル名と、先ほど 2 で作成したファイル名が一致するかを判定する条件を作成します。

条件アクションを追加し、それぞれの値に先ほど①で取得したメタデータの「ファイル名」と 2 で作成したファイル名を指定します。

今回はファイル名の完全一致ではなく「次の値を含む」条件を指定し、アップロードされたファイル名の多少の違いは厳密に判定しないことにしている

条件を設定することで、以下のフローはいま設定した条件が満たされた場合(Trueの場合)のみに起動するようになりました。

slackにメッセージを投稿
最後にslackに送るメッセージを整形します。
メッセージの投稿(V2)のアクションを追加し、任意のチャンネル名・メッセージテキストを入力します。

今回は、途中で作成した翌月の月数と、スケジュール表を毎月格納しているフォルダへのリンクをハイパーリンクにして挿入しています。

<リンク|ハイパーリンクにしたい文字列>という形式でハイパーリンクを設定可能

これで、ファイルをSharePointフォルダにアップロードするだけで作業担当者にスケジュール確認を依頼することができるようになりました!


まとめ

全部つなげるとこのようなフローになります↓

全体フロー.png

これで、こねこね連携作業の一部をうまく自動化することができました!

余談ですが、今回は思ったよりもうまく自動化できなかったというのが正直な感想です。
本当は「スケジュール表が添付されているメールの受信」をトリガーにして、「添付ファイルの保存>zip解凍>sharepointへのアップロード>slackへのメッセージ投稿>返信メールの下書き作成」まで一気通貫でできると良かったのですが、添付ファイルにパスワードロックがかかっているので断念しました。

しかし、このほかに作成したPower Automateのフローやpyファイルなどを組み合わせることで、こねこね連携にかける時間を最小限にしたいという自分の怠惰な欲求はある程度満たされることとなりました。

めでたしめでたし。


作成にあたってお世話になったWEBページ

1. Power Automateで時間を扱うときに知っておくべきこと。時間のズレと変換について。
2. [Power Automate]日付・日時の取得、変換、比較方法を徹底解説
3. Power Automate 「フォルダー内にファイルが作成されたとき(SharePoint)」トリガー
4. Power Automate で 凝った Slack メッセージを投稿する

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?