技術情報ブログ
SharePoint
2023.12.06

Microsoft 365 (Sharepoint, Power Apps) を使って簡易在席管理を作ってみた

Microsoft 365 (Sharepoint, Power Apps) を使って簡易在席管理を作ってみた
みやみや

こんにちは、みやみやです。

普段は「バス予報」という弊社サービスのシステム開発や運用周りのマネジメントをしているのですが、時々現実逃避して別の技術を触って遊んでいます (最近は Spresense というマイコンが楽しい)

先日、友達との会話で、Microsoft 365 で簡易的な在席管理を行うとしたらどうするんだろう?と思うことがあり、 情シス担当者気分で普段使っていない Power Platform を使って作ってみようと思い立ちました

普段使ってない技術はすぐに忘れてしまいそうなので、備忘録としてブログに残しますね

 

基本的な設計

早速、雑ですが、こういうのを想像しています

  • 利用者はスマホや PC で「今何処で仕事をしているのか?」を登録します
    今回はスマホのみを対象とします

  • グループのメンバーが今何処にいるのか?を一覧で確認できます
    今回はSharePoint リストを直接確認することとします

 

 

1. データを格納・閲覧する SharePoint リストを作成する

まずは、SharePoint リストを作成します

  • リスト名UserStateを作成

  • タイトル列をDisplayNameに変更

  • 列名M365Userを追加

    • 列の種類はユーザーまたはグループ

    • 入力必須はいいえ

    • 固有の値を適用するははい

    • 複数選択はいいえ

    • 選択できるようにするはユーザーのみ

    • 選択元はすべてのユーザー

    • 表示フィールドは名前(プレゼンス付き)

  • 列名WorkPlaceを追加

    • 列の種類は選択肢 (メニューから選択)

    • 入力必須はいいえ

    • 固有の値を適用するはいいえ

    • 行の選択肢入力は下記情報を入力

      1. 出社
      2. リモート
      3. 客先
      4. 出張
      5. 休暇
      6. 終業
    • 選択肢の表示形式はドロップダウン メニュー

    • 選択肢を追加できるはいいえ

    • 既定値は空欄

  • ユーザーデータの作成

    • グループメンバー分のアイテムを作成します

ここまでで、このようなリストが作成されています

リストの設定
リストの設定
UserStateリスト列
UserStateリスト列

 

2.Power Apps アプリを作成する

続いて Power Apps でアプリを作成していきますが、今回は「どうつくるんだろう?」というのが主題なので、スマホ向けのみを作ります

まずはアプリを作成し、SharePoint リストをデータソースとして登録します

  • 空のキャンバス アプリを作成

    • アプリ名はSimplePresence

    • 形式は 電話

  • 先程作成した SharePoint リストをデータソースとして登録します

    • データの追加をクリックし、SharePointと検索、SharePoint コネクタを選択

      SharePointデータの追加
    • 既存の接続があれば選択、なければ+ 接続の追加を選択して接続を追加

      SharePoint接続の追加
    • 先程作成した SharePoint リストのあるサイトをして選択

    • 先程作成した SharePoint リストにチェックを入れて接続

      SharePointリストにチェックを入れて接続

 

次に、画面を作成していきます

  • スクリーン名をSetPresenceに変更

  • App の StartScreen をSetPresenseに設定

  • フォームの追加

    • + 挿入をクリックして編集フォームを選択

      SharePoint 編集フォームを追加
    • フォーム名をUserStateFormに変更

  • フォームを SharePoint リストと接続

    SharePoint 編集フォームを SharePoint リストと接続
  • 不要なフィールドを削除する

    • フィールドの編集をクリックし、WorkPlace以外を削除する
      ●削除前

      SharePoint フィールドの編集 削除前

      ●削除後

      SharePoint フィールドの編集 削除後
  • WorkPlaceのラベルを、「在席状況が変わったら変更してください」に変更

    WorkPlace のラベルを、「在席状況が変わったら変更してください」に変更
  • ドロップダウンをラジオボタンに変更します

    • ドロップダウンを削除

    • WorkPlace カードを選択して、 + 挿入をクリック、 ラジオを選択

    • ラジオを選択し、ItemsChoices(UserState.WorkPlace)に変更

  • 画面を調整して、見やすい配置や、見やすい文字の大きさに変更

    WorkPlace ラジオボタン
  • 赤丸白抜きのバツボタンをクリックして、削除したドロップダウンからラジオボタンに変更する

    • 変更前例

      削除したドロップダウンからラジオボタンに変更前
    • 変更後例

      削除したドロップダウンからラジオボタンに変更後

次に利用ユーザーのデータを取得、更新できるようにします

  • 編集フォームのItemLookUp(UserState, M365User.Email = User().Email)に変更

    編集フォームのItemを変更
  • カードのUpdateRadio1.Selectedに変更

    カードのItemを変更
  • ラジオボタンのOnSelectSubmitForm(UserStateForm)に変更

    ラジオボタンのOnSelectを変更
  • ラジオボタンのDefaultThisItem.WorkPlace.Valueに変更

    ラジオボタンのDefaultを変更

最後に SharePoint リストに登録されているユーザーだけが利用できるようにします

  • 編集フォームのVisibleIf(IsBlank(LookUp(UserState, M365User.Email = User().Email)), false, true)に変更

    編集フォームのVisibleを変更

 

3. 動作確認

ここで Power Apps でアプリのプレビューを実行し、ステータスを変更すると、SharePoint の値が変わっているか確認します

アプリのプレビュー
アプリのプレビュー
みやみや

Power Apps で変更した値が、動的に SharePoint リストの一覧でも変わったので、やりたいことはここで終わりですねw

 

オマケ. SharePoint リスト見映えを変える

SharePoint リストを見るだけだと味気なかったので、新しいビューを作成し、こちらのサンプルを参考にして生まれて初めてビューの書式設定を書きました

SharePoint リスト見映えを変える

※メンバーの方々、モザイクかけましたので許してください 🙇

{
  "$schema": "https://developer.microsoft.com/json-schemas/sp/v2/row-formatting.schema.json",
  "hideSelection": true,
  "hideListHeader": true,
  "rowFormatter": {
    "elmType": "div",
    "style": {
      "float": "left",
      "display": "flex",
      "flex-wrap": "wrap",
      "flex-direction": "column",
      "align-items": "center",
      "justify-content": "space-around",
      "min-width": "300px",
      "min-height": "200px",
      "border-radius": "8px",
      "margin-right": "10px",
      "margin-bottom": "10px",
      "box-shadow": "2px 2px 4px darkgrey",
      "position": "relative",
      "background-color": "=if([$WorkPlace] == '休暇', '#eee', if([$WorkPlace] == '終業', '#eee', ''))"
    },
    "attributes": {
      "class": "ms-bgColor-neutralLighterAlt"
    },
    "children": [
      {
        "elmType": "div",
        "children": [
          {
            "elmType": "img",
            "style": {
              "display": "block",
              "width": "150px",
              "height": "150",
              "max-height": "200px",
              "max-width": "200px",
              "border-radius": "50%"
            },
            "attributes": {
              "src": "=getUserImage([$M365User.email], 'L')",
              "title": "[$M365User.title]"
            }
          }
        ]
      },
      {
        "elmType": "div",
        "style": {
          "text-align": "center"
        },
        "children": [
          {
            "elmType": "span",
            "style": {
              "font-weight": "500",
              "font-size": "1.1rem"
            },
            "txtContent": "=[$Title] + ' : ' + if([$WorkPlace] == '', '未設定', [$WorkPlace])"
          }
        ]
      },
      {
        "elmType": "div",
        "style": {
          "text-align": "center"
        },
        "children": [
          {
            "elmType": "div",
            "style": {
              "font-weight": "500",
              "font-size": "1.0em",
              "overflow": "hidden",
              "max-width": "280px",
              "white-space": "nowrap"
            },
            "txtContent": "[$Modified]"
          }
        ]
      },
      {
        "elmType": "div",
        "children": [
          {
            "elmType": "div",
            "style": {
              "position": "absolute",
              "top": "5px",
              "left": "5px",
              "font-size": "50px"
            },
            "attributes": {
              "iconName": "=if([$WorkPlace] == '出社', 'EMI', if([$WorkPlace] == 'リモート', 'Home', if([$WorkPlace] == '客先', 'Commitments', if([$WorkPlace] == '出張', 'Airplane', if([$WorkPlace] == '休暇', '', if([$WorkPlace] == '終業', '', ''))))))"
            }
          }
        ]
      }
    ]
  }
}

 

考察

実務で使うには全然足りないですが、検証が目的だったので、今回はここまで!

作っている途中に思ったのですが、災害時の安否確認アプリとか作れそうですし、黄色い声援とやる気と時間があれば、もう少し作ってみようかなという気分です

miyamiya

みやみや

ビジュアル系プログラマー、ビジュアル系 PM を自称して 20 年近くが経ちました

弊社 MaaS 製品全般で、開発・運用側のマネジメントをしながら、時々開発もしています

シェアする
記事カテゴリ
最新記事
2025.05.13

元自治体職員(地方公務員)がCopilot Studioを使って業務に役立つエージェント活用を考えてみた

2025.05.14

Copilot Studioは安全?機密情報漏洩のリスクを低減する方法

2025.05.07

SharePointでスライドショーを実装したい!効果的な3つの方法を解説

2025.04.30

Power Apps, Power Automate で作る NFC タグを活用したアプリ例

2025.04.16

Power Apps で NFC タグを使ってみる

attributeO/Rマッパーマーカークラスタリングライブラリビュー動的リスト検索個人列退職ギャラリーDevOpsCalendarモデル駆動型データフローファイルサイズCopilot Studiotvalidationazure sql databasetailwindcssアクセス制限collectionMicrosoft 365グループユーザー列所有者を変更スクロールMicrosoft 365Teamsセキュリティロールrecycle binフルリモートワーク自治体DXローコードCase式マルチテナント承認コレクションセキュリティグループSharePoint Online異動コンテナ簡易在庫管理ローコード開発ビジネスルールごみ箱アーティサン生成AI自治体AngularHTTP Requestドロップダウンメニューリマインド複数の添付ファイル送信元リストLoopショートカットキー時間外非エンジニアDataverseアクセス許可Artisan事例AccessCSSBreakpointObserverSet承認フローメールの送信非表示Microsoftshortcut key通知体験談JavaScriptSharePoint Framework転職活用InfoPathxUnitメディアクエリForAllform差出人アプリdesignconcat関数ファイル勉強表示SPFx主キーMatTable.Net Core 3.1スマホUpdateContextエクスポートインスタントクラウドフロー[市民開発者JSON文字制限フィルター クエリ内製化切替サンプルCopilot StudioAngular MaterialVSCodePCロードマップインポート自動化したクラウドフロー構築デザインフロー実行ドキュメント ライブラリ市民開発登録者samplePowerAppsデータ構造.Net Core Test Explorerレスポンシブ技術カスタマイズ委任自動化したクラウド フロー運用開発環境filter query管理システム列X-SPNFCタグモデル駆動型アプリSortByColumns関数Dataverse for Teams入門ItcomponentVBAフローの種類選択肢列環境sortガバナンス登録日StyleDLPポリシーPower AppsTypeScriptitem関数初心者情報技術ダイアログエラーインスタント クラウド フロー参照列本番環境ソートerror notification更新者StudioPowerAutomatePower PlatformHTMLGoogle Maps中級者メッセージIDコンポーネントエクセルスケジュール済みクラウド フローChatGPTライセンスmultiple itemエラー通知更新日AIX-SP DesignSharePointEF CoreMarker Clustererキャンバスアプリメールdialogerrorレスポンシブ レイアウトOpenAI環境構築手順複数項目削除変更生成系AIスライドショーExcelマイグレーションRANK()関数DatePickerfirst()関数Tips復元responsive layoutオープンAIpipelineシェアポイントフォルダ外部DBCopilotSlide showPower AutomateFramework CoreDynamics 365 SalesDropdownnest新機能restoreデータ行の制限チャットGPTCI/CD便利機能ゴミ箱連携license比較C#Attribute directivesMicrosoft Translatorview入れ子変数Power BI引き継ぎgalleryパイプラインカレンダー完全削除接続添付ファイルコントロール地方自治体
PageTop
ページトップに戻る