くらっちのクラウド日記

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

【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の「複数の項目を取得する」などのアクションを利用するシーンがありますよね。
詳細オプションの中にあるフィルタークエリを利用することでアイテムを絞り込むことができるのですが、そのクエリがとても難しい!!

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

目次

注意事項

・フィルタークエリに利用する列名は列の内部名です。
・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

【Exchange】会議室を予約できるメンバーを制限する

はじめに

Outlook 予定表で予定登録する時、ユーザーは会議室の予約を行うことができます。
デフォルトでは、全ての会議室を誰でも予定に追加することが可能ですが、役員専用の会議室のように一般社員の利用が望ましくない会議室は特定のメンバーのみ予約できるようにしたいと考えることもあると思います。

そんなときは、会議室メールボックスの設定を変更し「会議室を予約できるメンバーを限定」してしまいましょう。
今回はその方法をご紹介します。

目次

事前確認

会議室メールボックスの設定変更を行う前に下記の準備が必要です。
・EXO V2 モジュールがインストールされている事。
・EXO のアクセス許可(Exchange管理者や全体管理者など)を持っている事。
PowerShell で EXO に接続できる事。

会議室を予約できるメンバーを制限する

PowerShell で ExchangeOnline に接続後、下記コマンドを実行します。

Set-CalendarProcessing -Identity "<設定変更する会議室のメールアドレス>" -AutomateProcessing AutoAccept -BookInPolicy "<予約を許可するメールアドレス>" -AllBookInPolicy $false

-Identity で、設定変更する会議室のメールアドレスを指定します。
-AutomateProcessing AutoAccept で「予約が入った場合は自動承認を行う」ようにします。
反対に、自動承認を無効にする場合は None を指定します。
-BookInPolicy で、会議室の予約が可能なユーザー or グループ or 共有メールボックス を指定します。指定対象が複数いる場合はカンマ区切りで指定してください。
-AllBookInPokucy で、BookInPolicy で指定していないユーザーが会議室を予約した場合の挙動を設定します。
今回、指定外のユーザーは会議室を予約できないようにしたいので $false を設定します。

例:User1とGroup1のみ SampleMeetingRoom の予約が可能。他は予約不可

Set-CalendarProcessing -Identity "SampleMeetingRoom@contoso.co.jp" -AutomateProcessing AutoAccept -BookInPolicy "User1@contoso.co.jp","Group1@contoso.co.jp" -AllBookInPolicy $false

注意事項

注意 その1:
BookInPolicyで予約可能な対象は、ユーザー or メールが有効なセキュリティグループ or 共有メールボックス です。
Microsoft365 グループなどは予約可能な対象にできません。


注意 その2:
BookInPolicyに共有メールボックスを登録した場合、共有メールボックスで会議室を予約する際は会議室の予約が可能ですが、共有メールボックスに所属するメンバー個人が会議室を予約した場合は却下されます。


注意 その3:
BookInPolicyで予約可能なユーザー or グループが複数の場合はカンマ区切りで全て指定してください。
Set-CalendarProcessing で変更した箇所は、上書き保存による変更のため、既存の設定値は消えてしまいます。

Set-CalendarProcessing -Identity "SampleMeetingRoom@contoso.co.jp" -AutomateProcessing AutoAccept -BookInPolicy "User1@contoso.co.jp","User2@contoso.co.jp","Group1@contoso.co.jp" -AllBookInPolicy $false


注意 その4:
設定変更した会議室は以後、予定の登録直後に会議室が自動的に予定を辞退して「キャンセル扱い」となるため、「結果的に会議室を予約できないようにする」という動きとなります。
この時、「会議室を利用しない会議の予約」は予定表の登録されたままとなります。

f:id:kurakurattyo:20220126170256p:plain

結果確認

下記コマンドを実行して設定変更されていることを確認します。

Get-CalendarProcessing -Identity <設定変更した会議室のメールアドレス> | fl

設定を解除する場合

設定した制限を解除する場合は下記コマンドを実行します。

Set-CalendarProcessing -Identity <設定変更した会議室 のメールアドレス> -BookInPolicy $null -AllBookInPolicy $True

参考URL

Set-CalendarProcessing | Docs

【Exchange】会議室を使いやすくするために定員、階数、機能を登録しよう

はじめに

Outlook 予定表で会議室を予約する際に利用する「会議室の検索」機能には、会議室を絞り込むためのフィルター項目として「建物」「定員」「階数」「機能」が用意されています。

「建物」は、下記リンク先で説明している「会議室リスト」でフィルターします。

【Exchange】会議室リストを作って会議室メールボックスを管理する - くらっちのクラウド日記

そのほか「定員」「階数」「機能」を会議室メールボックスに登録することで、より詳細に会議室を検索できるようになります。

f:id:kurakurattyo:20220126144346p:plain

今回は、PowerShell で会議室メールボックスに「定員」「階数」「機能」を登録する方法を紹介します。

管理センターから項目を登録する

「定員」「機能」は、Microsoft365管理センターやExchange管理センターで登録することが可能です。
変更する対象が少ないのであれば、管理センターから実施した方が簡単です。
ただし「階数」は管理センターから登録することができないため、PowerShell を用いる必要があります。

Exchange管理センター > 受信者 > リソース > 会議室を選択
・「定員」を修正する場合
  鉛筆マーク を選択 > 定員 を修正する

・「機能」を修正する場合
  追加情報 を選択 > タグ にカンマ区切りで修正する

PowerShell で「定員」を登録する

PowerShell で会議室メールボックスに「定員」を登録する際は、下記コマンドを実行します。

構文:Set-Mailbox -Identity "<会議室メールボックス>" -ResourceCapacity <定員数>
 例:Set-Mailbox -Identity "sample_meetingroom@contoso.co.jp"-ResourceCapacity 12

PowerShell で「階数」を登録する

PowerShell で会議室メールボックスに「階層」を登録する際は、下記コマンドを実行します。

構文:Set-Place -Identity "<会議室メールボックス>" -floor <階数>
 例:Set-Place -Identity "sample_meetingroom@contoso.co.jp" -floor 10

PowerShell で「機能」を登録する

PowerShell で会議室メールボックスに「機能」を登録する際は、下記コマンドを実行します。
複数の機能を登録する場合は、カンマ区切りで登録してください。
上書き保存されるため、登録時は必要な分すべて登録してください。

構文:Set-Place -Identity "<会議室メールボックス>" -Tag "<機能1>","<機能2>"
 例:Set-Place -Identity "sample_meetingroom@contoso.co.jp" -Tag "スピーカー","iPad"

注意事項

PowerShell で各項目を修正する際に注意すべき点があります。

Set-Place を利用して1行のコマンドで、都市(City)と機能(Tag)を同時に編集しようとするとエラーが発生して処理が失敗します。
1つの会議室に都市と機能を登録する場合は、都市修正のコマンドと機能修正のコマンドを別々に用意して登録を行う等の対処が必要です。

ただし、階数(floor)と機能(Tag)は1行のコマンドで同時に編集することが可能です。

参考URL

【Exchange】会議室リストを作って会議室メールボックスを管理する | くらっちのクラウド日記
Set-Place | Docs
Set-User | Docs