Microsoft

Microsoft365申請アプリを作成し、様々な手続き業務をボタン1つで自動化してみた

紙ベースの申請をやめたい…各種申請のベースが揃っておらず、様々なシステムやメールから届くため確認とその対応が大変…こんな課題はありませんか?
当社ではこれを解決するために申請アプリを開発して製品販売しております。
Teams、SharePointだけでなく、ユーザー管理や多要素認証リセット、デバイスの初期化等まで、多くの申請機能を1つにまとめることを実現しました。(機能は多数ありますが、今回はTeamsとSharePointをピックアップした解説です。)

アプリの効果

申請の一元管理
申請アプリを導入することで、すべてのチームやサイトの作成・削除、ゲストユーザーの招待申請を一元的に管理。申請状況をリアルタイムで把握できるようになります。

自動化された業務プロセス
承認者が申請を承認後、システムの管理者が確認、ボタンを押下するだけで自動的にチームやサイトが作成削除される仕組みで、業務プロセスの効率化に。
プロセスが明確化されることで、申請承認や実行にかかる時間が短縮されます。

明確な基準による乱立防止
作成されたチームやサイトの利用終了の予定日を事前に申請することで、後からチェックすることが可能に。
セキュリティ的にも不要な物はチームやサイトは削除しておきたいですよね。

アプリの機能

アプリ上の機能としては、以下になります。
申請の状況によってステータスを設定。ステータス状態の進行(承認済や対応済など)の確認およびその通知を行います。

  • 申請
  • 承認、却下
  • 再申請
  • 管理者による申請の確認
  • 管理者による申請内容の実行

この中で、Teams、SharePoint関連では申請にあたって、以下の自動化が可能です。

  • チーム作成
  • チーム削除
  • サイトの作成
  • サイトの削除
  • チームへゲストユーザー招待(ゲストユーザーの作成)
  • サイトへゲストユーザー招待(ゲストユーザーの作成)

開発準備

  • Power Apps
    アプリのフロントエンドをPower Appsのキャンバスアプリで作成します。
  • SharePointリスト
    申請内容を保存するためのリスト。アプリのデータソースとなります。
  • Power Automate
    申請内容を元に通知メールを出したり、申請内容を自動的に実行するフローを作成します。
  • カスタムコネクタ
    標準的なコネクタのみでは、自動的な実行が出来ないため、コネクタを自作します。
  • 共有メールボックス
    通知を出す用として返信不可のメールアドレスを用意します。

実装手順

1. SharePointサイト上でリストを作成

申請内容を保存、保管するためにリスト作成しておく。
なるべく少ないリスト数で運用したいので、各申請で扱う列を沢山用意します。


2. Power Appsで申請内容を記入するフォームを設置

アプリは2つあり、以下に分かれます。

  • 申請アプリ   …一般ユーザーが申請を行う
  • 申請管理アプリ …管理者が申請一覧を取得し、内容の実行を行う

申請を行うアプリからご覧いただこうと思います。
ここでは簡単に、それぞれの申請フォーム画面を紹介します。

まずはトップ画面を作成。ボタンを配置。シンプルにしつつ、パッと見て分かりやすいようにアイコンを付与。
「その他」の項目はアドオン機能となり、各企業様の要望により、基本的な申請以外にも欲しい申請機能を追加できるようになっています。

今回は様々な申請をアプリ1つで済ませるため、動作が軽いアプリを目指します。
となると、リストと同様、Power Apps内のスクリーン数もなるべく少なくしたいので、同じスクリーン上に複数の申請フォームを置き、条件による表示設定を行いたいと思います。

条件のトリガーとして申請フォーム1つ前の画面のボタンのOnSelectに、以下の変数を渡しておきます。サイトの場合は{ fromScreen: "SharePoint" }とします。

Navigate('新規チーム・サイト作成申請画面', ScreenTransition.None, { fromScreen: "Teams" })


次の画面上に申請フォームを配置しますが、この表示を以下のようなコードで制御します。fromScreenの値を参照して、ラベルやデータカードのどちらを表示するかを条件付けます。
スクリーンのOnvisibleに事前に記載しておきます。

If(
    !IsBlank(fromScreen), 
   If(
        fromScreen = "Teams",
        UpdateContext({ screenLabel: "新規チーム作成申請",
                        visibleFields: ["新規作成チーム名_DataCard1"] }),
        fromScreen = "SharePoint",
        UpdateContext({ screenLabel: "新規サイト作成申請",
                        visibleFields: ["新規作成サイト名_DataCard1"] })
    ),
    // デフォルトで全てのフィールドを表示
    UpdateContext({ screenLabel: "デフォルト画面",
                    visibleFields: ["新規作成チーム名_DataCard1","新規作成サイト名_DataCard1"] })
)

先ほどNavigate関数で渡したfromScreen変数の値を初めに確認し、空の場合はデフォルト画面を表示します。これは意外と大事で、デバッグの時重宝するので記載しておくと良いでしょう。

さて、上記のUpdateContextでscreenLabelという変数に表示するテキストを渡してありますので、実際のテキストラベルのTextに変数を記載することで動的に表示が可能になります。

同じく、visibleFields変数に表示させたいデータカードを入れて、各データカードのVisibleでin visibleFieldsとすることで動的な表示が可能です。
全体のフォーム画面が以下になります。

このフォーム内に入力し、「送信」するだけで申請者のやることは終了です。すると、作成しておいたリスト内にデータが保存されます。
この確認もしたいですね。以下は自分の送信したデータのみリストから取得するページです。左の一覧から選択することで、申請内容を確認することが可能です。

一方管理画面側。申請の一覧全てが確認できるようになっています。検索機能や、タブ分けによって各種類の申請だけをフィルタリングして表示することも可能です。
ここから申請を選択し、実行ボタンを押すことでフローが走り、申請内容が自動的に処理されます。

3. フローの作成

アプリ上のボタンを押すことをトリガーに、自動化を実行するフローを作成しています。 今回のチームおよびサイトに関連したフローを以下に抜粋しました。

まずアプリ上でボタンを押し、SPOリスト上のStatus列を変更します。ここはPower Apps内のPatch関数を使用してリストに書き込みます。


次にリストのStatusが変更したことをトリガーに、Power Automateでフローを作成。

メール通知は、PowerAutomateだとフローの所有者が差出人になってしまうため、共有メールボックスを事前に作成し、フローの所有者が送信できるように権限を付与しておきます。

「メールの送信」アクションには「差出人」という詳細パラメータがあるので、ここに共有メールボックスを設定。

ところで、Power Automateには「共有メールボックスからメールを送信する」アクションも用意されています。

このアクションは、差出人のアドレスを入力する欄が詳細パラメータではなく、元々必須で設定値が存在します。(元のメールボックスのアドレス)
これは通常の「メールを送信」が差出人アドレスを設定しない場合、デフォルトではフローの所有者が送信することになるのに対して、「共有メールボックスからメールを送信する」がデフォルト値が決まっていないからですね。

更に送信権限についても少し違いがあります。
メールボックスの設定時、所有者として送信とフルアクセスで送信する2パターンの権限があります。
ここの設定値によって、上述2つのアクションの結果に差が出てきます。

Exchange管理センターで所有者として送信する

フルアクセスを設定する

設定によって出てくる差についてまとめると以下の結果になります。
<前提>
どちらも差出人の欄に共有メールボックスを指定。

PowerAutomateアクションフロー所有者に付与する権限結果
メールを送信する所有者として送信成功
共有メールボックスから送信する所有者として送信失敗
共有メールボックスから送信するフルアクセス成功

以上のように、共有メールボックスから送信の場合だと必要以上の権限を付与することになってしまうかもしれないため、通常の「メールを送信する」アクションを利用する方が良いと思われます。
また、「共有メールボックスから送信」アクションは共有メールボックスのみが対象で、グループのアドレスでは使用できません。グループから送信したいという場合も不適当でしょう。

事前に共有メールボックスに自動応答も設定しておけば、返信不可の送信専用アドレスにすることが可能です。

次回へ続く

少し長くなってしまったので、今回はここまで。続きは次回ご説明したいと思います。

ちなみにこのアプリ上で以下の申請、および自動的な実行が出来ます!(宣伝)

  • Teamsのチーム作成、削除
  • SharePointコミュニケーションサイトの作成、削除
  • Teamsへのゲストユーザー招待(ゲストユーザーの作成)
  • SharePointサイトへのゲストユーザー招待(ゲストユーザーの作成)
  • ユーザー新規作成
  • ユーザー情報変更
  • ユーザー削除
  • 多要素認証(MFA)リセット
  • パスワードリセット
  • アプリケーションインストール
  • デバイスのワイプ(初期化)

ご覧いただきありがとうございました。

千葉 玲奈

千葉 玲奈

常に成長し続ける姿勢を大切に、日々勉強中です。 主にMicrosoft365の設計構築を担当。技術面に留まらず、皆の「やりたい」に応えるべく人の想いに寄添った提案ができるよう努めています。

TOP