くらっちのクラウド日記

仕事や勉強で得た Microsoft 365 関連の技術知識を投稿していくブログです。

【PowerApps】テーブルからレコードを集計して件数を表示する方法

今回は「アンケートの集計結果」のように、PowerApps でレコードを集計して件数を表示する方法を紹介します。

目次

データソースの構成

サンプルのデータソースは、下図構成のSharePoint リスト(旅行先リスト)を使用します。
本記事では下記リストを利用して説明を行います。

列名 列の種類
希望旅行先 1行テキスト
年齢 選択肢

画面の構成

PowerAppsにはギャラリーを配置しています。
ギャラリーのレイアウトは「タイトルとサブタイトル」を選択しています。

手順

手順1.Gallery の設定

Gallery には集計後(重複を削除した状態)の「旅行先リスト」を表示するので、Gallery の「Items」に下図のコードを入力します。

Distinct 関数は、指定した列から重複レコードを削除する関数です。
上図では「希望旅行先」列で重複のチェックをしています。
 Docs - PowerApps での Distinct 関数

手順2.Title の設定

Galley - Title の「Text」に下図のコードを入力します。
「ThisItem.Result」で Distinct 関数の結果を表示します。



Distinct関数は結果を「テーブル形式」で返します。
返されたテーブル値はResult で取得・参照します。
今回は Result で、重複なしの「希望旅行先」を取得しています。

手順3.SubTitle の設定

Galley - SubTitle の「Text」に下記のコードを入力します。



Filter関数は、条件に一致するレコードを絞り込んでテーブル形式で返します。
 Docs - PowerApps での Filter、Search、および LookUp 関数
CountRows関数は、テーブルのレコード件数を数値で返します。
 Docs - PowerApps の Count、CountA、CountIf、および CountRows 関数

下図は完成イメージです。
「旅行先リスト」から「希望旅行先」列ごとに集計を行ったので「沖縄」をカウントしたら5件あった、というイメージですね。
しかし、1点補足に記載の注意事項があります。

補足.注意事項

委任問題

PowerApps でデータを扱う場合、委任の問題が大きく関係してきます。
Docs - キャンバス アプリでの委任について

PowerApps は、データ処理を PowerApps 側で行わず、データソース(SharePointSQLServerなど)に処理を委任して、処理結果を PowerApps 側に持ってくることができます。
これにより端末や通信時の負担を大幅に減らせるのです。

この「データソースに処理を委任することができるかどうか」が PowerApps で大規模なデータセットを操作する上で重要なポイントになります。

大規模なデータセットを操作するには、委任できるデータソースと数式が必要です。
 ・データソースと数式で委任がサポートされている場合は、データソース側に処理が委任されて、処理結果がPowerAppsに返されます。
 ・データソースと数式で委任がサポートされていない場合は、PowerApps 側で処理が必要なため、連携されるレコード数などが制限されます。

PowerApps の仕様で、PowerApps 側で処理可能なレコード件数は、500 件に制限されます。
※手動による設定変更で、MAX 2,000 件まで増加可能。

委任可能な関数と、委任不可の関数を組み合わせた場合

委任可能な関数(Filterなど)と委任不可な関数(CountRowsなど)を組み合わせた場合、委任不可なものとなり、返されるレコード数は最大500件となります。

本記事で利用した「旅行先リスト」を使って500件を超えるとどうなるのか試してみました。

下図右側の集計後リストは、今回の記事と同じ方法で作成した Galley です。
SharePointの旅行先リストには「沖縄」は523件あるのに、PowerAppsでは「沖縄」が500件に減っています。

理由は、CountRows 関数は委任不可の関数であるため、PowerApps 側で処理可能な件数500件を超えたからです。
データソース全体が500件を超える場合、もしくは、絞り込まれた後の件数が500件を超える場合は、正確な計算ができないため、十分にご注意ください。

【Exchange】組織全体で会議招待メールを自動承諾させる

はじめに

今回は組織全体のルールとして、特定のユーザーから予定参加依頼(会議招待)メールを受信した際に予定参加を「自動承諾」する方法 をご紹介します。
組織全体でメールの仕訳ルールを適用する場合、Exchange管理センターでトランスポートルールを作成します。

目次

トランスポートルールと仕訳ルールの違い

トランスポートルール

組織で管理するルールであり、設定条件によっては全ユーザーが対象となります。

仕訳ルール

ユーザー自身が設定・管理するルールであり、個人が対象となります。
Aさんが自分の Outlook クライアントで作成した仕訳ルールは、Bさんには適用されません。

注意事項

本記事の内容を設定する場合は、下記の点を考慮して運用に問題ないかご検討ください。

・本記事設定後は、メールを確認せず自動的に予約が承諾されます。
・予定の重複があってもすべて “承諾” されます。
・設定は全ユーザーに適用されます。

設定手順

下記手順を実施して、予定参加依頼メールに対し自動承諾するルールを作成します。

1.Exchange 管理者権限を持つユーザーで、Exchange 管理センター にサインイン。
2.左側メニューより [メール フロー] > [ルール] をクリック。
3.画面中央より [ルール] 下の [+] アイコン > [ルールの新規作成] を選択。

4.[ルールの新規作成] ウィンドウ下部の [その他のオプション] をクリック。

5.[名前] にルールの名前を入力します。
6.[このルールを適用する条件...] で [メッセージのプロパティ...] > [メッセージの種類を含む] を選択。
7.[メッセージの種類の選択] 画面で [予定表作成] を選択して [OK] をクリック。

※ 特定ユーザーからのメールのみ自動承諾する場合は、下記8~10を設定します。
8.[このルールを適用する条件...] の下にある [条件の追加] をクリック。
9.[送信者...] を選択 > [アドレスに次のいずれかの単語が含まれる] を選択。
10.送信者のメールアドレスを入力 > [+]をクリック > [OK]をクリックする。
 ※ここで設定したメールアドレスから受信した予定参加依頼メールのみ自動承諾を行います。

11.[実行する処理...] で [メッセージのプロパティを変更する...] > [メッセージヘッダーの設定] を選択。
12.[メッセージ ヘッダー] > [テキストの入力...] をクリックし、[メッセージ ヘッダー] 画面で [X-MS-Exchange-Organization-CalendarBooking-Response] を入力して [OK] をクリック。
13.[値] > [テキストの入力...] をクリックし、[ヘッダー値] 画面にて [Accept] と入力後 [OK] をクリック。


14.最後に[保存] をクリック。

完成形はこんな感じ。設定から反映まで 30 分程度時間がかかります。

上図赤枠外の設定は任意です。
優先度は「0」が一番高く最優先で実行されます。

参考

Exchange Online でメール フロー ルールを使用して、予定表に会議を自動的に追加する

Exchange Online のメール フロー ルール (トランスポート ルール)

【PowerAutomate】アイテムまたはフォルダに対するアクセス権付与について

SharePoint の アクション「アイテムまたはフォルダに対するアクセス権付与」に関するTipsです。 このアクションは名前の通り、SharePoint のアイテムまたはフォルダに対して権限を付与します。

ただし、アクションに存在する権限は「Can Edit」か「Can Read」のみです。
他の権限を付与する場合は権限ごとに割り当てられた「RoleID」を指定する必要があります。

既定の権限に割り振られている RoleID は下記の通り。

権限名(日本語) 権限名(英語) RoleID
フルコントロール Full Control 1073741829
デザイン Design 1073741828
編集 Edit 1073741830
投稿 Contribute 1073741827
閲覧 Read 1073741826
制限付きビュー Limited Access 1073741825
読み取り専用 View Only 1073741924


「アイテムまたはフォルダに対するアクセス権付与」アクションの書き方は下図のようになります。


サイト内で独自の権限を作成している場合は、下記場所に接続することでRoleIDを確認することができるようです。(Docs記事参照)

https://<your-sharepoint-site>/_api/web/roledefinitions

参考

リスト アイテムとファイルのアクセス許可を管理し、Power Automateする(Docs)
https://docs.microsoft.com/ja-jp/sharepoint/dev/business-apps/power-automate/guidance/manage-list-item-file-permissions

【SharePoint】実践!列の書式設定 サンプル2

こんにちは、くらっちです。
前回の下記事に続き、SharePoint の「列の書式設定」のサンプルを紹介します。
列の書式設定は、アイテムやファイルに影響はなく表示のみが変更されます。
本記事では「▲サンプルコード」をクリックすることで、サンプルを参照できます。

kurattyodiary.hatenablog.com

目次

1.対象列のユーザー宛にメールを送信する

メールアイコンをクリックすると、メールソフトが起動します。
必ず列の種類「ユーザーまたはグループ」列に対して書式設定を行ってください。
メール作成にあたってリストに必要な列は下表の通りです。

メール項目 列内部名 列の種類
宛先 (任意) ユーザーまたはグループ
件名 Title 1行テキスト
本文 Comment 複数行テキスト(書式なしテキスト)
アイテムのID ID ※標準のID列を使用


サンプルコード

{
  "$schema": "https://developer.microsoft.com/json-schemas/sp/v2/column-formatting.schema.json",
  "elmType": "div",
  "children": [
      {
          "elmType": "span",
          "style": {
              "padding-right": "8px"
          },
          "txtContent": "@currentField.title"
      },
      {
          "elmType": "a",
          "attributes": {
              "iconName": "Mail",
              "class": "sp-field-quickActions",
              "href": {
                  "operator": "+",
                  "operands": [
                      "mailto:",
                      "@currentField.email",
                      "?subject=",
                      "[$Title]",
                      "&body=",
                      "[$Comment]",
                      "\r\n---\r\n",
                      "@currentField.title",
                      "\r\n詳細はコチラをクリック!\r\n https://contoso.sharepoint.com/sites/[サイト名]/Lists/[リスト名]/DispForm.aspx?ID=",
                      "[$ID]"
                  ]
              }
          }
      }
  ]
}


2.複数人宛のメールを作成する

承認者が1人の場合は「Send email to ユーザー名」
承認者が複数の場合は「Send email to N members」と列に表示されます。
リンククリックで、メールソフトが起動して宛先には全員のメールアドレスが入力されます。
列の種類は「ユーザーまたはグループ」列を使ってください。


サンプルコード

{
    "$schema": "https://developer.microsoft.com/json-schemas/sp/v2/column-formatting.schema.json",
    "elmType": "a",
    "style": {
        "display": "=if(length(@currentField) > 0, 'flex', 'none')"
    },
    "attributes": {
        "href": {
            "operator": "+",
            "operands": [
                "mailto:",
                "=join(@currentField.email, ';')"
            ]
        }
    },
    "children": [
        {
            "elmType": "span",
            "txtContent": {
                "operator": "+",
                "operands": [
                    "Send email to ",
                    {
                        "operator": "?",
                        "operands": [
                            "=length(@currentField) == 1",
                            "@currentField.title",
                            "='all ' + length(@currentField) + ' members'"
                        ]
                    }
                ]
            }
        }
    ]
}


3.数値によって進む進捗アイコン

書式設定を適用した列の数値に従ってプログレスアイコンが進んでいきます。
下図の場合、Progress列には上から「2、1、3」が入力されており、その数値に従ってアイコンが表示されます。
列の種類は「数値列」を使ってください。

サンプルコード

{
    "$schema": "https://developer.microsoft.com/json-schemas/sp/v2/column-formatting.schema.json",
    "elmType": "div",
    "style": {
      "font-size": "16px"
    },
    "children": [
      {
        "elmType": "span",
        "attributes": {
          "title": "Step 1",
          "iconName": "=if(@currentField < 1, 'TriangleRight12', 'TriangleSolidRight12')",
          "class": "='ms-fontColor-' + if(@currentField == 1, 'green', if(@currentField > 1, 'greenLight', 'neutralLight'))"
        },
        "style": {
          "padding": "0 2px"
        }
      },
      {
        "elmType": "span",
        "attributes": {
          "title": "Step 2",
          "iconName": "=if(@currentField < 2, 'TriangleRight12', 'TriangleSolidRight12')",
          "class": "='ms-fontColor-' + if(@currentField == 2, 'green', if(@currentField > 2, 'greenLight', 'neutralLight'))"
        },
        "style": {
          "padding": "0 2px"
        }
      },
      {
        "elmType": "span",
        "attributes": {
          "title": "Step 3",
          "iconName": "=if(@currentField < 3, 'TriangleRight12', 'TriangleSolidRight12')",
          "class": "='ms-fontColor-' + if(@currentField == 3, 'green', if(@currentField > 3, 'greenLight', 'neutralLight'))"
        },
        "style": {
          "padding": "0 2px"
        }
      }
    ]
  }


4.他列の承認状況に従って進む進捗アイコン

他の列の入力値に従ってプログレスアイコンが進んでいきます。
下図の場合、承認ステータスの値(進捗状況)に従ってアイコンが表示されます。
Proguress列は列の種類に指定はありませんが、承認ステータス列は「選択肢列」にしてください。

サンプルコード

{
    "$schema": "https://developer.microsoft.com/json-schemas/sp/v2/column-formatting.schema.json",
    "elmType": "div",
    "style": {
      "font-size": "16px"
    },
    "children": [
      {
        "elmType": "span",
        "attributes": {
          "title": "Step 1",
          "iconName": "=if([$Status] == '申請中', 'TriangleSolidRight12', 'TriangleRight12')",
          "class": "='ms-fontColor-' + if([$Status] == '申請中', 'green', if([$Status] == '審査中', 'greenLight', if([$Status] == '承認', 'greenLight', 'neutralLight')))"
        },
        "style": {
          "padding": "0 2px"
        }
      },
      {
        "elmType": "span",
        "attributes": {
          "title": "Step 2",
          "iconName": "=if([$Status] == '審査中', 'TriangleSolidRight12', 'TriangleRight12')",
          "class": "='ms-fontColor-' + if([$Status] == '審査中', 'green', if([$Status] == '承認', 'greenLight', 'neutralLight'))"
        },
        "style": {
          "padding": "0 2px"
        }
      },
      {
        "elmType": "span",
        "attributes": {
          "title": "Step 3",
          "iconName": "=if([$Status] == '承認', 'TriangleSolidRight12', 'TriangleRight12')",
          "class": "='ms-fontColor-' + if([$Status] == '承認', 'green', 'neutralLight')"
        },
        "style": {
          "padding": "0 2px"
        }
      }
    ]
  }

参考ページ

Use column formatting to customize SharePoint https://docs.microsoft.com/en-us/sharepoint/dev/declarative-customization/column-formatting

Office UI Fabric Icons (IconNameの検索に役立ちます) https://uifabricicons.azurewebsites.net/

【SharePoint】実践!列の書式設定 サンプル1

最近までめちゃくちゃ忙しくて久々の投稿です。ようやく記事書ける、嬉しい。。

今回は、SharePoint リストをカスタマイズするための「列の書式設定」についてです。
「列の書式設定」はjsonを用いて記述しますが「jsonの書き方がわからない💦」という方も多いと思います。
そこで今回はどれもすぐに利用できるものを用意しました。

列の書式設定は、アイテムやファイルに影響はなく表示のみが変更されます。
安心してご活用ください。

この記事で記載しているサンプルは、「初めて」列の書式設定を活用する方向けの記事です。
「▲サンプルコード」の部分をクリックすることで、サンプルコードを参照できます。

コードをコピーして、列の書式設定に張り付ければ適用できます。

目次

1.入力値の中央揃え

リストアイテムの文字表示は、基本的に左寄せです。
中央揃えに変更するには下記コードを利用します。
列の種類はどれでも利用可能です。

サンプルコード

{
  "$schema": "https://developer.microsoft.com/json-schemas/sp/v2/column-formatting.schema.json",
  "elmType": "div",
  "style": {
    "display": "table",
    "width": "100%"
  },
  "children": [
    {
      "elmType": "div",
      "txtContent": "@currentField",
      "style": {
        "display": "table-cell",
        "text-align": "center",
        "vertical-align": "middle"
      }
    }
  ]
}

2.文字サイズの拡張

ハイパーリンクまたは画像」列などリンクを含むテキストの文字サイズを大きくする場合は「@currentField」「@currentField.desc」の両方を指定する必要があります。

文字サイズの調整は、下記を修正することで可能です。
 小:sp-field-fontSizeSmall
 中:sp-field-fontSizeMedium
 大:sp-field-fontSizeLarge
特大:sp-field-fontSizeXLarge


サンプルコード

{
     "$schema": "https://developer.microsoft.com/json-schemas/sp/v2/column-formatting.schema.json",
     "elmType": "a",
     "style": {
          "box-sizing": "border-box",
          "padding": "0 2px",
          "overflow": "hidden",
          "text-overflow": "ellipsis"
     },
     "attributes": {
          "class": "sp-field-fontSizeLarge",
          "href": "@currentField",
          "target": "_blank"
     },
     "txtContent": "@currentField.desc"
}

3.ユーザー列にユーザーのアイコンを表示する

ユーザー列は標準ではユーザー名のみ表示されますが、同時に自分のアイコンも表示させることが可能です。
必ず列の種類「ユーザーまたはグループ」列を指定してください。

サンプルコード

{
    "$schema": "https://developer.microsoft.com/json-schemas/sp/v2/column-formatting.schema.json",
    "elmType": "div",
    "children": [
        {
            "elmType": "img",
            "style": {
                "width": "32px",
                "height": "32px",
                "overflow": "hidden",
                "border-radius": "50%",
                "margin": "2px"
            },
            "attributes": {
                "src": "='/_layouts/15/userphoto.aspx?size=S&accountname=' + @currentField.email",
                "title": "@currentField.title"
            }
        },
        {
            "elmType": "span",
            "style": {
                "vertical-align": "middle",
                "margin-left": "2px"
            },
            "txtContent": "@currentField.title"
        }
    ],
    "defaultHoverField": "@currentField"
}

使い方を覚えれば、あとはHTMLとCSSの知識で何とかなりそうです。
次回はもうちょっとだけ作りこんだ実用方法をご紹介したいと思います。

参考ページ

Use column formatting to customize SharePoint(Docs)

https://docs.microsoft.com/en-us/sharepoint/dev/declarative-customization/column-formatting

SharePointリストの書式設定(JSON) チートシート

https://qiita.com/Momono_gg/items/58bf768fb83bddfbdca1

【PowerAutomate】SharePoint フィルタークエリの書き方講座

はじめに

Power Automate によるフロー作成時、SharePointの「複数の項目を取得する」などのアクションを利用するシーンがありますよね。
詳細オプションの中にあるフィルタークエリを利用することでアイテムを絞り込むことができるのですが、そのクエリの書き方がとても難しい!!

そこでこの記事では、利用頻度の高いフィルタークエリをサンプルコード付きで紹介します。

※この記事は Qiita から移行して、最新の情報に更新しています。

目次

注意事項

・フィルタークエリに利用する列名は列の内部名です。
・Year や Month といった日付関数は利用できません。
・「複数行テキスト」「ハイパーリンクまたは画像」の列はフィルタークエリで利用できません。

フィルタークエリ

A eq B

A は B と等しい を表す。

例:Department が 経理部 であるアイテムを取得する
Department eq '経理部'

A ne B

A は B と等しくない を表す。

例:Department が 経理部 ではないアイテムを取得する
Department ne '経理部'

A ge B

A が B 以上 を表す。

例:Price が 1,000円 以上のアイテムを取得する
Price ge 1000

A gt B

A が B より大きい を表す。

例:Price が 1,000円 より大きいアイテムを取得する
Price gt 1000

A le B

A が B 以下 を表す。

例:Price が 1,000円 以下のアイテムを取得する
Price le 1000

A lt B

A が B 未満 を表す。

例:Price が 1,000円 未満のアイテムを取得する
Price lt 1000

substringof(A,B)

B に 文字列A が含まれている を表す。

例:UserName に '島' が含まれているアイテムを取得する
substringof('島',UserName)

startswith(A,B)

A の始まりが 文字列B を表す。

例:CountryName の始まりが 'Jap' であるアイテムを取得する
startswith(CountryName,'Jap')

A add B

A + B を表す。

例:Price +1,000円 が2,000円未満のアイテムを取得する
(Price add 1000) lt 2000

A sub B

A - B を表す。

例:Price -1,000円 が500円未満のアイテムを取得する
(Price sub 1000) lt 500

null値の利用

例:Address が null ではないアイテムを取得する
Address ne null

【Exchange】会議を代理で開催、会議招待を代理承認する

はじめに

皆さんの会社では社長や役員の予定は誰が管理していますか?
社長や役員自身で管理している会社もあれば、秘書が管理している会社もあると思います。
Outlook 予定表であれば「簡単に秘書が代理で会議開催、会議招待に代理返信」することができるようになります。
今回はPowerShell を使って代理人を設定する方法をご紹介します。

目次

会議を代理で開催するとき

代理設定を行うことで、社長(例)の代わりに代理人Outlook 予定表で予定を登録することができるようになります。その際の登録者は登録を行った代理人ではなく、社長が登録者(会議開催者)になります。

f:id:kurakurattyo:20220214180219p:plain

会議招待を代理承認するとき

代理人は社長(例)宛に送られた会議招待メールを受信して代理人として返信することができます。

f:id:kurakurattyo:20220214235543p:plain

下図は代理人が会議招待を承認して返信したメールの内容です。
メールの内容は代理人が返信していることが分かるようになっています。

f:id:kurakurattyo:20220214235857p:plain



設定の事前準備

代理人設定を行う前に下記の準備が必要です。
・EXO V2 モジュールがインストールされている事。
・EXO のアクセス許可(Exchange管理者や全体管理者など)を持っている事。
PowerShell で EXO に接続できる事。
・誰の予定表を誰が代理で管理するのか、の確認。

設定方法

今回は例として、以下内容を実現するための設定を行います。
・秘書(Hisyo)を、社長(Syatyo)の代理人とする。
・秘書は、社長の代わりに会議開催や会議招待に返信をできるようにする。
・その他のユーザーは、社長の予定を「予定の有無のみ」分かるようにする。

手順

PowerShell で ExchangeOnline に接続します。

1.秘書(Hisyo)を社長(Syatyo)の代理ユーザーにする。

下記スクリプトを実行します。

Add-MailboxFolderPermission -Identity "Syatyo@contoso.onmicrosoft.com:\予定表"
  -User "Hisyo@contoso.onmicrosoft.com"
  -AccessRights Editor
  -SharingPermissionFlags Delegate,CanViewPrivateItems

-Identity は、代理を立てるメールボックスのフォルダーを指定します。
 今回は、予定表フォルダーに対して代理設定を行います。フォルダーの指定を忘れないようにご注意ください。
-User は、代理となるユーザーもしくはグループを指定します。
-AccessRights は、追加するアクセス許可を指定します。
-SharingPermissionFlags は、予定表の代理アクセス権を割り当てます。AccessRights が Editor の場合のみ使用できます。
 Deligate:予定表の代理人として、会議招待に返信することができるようになります。
 CanViewPrivateItems:予定表の非公開アイテムにアクセスできます。この値は、Delegate の値と一緒に使用する必要があります。

2.その他ユーザーは「社長の予定の有無のみ」分かるようにする。

下記スクリプトを実行します。

Set-MailboxFolderPermission -Identity "Syatyo@contoso.onmicrosoft.com:\予定表"
  -User "既定"
  -AccessRights AvailabilityOnly

-Identity は、対象メールボックスの予定表フォルダーを指定します。
-User "既定"は、「代理人以外のその他ユーザー」を指します。
-AccessRightsは、追加するアクセス許可を指定します。
  AvailabilityOnly:空き時間情報のみを表示します。
  LimitedDetails:空き時間情報、件名、場所を表示します。

※AvailabilityOnly が設定されている場合、代理設定したユーザーと代理人以外は、下図のように「予定あり」としか分からず、詳細も見れません。
f:id:kurakurattyo:20220214233951p:plain

注意事項

1:Identity で指定するフォルダーは「:\予定表」ではなく「:\calendar」の可能性があります。予定表が見つからない、という内容のエラーが出る場合は「:\予定表」を「:\calendar」に置き換えて実行してみてください。

2:1つの予定表フォルダーに代理人を複数指定する場合は、カンマ区切りで指定します。

3:Add-MailboxFolderPermission の User で指定できるのは以下の3種類のみです。
   ・ユーザーメールボックス
   ・メールが有効なセキュリティグループ
   ・メールユーザー

4:Add-MailboxFolderPermission と Set-MailboxFolderPermission は実行する度に設定が上書き保存されます。前回設定した代理人もリセットされてしまうため、都度必要なメンバー全員を設定してください。

5:本記事記載のPowerShell を実行した場合、会議の招待メールは代理人のみ受信します。
代理を立てたユーザーには招待メールが送信されませんのでご注意ください。

参考

Add-MailboxFolderPermission | Docs
Set-MailboxFolderPermission | Docs